NervesJP_8_ALGYAN

51198d0c7643e9c6d8d491533eead6c9?s=47 myasu
July 10, 2020

 NervesJP_8_ALGYAN

51198d0c7643e9c6d8d491533eead6c9?s=128

myasu

July 10, 2020
Tweet

Transcript

  1. Elixirと Raspberry Pi で
 産業機器の制御にチャレンジ
 2020-7-10 NervesJP #8 / ALGYAN

    Webinar 1
  2. 自己紹介
 • 本業:とある製造業の”生産技術” ◦ 自動化設備・生産治具の設計・製作、現場カイゼン          (ラダー、 Python、C++) ◦ 社内向け業務ソフト開発( C#,

    SQL Server) • コミュニティ ◦ IoTALGYAN せとうち連合 岡山支部長 ◦ 瀬戸内ROS勉強会 (設立&岡山主催) ◦ NervesJP (設立メンバ) ◦ kurashiki.ex (立ち上げるかも? myasu
 @etcinitd yasuhiro.miyake.5076 @trihome 2 @myasu
  3. お伝えしたいこと 1. Raspberry Piを、製造現場で活用する工夫 2. Elixirだから、できること(できそうなこと) 3

  4. 軽く紹介 1. Raspberry Pi 4

  5. 小型パソコン Raspberry Pi • イギリス生まれの、教育用コンピュータ • HDMI出力、USBポート、無線LAN、有線LAN • 価格:8£(約1200円)~ “Raspberry Pi

    Zero W” “Raspberry Pi 3 b+” (写真:Switch Science, raspberrypi.org) 65mm Linux等のOSが使える 5
  6. 小型パソコン Raspberry Pi • デジタルの入出力ポートを装備 • 電子工作、組み込み機器などの業界でも普及が進む 6

  7. Raspberry Pi をこんな所に使ってるよ! 2. わたしの活用例 7

  8. 製造現場のカイゼン 勤務先の農機具工場・現場のリーダの相談・・・ • ちょっとしたカイゼン、ポカよけ • 多くの費用は掛けられない • カイゼン失敗→仕様変更→リトライ(の繰り返し) 産業向け(FA)機器は便利だけと、ちょっと試すには高価・・・ 趣味で使い慣れた

    Raspberry Piでやってみよう! 8 (写真:いらすとや)
  9. 製造現場のカイゼン 9 ランプ付き
 ボタン
 様々な部品の
 入った箱
 作例1:部品の取り間違いを防止する「ポカよけ」装置

  10. 製造現場のカイゼン 作例2:現場設備の稼働監視  作例3:生産中の作業時間を計測 10 (写真:日経 BP 紹介ページ) 機械加工 設備 https://project.nikkeibp.co.jp/pc/atcl/column/17/062900102/070500004/

  11. Raspberry Piと産業機器 3. 製造現場で 活用する工夫 11

  12. 産業用途で使われる機器 • FA機器 (Factory Automation) • スイッチ、ランプ、センサーなど ◦ 誘導電動機、空圧・油圧機器、ガス、液体・・・ • 頑丈!

    ◦ 少々荒い使い方をしても、壊れない • 電源、基本はDC24V ◦ あるいはAC100V, 200V, 三相・・・ ◦ マイコンなど電子機器と繋げるには、一工夫必要 12 (写真:Panasonic, IDEC, PATLITE)
  13. 産業用途で使われる制御機器 • PLC (プログラマブル ロジック コントローラ) ◦ 安いものだと1万円程度から ◦ 入出力10点くらいから ◦

    20年くらいは販売が継続 ◦ ネットワーク無し。オプションで+ 2万円くらい ◦ オプション付けると色々出来る。けどあっという間にン十万円(!) • タッチパネル ◦ モノクロ3インチで2万円弱から ◦ カラー15インチで30万円以上(!) (耐障害性、安定性、長期供給は保証) 13 (写真:Siemens, DIGITAL)
  14. 工場現場からの要望 必ず言われること → ”モニター”が欲しい • 作業の状態を見える化 • 図面やチェックシートなどの検索・閲覧 • 離れていても見やすいこと! となると、大型のモニターがどうしても欲しい・・・(タッチパネル高価 Raspberry

    Pi + 安価な液晶モニターの組み合わせで解決しよう! 14 (写真:いらすとや)
  15. RaspberryPi を PLCっぽく使う PLCの考え方を取り込んでみよう!     モジュールを追加して機能拡張する概念→ • RaspberryPiにFA用機器を直接接続する ◦ 電圧の違い(3.3V ~

    24V)を相互変換する機能 • 機能拡張しやすい仕組み ◦ Seeed社のGROVE System 15 CPU IO AD Ether ・・・
 (写真:Siemens, Seeed Studio)
  16. センサの信号
 FA機器とRaspberryPiの接続 16 (写真:Siemens, DIGITAL) 用センサなど
 用表示灯など
 で動作する機器
 
 Vで動作する部品


    フォトカプラで
 電気的に絶縁
 フォトカプラで
 電気的に絶縁
 トランジスタ
 アレイで
 電流増幅
 表示灯の信号
 表示灯を点灯
 センサの信号

  17. FA機器とRaspberryPiの接続 17 (写真:Siemens, DIGITAL) 用センサなど
 用表示灯など
 で動作する機器
 
 Vで動作する部品
 GPIO24V~3.3V


    レベル変換 &RTCユニット
 (ユニバーサル基板 泣)

  18. FA機器とRaspberryPiの接続 18 (写真:Siemens, DIGITAL) 用センサなど
 用表示灯など
 で動作する機器
 
 Vで動作する部品
 GPIO24V~3.3V


    レベル変換 &RTCユニット
 (基板を作った)

  19. FA機器とRaspberryPiの接続 GitHubで回路図・ガーバーデータを公開してます https://github.com/trihome/RasPi_PiFA 19 GPIO24V~3.3V
 レベル変換 &RTCユニット


  20. GROVE Systemの活用 豊富なデバイスとアクセサリの恩恵 • 4線式でシンプルな規格 • 主要マイコン(Arduinoなど)向けIFも豊富 オープンな規格、”無ければ作る!” • Seeedの基板製造サービスも活用

    20 (写真:Seeed Studio) 自作のGrove互換モジュール→

  21. GROVE Systemの活用 こちらも、GitHubで回路図・ガーバーデータを公開・・・します(まだ https://github.com/trihome/ • 絶縁IOエキスパンダー • CTセンサアンプ • シグナルタワー点灯検知

    • 簡易UPS            21 自作のGrove互換モジュール→

  22. RaspberryPi を PLCっぽく使う 22 Grove Base 
 Hat for Raspberry

    Pi 
 UPS&
 電源監視
 ユニット
 Raspberry Pi
 GPIO24V~3.3Vレベル変換 &RTCユニット
 アナログ
 GPIO24V
 赤:通信異常など
 青:正常運転
 様々な
 既製品のセンサー
 (無ければ自作)
 様々なFA機器

  23. 再利用しやすく・頑丈に FA部品を活用、汎用的な制御盤に仕上げ 23 •サーキットプロテクタ
  (IDEC、富士電機)
 •端子台
  (東洋技研、WAGO)
 RaspberryPi
 GROVE Hat


    •プラボックス
  (日東工業、タカチ)
 •アルミフレーム
  (NICオートテック)
 •ゴム足
  (タキゲン)
 •コンセント
  (パナソニック)
 •ランプ、スイッチ
  (IDEC、オムロン)
 •タワー表示灯
 (日恵製作所、パトライト)
 •DINレール、配線ダクト
 (篠原電気)
 300mm
 500mm

  24. どんなプログラム言語を使おう? • C#  (作例3) ◦ 個人的に一番好きな言語  ( .NET 1.0から使ってる)      ◦ Windows 10

    IoT Core!VisualStudio使える!!画面も作れる!!!最強!!!! ▪ でも、最近アップデートがなくてツラい ◦ .NET Core → LinuxのGUIが・・・ • Python(作例1、2) ◦ 一昨年から勉強はじめた。 ◦ とにかくサンプルが多くて助かる。( ”えいやぁ”で、すぐ作れちゃう) ◦ GUIもOK(Kivy) 24
  25. PLCの言語 • ラダー言語 ◦ 最初は苦労・・・慣れてきたら、並列処理が書きやす いので便利 • 実行を止めずにプログラム書き換え • 変数のリアルタイムモニタ

    • ソースコードは丸ごとPLCのメモリに保存 • シリアル通信、Ethernetとか扱うと、ちょっと大 変 25
  26. プログラム言語を選ぶ課題 • C#やPythonのような記述ができて • ラダーのように並列処理が書きやすい こんなプログラム言語が、あればいいなぁ~ 26

  27. ROSの活用 • ノード単位で機能を構成 ◦ ノード間はPUB・SUB通信 • 異種言語の混在OK • パッケージで機能の再利用 •

    roslaunchでプロセス管理 • ソースはRaspberryPiの中に保存 • 概ね、やりたいことが出来たが・・・ ◦ RaspberryPiだと動作が重い ◦ 機能が高度・豊富すぎて勿体ない・・・( Gazebo, MoveIt とか) 27 作例2:設備の稼働集計装置は 
 ROS Melodic (Python)で 
 動いてます
 (Robot Operating System)
 (写真:ROS.org)
  28. ここで、Elixirとの出会い 28 (写真:elixir-lang.jp)

  29. ここで、Elixirとの出会い takase先生 (←当時はROSのコミュニティ) 「福岡でNervesやるよ!」 29 (写真:twitter)

  30. ここで、Elixirとの出会い takase先生 (←当時はROSのコミュニティ) 「福岡でNervesやるよ!」 私 「???」(Nervesなにそれ?) その真相を探りに福岡へ(19年7月) 30 (写真:CONNPASS, fukuoka/kokura.ex)

  31. ここで、Elixirとの出会い 「Nerves Training」ハンズオン 31

  32. 試しに作ってみた デモその1 手動でLチカ! (L=LED回転灯) ボタンを押したら光る 32

  33. 構成 33 Raspberry Pi
 GPIO I2C 自動運転コード Auto.ex 個別動作の 定義コード

    Worker.ex Elixir Circuit モジュール ドライバ Mcp23017.ex Elixirコード プロセス管理(スーパーバイザ) Application.ex :GenServer
 電気的 絶縁 & 電圧 レベル 変換 (写真:IDEC, 日惠製作所 , elixir-circuits.github.io) FA機器

  34. 構成 34 Raspberry Pi
 GPIO I2C 自動運転コード Auto.ex 個別動作の 定義コード

    Worker.ex Elixir Circuit モジュール ドライバ Mcp23017.ex Elixirコード プロセス管理(スーパーバイザ) Application.ex :GenServer
 電気的 絶縁 & 電圧 レベル 変換 FA機器
 ここの書き方は
 こちらの書籍を参考
 インプレスR&D
 「Elixirへのいざない」 
 著者:川邑 リュウさん 
 
 (写真:IDEC, 日惠製作所 , elixir-circuits.github.io)
  35. Elixir だから、できそうなこと 興味深いキーワード • ホットコードデプロイ ◦ 稼働中のシステムを停止させずにプログラム変更 • 並行性・メンテナンス性・耐障害性 ひょっとして、PLCのラダー言語のような使い方ができるのでは?

    • 実行を止めずにプログラム書き換え ”RUN中書き込み” • 変数のリアルタイムモニタ 35
  36. らんちゅうかきこみ? RUN中書き込み ? 36

  37. RUN中書き込み • PLC特有(?)の機能 • プログラムの実行を一切止めることなく、ソースを書き換え • 書き換え直後から、そのまま新しいロジックで動き続ける ◦ 設備を作っているとき、試運転中のデバッグ ◦

    現場で稼働しながら、制御の小改造をするとき などの場面でよく使う機能 • VisualStudioの「Edit and Continue」みたいな機能? ◦ ブレークしなくても書き換えできるのが ”RUN中” 37
  38. Elixirで”RUN中書き込み” それっぽいことが出来そうなので、試してみました 1. 赤と緑のランプが、1秒間隔で同時に点滅 2. 緑のランプは点滅を続けたまま 赤のランプの間隔を100ms間隔に書き換え これを、プログラムの実行を止めずにできるか? 38 積層表示灯


    (写真:PATLITE)
  39. 実験:Elixirで”RUN中書き込み” 1. まず、ソース“Auto1.ex”の時間間隔の値を書き換え 2. 次に、実行中の iex のプロンプトから (ここでソースをコンパイル) (コンパイルしたモジュールを再読込み) これだけ。

    39 iex > recompile iex > r “Auto1.ex” ※iex
  Elixirの対話型シェル (Pythonみたいな感じ)

  40. 実験:Elixirで”RUN中書き込み” デモその2 1. 赤と緑のランプが 1秒間隔で同時に点滅     ↓(ソース書き換え) 2. 赤のランプだけが 100ms間隔で点滅 (緑はそのまま点滅!)

    40
  41. Elixirで”RUN中書き込み” できた!これはすごい!! (ネタ的に地味・・・”刺さる人に刺されば”幸いです) その他・・・ • 変数のリアルタイムモニタ ◦ 出来た ◦ 作例 https://github.com/trihome/UecsListner

    • ”ホットスワップ” ◦ まだ試せてない 41
  42. 作例・Elixirで動かそう!産業機器 デモその3 • 最近 流行り(?)の「遠隔ハンコ押し機」 ◦ ・・・の、ハンコを押すアクチュエータを製作 ◦ クラウド側は、先の方の発表内容でつくれそう! •

    逸般の誤家庭にある「電動サーボシリンダ」 Elixir&Raspberry Piで制御にチャレンジ ◦ 3.3V→24Vレベル変換は、自作回路で。 42 (写真:いらすとや)
  43. 作例・Elixirで動かそう!産業機器 電動サーボシリンダ • 位置制御 ◦ 精度 ±0.02mm以下 ◦ 速度 1000mm/sec以上 • トルク制御

    ◦ 指定の押し圧に達したら停止 ◦ 今回はこの機能を使って、 ”いい感じ”に押印 43 (写真:IAI) スライダが 前後に移動 ロッドが 伸縮 大きさ
 200~2000mm

  44. 作ったモノ → 44 ここにハンコ 高さ600mm

  45. 4. まとめ 45

  46. まとめ 1. Raspberry Piを、製造現場で活用する工夫について 2. Elixirだから、できそうなこと • 組込み向けの情報が少ないので、色々試行錯誤中・・・ ◦ (ハマったら、使い慣れた

    Python |> ROS2(rclex) |> Elixir で解決!) • ナウでヤング(まだ作例が少ない)→ 試した分だけ新たな知見! • 少しでも興味を持って頂ければ、”NervesJP”にも JOIN! 46
  47. 参考情報 1. Elixir概要 a. https://speakerdeck.com/cooldaemon/erlang-falsele-sisatoxin-sa 2. 言語の習得 a. ”完全に理解した!” i.

    https://agency-star.co.jp/column/elixir-language ii. https://employment.en-japan.com/engineerhub/entry/2017/06/12/110000 b. 教科書 i. https://elixirschool.com/ja/ c. Tips i. https://qiita.com/tags/elixir d. Nerves i. https://www.slideshare.net/takasehideki/nerveselixiriot ii. https://qiita.com/takasehideki/items/94820516ec95b85bae32 e. GUI i. https://qiita.com/piacerex/items/3f8ee18c9443d63955bf ii. https://hotch-potch.hatenadiary.jp/entry/2020/06/20/214043 47
  48. 参考情報 myasu • https://qiita.com/myasu/ ◦ 本日の詳細は追ってこちらにまとめます。 • https://github.com/trihome/ • https://speakerdeck.com/myasu/

    • https://hotch-potch.hatenadiary.jp/ 48