**********************************************************************
セッションS2b
テーマ:SBCの使い方の新しいカタチ
講師:菊池 豊 (高知工科大学 地域連携機構)
   衣川 亮太 (Tombo Works)
コーディネータ:高瀬 英希 (東京大学/JSTさきがけ)
日時:2021/9/3 10:00~11:10
参加人数:17名
**********************************************************************
SBC(Single Board Computer)がどうなるか?
メインとしてFA(Factory Automation)とかPLC制御の話を最初に行い、IoT分野やFA分野でも使えるという話をします。
高瀬氏がSBCの概要と今回のキーワードであるElixirのErlangについて話します。
その後、前半で菊池氏からFAやPLC制御の解説とSBCがFAにもたらす影響を説明します。
最後に、衣川氏からFA分野でのSBCの開発/運用の話をします。
(注記:開催当日は菊池氏、衣川氏の順に講演を実施いただいたが、内容の理解性を高めるために、議事録および一般公開資料(スライド)の順序を入れ替えています)

< SBCの概要と今回のキーワードであるElixirとErlangについて >
SBCはLinuxがサクサクと動作し、小型で低電力、低価格なので組込み向けでも使えるコンピュータです。
I/Oが割りと豊富でGUIが使えるものもあります。

Elixirは2012年に登場した新たな関数型言語です。
ErlangのVM上で動作し、Erlang自体が電話交換機が起源なので、高い並列性能があり、プロセスモデルが軽量かつ頑強である。
そして、プロセス単位で復旧するので耐障害性が極めて高い。
Erlangは通信分野でかなり使われているが、書きにくい。
ElixirはRubyを基にした言語設計でモダンで書きやすい記述になり、WebフレームワークであるPhoenixを持っている。
Elixirは実行時に型が決まるやや強めの動的型付けやデータの不変性のイミュータブル性がある。
そして、処理のモジュール化と制御の抽象化がされている。
組込み向けのメリットとしてはバイナリでモノが書ける。
Elixirではデータフローと並列処理を直感的に記述できる。
ElixirはIoTに向いていると考えている。
Phoenixフレームワークでお手軽にウェブサーバを作れ、NxでAIや機械学習に使うテンソル計算を簡単に書ける。
NERVESはElixirのIoTフレームワークで、ファームウェアが極めて小さい。
そして、ファイルシステムを2重に持っており、堅牢性を高めている。
Elixirの記述をそのまま流用でき、有用なIoTライブラリがあるので、IoTデバイスの開発がお手軽にできるようになっている。


< FA分野でのSBCの開発/運用 >
IoT分野におけるSBCの活用が昨今増加していると感じる。
この要因の一つは「やりたいこと」や「やれると考えられること」が増えたからではないか?と考えている。
技術的な話ではなく、開発者の発想力的な話ということ。
組込み分野とWeb分野の技術が手を取り合ってできることを多くの人が気付けるようになった。
それにはホビーユースで触れるラズパイのようなSBCが大きく寄与した可能性がある。
やれることの多様性に気づくと、様々な分野で活用されるようになった。例えばFAであり、例えば農業。

FAにおいては、従来のPLCのみの場合、システムは制御盤内に閉じていたが、IoTトレンド下では、システムが制御盤外にある上位のデータベースや他の制御機構に開かれている。これに対する考えられる実装パターンは2つあり、1つは元のPLCのインタフェースを置き換える方法で、もう1つがPLCを丸まるコード化して電気的に絶縁された入出力をもってボードを守りつつ動かし、上位と通信する方法である。
農業においては、SBCを組み込むことで農家はハウスにいなくてもハウス内の環境を知れるというサービスが提供されている。

