Save 37% off PRO during our Black Friday Sale! »

Goで工場を制御する要であるPLCにアクセスする / go-plc

0e6d6c941ee392a1670b8b10308d17e4?s=47 Junki Mano
January 25, 2020

Goで工場を制御する要であるPLCにアクセスする / go-plc

Goで工場を制御する要であるPLCにアクセスする
~ Goでスマート工場を作りたい~

GoでPLCにアクセスするライブラリを開発しています。
なんのために開発しているのか、どういうところがムズカシイ(楽しい)のかお伝えします。 #umedago

0e6d6c941ee392a1670b8b10308d17e4?s=128

Junki Mano

January 25, 2020
Tweet

Transcript

  1. Goで工場を制御する要であるPLC にアクセスする ~ Goでスマート工場を作りたい~ Umeda.go 2020 Winter ☃ フューチャー株式会社 真野隼記

  2. 真野 隼記@laqiiz * フューチャー / バックエンドエンジニア * Go歴3年くらい * 技術ブログ運営者。3.5年

    * 業務系IoT おまえだれよ?
  3. イメージは無人化/省人化 ・ロボット導入 ・ドローン ・センサー、IoT ・画像解析 https://iot.aperza.com/2019/12/4015/ スマート工場を作るために

  4. よくある課題 独特なプロトコル縛り ⤵ ⤵ ⤵ ・データを収集する部分がまず大きな壁 言うても、イチからじゃない ⤵ ⤵ ・既存の設備、ラインを活かす必要

    ノウハウが公開されていない ⤵ ・実践的な内容がまだまだ少ない 今日はここ
  5. 工場のデータを収集しよう 話はまずそこから

  6. PLC ( p r o g r a m m

    a b l e l o g i c c o n t r o l l e r ) 工場の制御に用いられるコンピュータ 内部的にはリレーやタイマーの集合処理 工程の処理時間などはPLCが 持っていることが多い
  7. PLCへのデータR/W MELSEC Communication Protocol MCプロトコルと呼ばれる(最近はSLMPとも) MELSECは三菱PLCのブランド名 三菱PLCとアクセスするためのプロトコル

  8. MCプロトコル HTTPと同様、TCP上でも動くRequest/Response型 16進数のバイナリでやり取り ◇【例】要求伝文 500000FFFF03000C001000010400002C0100A80300 ◇ 【例】応答伝文 D00000FFFF03000800000001000A006400

  9. こ こ が ツ ラ イ よ M C プ

    ロト コ ル 1.さきほどの伝聞って暗号化されている? →いいえ、平文です 500000FFFF03000C001000010400002C0100A80300 ↓ 5000 サブヘッダ(Ethernet接続、3Eフレームの場合は固定) ) ←わからない 00 ネットワーク番号(ローカルPC(自局)の場合は固定) ) ←わからない FF PC番号(アクセス先のネットワークユニットNo。自局の場合は固定) ) ←わからない FF03 要求先ユニットI/O番号。(自局の場合は固定)) ←わからない 00 要求先ユニット局番号(自局の場合は固定) ) ←わからない 0C00 要求データ長(ここから先のデータ長)←ヤバい 1000 CPU監視タイマ(250msが単位) ←わからない 0104 読み取りコマンドは0104を指定 0000 サブコマンド(固定) 2C0100 先頭ブロック A8 レジスタ名 0300 読み取り点数(300ではなく、3点)
  10. こ こ が ツ ラ イ よ M C プ

    ロト コ ル 2.独自用語がやっぱり分からない マルチドロップ..? 3.ある通信モードだと、一部がリトルエンディアンになる 伝聞全体じゃないのがポイント 4.積み重ねた歴史 通信モード周りだけでも多様 ・Ethernet以外にもシリアル ・マルチドロップ、自局 ・3Eフレーム、4Eフレーム ・バイナリ、アスキー ・製品番号でコードが変わる
  11. リ フ ァ レン ス 5.リファレンスはFreeで取得可能 なお、フォーマット 6.実機がないと通信テストが… エミュレータ欲しい PDFオンリー

    オークション活用?
  12. GoでWrapするライブラリを 作ってます https://github.com/future-architect/go-mcprotocol 実機も購入

  13. 色々な厄介事を隠蔽化し て い く 予 定 もっとも利用頻度が高いであろうPLCの構成を、最も少ないコードでアクセス PLCの機種やモードは宣言的に行えます

  14. コマンドは順次対応中 PLCプロトコルは多くのコマンドがあるが、適時対応している 例えば、HealthCheckなど 利用可能な操作コマンドは30種類超えなので大変

  15. 単 純 に P L C か ら デ ー

    タ 抽 出 は サ ー ビ ス 済 み PLCのレジスタ内容を定期的にCSVに出力する可能できます 案外、安定稼働しています
  16. 実 装 に つ い て MCプロトコル自体はEthernet(TCP)かシリアル接続が対応している とりあえずTCP接続に対応 単純に考えるとSocketオープンして バイナリを書き込むだけ。

    Socketを開いて、16進数に変換する処理なので、プロトコルを実装している感覚が味わえます →HTTPとかに比べると遥かに仕様が少ないので、オススメ(かも)
  17. G o で 作 っ て 良 か っ た

    と こ ろ 工場側に配備している、低スペックなPC(古いOS)でも安定して動く Installが簡単(シングルバイナリ) →リモート接続できない環境でもデプロイ簡単は嬉しい 安定稼働!!安定稼働!! →稼働後、3ヶ月経過しますがplcmirrorサービスは不具合ゼロ
  18. Happy PLC Hacking. Thank you