Upgrade to Pro — share decks privately, control downloads, hide ads and more …

産業機械をElixirで制御する

 産業機械をElixirで制御する

関数型言語の応用例として、制御をElixirで行った小水力発電所の例を紹介します。現在の産業機械の制御に使われてるハードウェア・ソフトウェアは多くの問題を抱えており、それを近代化する手法の一つにElixirの導入があると考えています。

1. 産業システム制御における課題点
2. 小水力発電所の解説
3. 小水力発電でElixirを使う判断をした経緯
4. 産業でElixirを使うためにハードウェアを開発した話
5. 実際の応用例

Avatar for kikuyuta

kikuyuta

June 14, 2025
Tweet

More Decks by kikuyuta

Other Decks in Technology

Transcript

  1. 関数型ほにゃららとの関わり • 1982 Science Tokyo – 1984ころ Lisp に出会う –

    1985 Franz Lisp 三昧 – 1992 助手 – 1994 博士号取得 • 属性文法型計算モデルへの書換 え系の応用 • 1997 高知工科大学 – 1999 B3実習を Scheme で • 2018 Elixir 使うぞ 1990〜 ネットワーカ 2011〜 再生可能エネ野郎 最新の関数型(とその環境)に 触れたのはこの6年ほど 2025.06.14 @kikuyuta 3
  2. 属性文法型言語 AG • とその環境 SAGE • ワイは検証系担当 • おそらく日本で始め て

    LaTeX/TeX で 製版された書籍 2025.06.14 @kikuyuta 4 kosho.or.jp さんより
  3. さて本日のお題 • 産業用の制御を近代化したい • どう新しい技術を既存の枠組みの中に入れ込んで行くか • 実のところあまり Elixir とか関数型には依存してない内容 –

    制御システムをどう Elixir で作り上げるかは別途 • 今週、風邪引いてずっと低調です – 声がうまく出ないかも – スライドの一部が別の発表から持ってきた英語のまま 2025.06.14 @kikuyuta 5
  4. 産業での制御 • PLC (Programmable Logic Controller) – あるいは魔改造を繰り返したフォン・ノイマンマシン • if

    - then ルールの羅列をひたすら繰り返す – とにかくプリミティブ • 例:動作中にメモリの中身が直接見れる・触れる • 現代的な Computer Science の知見が反映されてない – なんかやたらと高い – OSS やオープンなコミュニティがほとんどない • 狂気の道へのいざない 2025.06.14 @kikuyuta 6 三菱電機のホームページより
  5. お話する内容 • 近代化を進める • 制御に使える素敵な言語 • ハードウェアをどうするか • チャレンジした現場 •

    エコシステム・コミュニティ • つぎにくるもの • PLC から IPC IIoT へ • Elixir はいいぞ • Nerves マシン • 小水力発電システム • NervesJP, *.ex • ヘテロな分散環境 2025.06.14 @kikuyuta 7
  6. SHP Overview 2025.06.14 @kikuyuta 8 Penstock Powerhouse Flood way Conduit

    Intake weir Head tank Gross head (m) Flow (or discharge) (m3/s)
  7. Our 1st experience in 2016 2025.06.14 @kikuyuta 13 • An

    SHP in Umaji village, Kochi, Japan • Head 97m, Flow 200L/s, Power 145kW
  8. Our SCADA in 2016 2025.06.14 @kikuyuta 14 • Control System:

    conventional PLC • SCADA – Hardware: 3 Raspberry Pi 2B’s – Software: • in Python on RPi • PHP for Web – Distributed systems: • Web server on RPi PLC Raspberry Pi
  9. 課題 • Python やべ〜よ – 並行プログラミングできねぇ – コンパイラでの支援を期待できねぇ • ラズパイ

    やべ〜よ – 馬路村では3台のうち毎年どれかが壊れる… – 何も考えずにSDに書いてた – 高温多湿 2025.06.14 @kikuyuta 17
  10. 言語の検討 2025.06.14 @kikuyuta 21 • お断り:Siiibo証券さんほどちゃんとした検討ではないです • Go, Rust, Haskell,

    Erlang – ラストリゾートは JavaScript – Elm は? という茶々も入った • 詳しくはこちらを Elixir を使うようになった経緯 〜電力システム制御の現場から〜 https://qiita.com/kikuyuta/items/96c3f91a850e9274b0e9
  11. Why Elixir (1/2) 2025.06.14 @kikuyuta 22 • 世俗的関数型言語 – 使いやすさに巻かれる主義

    • 並行性 – Actor model (メッセージ通信する非同期の計算主体) – Erlang OTP • Process tree, Supervisor, Crash & Restart, Hot Swap – あちこちで状態を持たないとならない IoT/IIoT に向いている
  12. Why Elixir (2/2) • パイプ演算子 – 小さな機能を連結して大きな機能を実現する楽しさ – UNIX 敬老会としては

    UNIX コマンドで慣れてるし • パターンマッチ – 特にビット列に対するパターンマッチ – ネットワークプロトコルや I/O 周りのビットの扱いが大変ラク • 別に BEAM 特有でもないので他の言語でも導入して 2025.06.14 @kikuyuta 23
  13. Elixir にないもの 2025.06.14 @kikuyuta 24 • もっと型に厳しくて良いんじゃないの? – 静的型解析してよ〜 •

    導入しようとしているので待つ – Gleam か? Gleam なのか? • 高階関数・部分評価・遅延評価 – 話だけなら楽しいけど実用的にうまく使える気がしない
  14. To make Elixir machines with Nerves 2025.06.14 @kikuyuta 25 •

    Nerves – Provides Elixir coating for Small Computers • Aware-less of underlying systems (e.g. OS and IO details) – Almost everything on IP • Dramatically reduces the cost of building IIoT environment – Separation of R/O and R/W partitions • If you need a persistent store, throw them away in the cloud – Easy IIoT for even Web engineers • still necessary to aware hardware devices
  15. Basic considerations 2025.06.14 @kikuyuta 27 • Easy to port and

    to use Nerves – A blanch of BeagleBone Green – “MIX_TARGET=bbb” for compilation • Smart Power supply – PoE and Capacitor backup • Attractive package
  16. 3 types of modules 2025.06.14 @kikuyuta 29 Item Functions, Specs

    Combo module DIO module AIO module Digital input Separated circuits 8 channel 16 channel Digital output Separated circuits 4 channel 16 channel Analog input 4-20mA current loop 6 channel 8 channel Analog output 4-20mA with/without power supply 1 channel 8 channel RS422/485 Half duplication 1 port Power and net IEEE802.3af (PoE), IEEE802.3u (100Mbps) ◯ ◯ ◯ Ope. Temp. -20℃〜70℃ ◯ ◯ ◯ Chassis DIN rail mounting ◯ ◯ ◯
  17. Makune, Nozawa-Onsen 2025.06.14 @kikuyuta 34 Water level sensors Auto-screen control

    modbus/tcp http / mqtt Web GCP Plant Control with PLC
  18. 小水力発電で Elixir/Nerves 2025.01.25 @kikuyuta 40 2016 2018 2020 2022 RPi2B

    Python Linux PHP BunkaPLC Python Linux PHP ExiArmadillo (not used for real application) ExiBee Elixir Nerves GCP / Sakura Inet 2024 ExiBee Elixir Nerves Nerves Hub?
  19. ふりかえり 2025.06.14 @kikuyuta 41 • Elixir – 楽しい人生を送れてるので良い狂気だったのではないか • Nerves

    マシン – いまなら不要 • 当時は産業用途の Linux マシンがなかったけど、いまならなんぼでも – ハードウェアに対する良い知見は得られた • アイディア→試作→製品化→量産化 が見える気がする
  20. Special Thanks to • NervesJP: @takasehideki, @pojiro3, @myasu • kochi.ex:

    @nishiuchikazuma, @32hiro, @myasu • and other Elixir/Nerves communities • my family 2025.06.14 @kikuyuta 46
  21. See you next in… • Goatmire Elixir & Nerves Conf

    EU – 10th - 12th Sep 2025 – Varberg, Sweden – https://goatmire.com/ • JANOG56 – 2025年7月30日(水)〜8月1日(金) – 島根県松江市 – https://www.janog.gr.jp/meeting/janog56/ 2025.06.14 @kikuyuta 47