新たにSBCを他分野に活用していくにあたって課題がある。
1つ目がSBCをどうするかという点である。
信頼性の問題などからどこまでSBCで処理するか、はたまた製品仕様に合わせたボードを開発するかの選択肢がある。
これを決めるのは難しく、一度決めると変えづらくなる。
2つ目はソフト開発に関してである。
電断対策をどうするか。ファイル書き込み中に電源が落ちるとデータが飛ぶ。
飛んだデータによってアプリケーションの動作が正常でなくなったり、OSが起動しなくなる可能性がある。
ソフトウェア設定はどうするか、ファームウェアの管理にも問題がある。
バグを修正したバージョンを公開した場合にどうやって既存のシステムのバージョンアップをするかなどである。
今までこれらは組込みLinux開発のプロの仕事だった。
SBCの活用が普及したのならば、これらのプロの課題を軽減できると嬉しい。

その課題はNervesが解決してくれる。

ハードの課題はNervesが安価なSBCを豊富にサポートしている点で解決できる。
あるSBCで開発していたが、課題をそのボードでクリアできない場合は他のボードへ移植する選択肢も持てる。
ソフトの課題は電断耐性があり、NervesがLinuxを隠蔽しているのでLinuxの知識を覚える必要がない。
また、Elixirを使うので並行処理にも強く豊富なライブラリがありサポートしてくれる。
ファームウェアの話で言うと、Nerves内でソースコードが閉じているため管理が容易で、ターゲットマシンの変更もライブラリの追加と環境変数の切り替えでできる。
遠隔アップデートのためのサーバも用意されている。
汎用OS対応CPUモジュールである横河電機製e-RT3への移植実績もある。

(H氏)
PLCとSBCの関係は?
(回答)
PLCもSBCで置き換えることもできるし、既存のPLCのインタフェースだけ置き換えることもできる。

(H氏)
電源の堅牢性の話はあったが、ソフトの堅牢性の話を聞きたい。
ラダーってポーリングベースでスキャンをかけるが、1回目で取り逃しても2回目で拾ってくれるという点があるが、そのようなときも同じ状況になるのか?
(回答)
PLCの持っている機能をNervesが持っているわけではなく、Nervesは組込みLinuxの開発プラットフォームなので、PLCが担っている機能をElixirアプリケーションとしてその上に作らないといけない。

< FAやPLC制御の解説とSBCがFAにもたらす影響 >
小水力発電の制御システム整備に参加して気付いたことがある。
それは回路盤、ハードウェア、ソフトウェアのエンジニア間で明らかな壁があるということである。

産業用コンピュータとSBCの違いについて挙げていく。
産業用コンピュータは確実に安全に動くためならば多少金がかかっても良いというスタンスである。
外との情報のやり取りが少ないことで価値や安全性を担保している。
製品自体が標準化の使用に沿っていないことが特徴。

一方、SBCは楽しければ良く、安く済ませることで他のことをやりたいというスタンスである。
そして、人間の考える論理的なものに近いところに持っていこうとしている印象を受ける。
モノを相手に進化してきた物とヒトを相手に進化してきた物の違いがでている。
モノを相手にクラウドに出ようとしたのが産業用コンピュータで、ヒトを相手にモノも扱おうとしたのがIoTだと感じている。

電気業界ではリレー回路を模倣したプログラミング図であるラダー・ロジックを使う。
このラダー・ロジックへの大量の入出力の集まりを動作させるのがPLCである。
FAが1ビット記録するためにリレーを用いて自己保持回路を作るのは原始的である。

IoTとFAの融合は良いことをもたらす。
技術的な進展や効率的な開発ができたり、より広いマーケットへの進出やコスト削減が可能になる。
2021年に初めて「FAとIoTの融合」であるIndustry CloudsがHype Cycle for Emerging Technologiesに出てきた。
SBCを使ってWebで電力制御をやったり、1デバイス1ホストだとソフトを書く気分で簡単に機械を動かせる。
しかし、SBCだと産業用コンピュータとして使うには脆弱である。
そこで、様々な工夫をして産業用PLCを置き換える本格的なマシンを作成したいと考えている。


■まとめ
SBCの活用例とその課題を確認し、課題を解決するテクノロジーとしてNervesを紹介しました。
Nervesが組込みLinux開発のゲームチェンジャーだと思ってもらえたら嬉しい。