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

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

Junki Mano
January 25, 2020

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

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

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

Junki Mano

January 25, 2020
Tweet

More Decks by Junki Mano

Other Decks in Technology

Transcript

  1. 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が 持っていることが多い
  2. こ こ が ツ ラ イ よ 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点)
  3. こ こ が ツ ラ イ よ M C プ

    ロト コ ル 2.独自用語がやっぱり分からない マルチドロップ..? 3.ある通信モードだと、一部がリトルエンディアンになる 伝聞全体じゃないのがポイント 4.積み重ねた歴史 通信モード周りだけでも多様 ・Ethernet以外にもシリアル ・マルチドロップ、自局 ・3Eフレーム、4Eフレーム ・バイナリ、アスキー ・製品番号でコードが変わる
  4. 単 純 に P L C か ら デ ー

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

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

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