Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

真野 隼記@laqiiz * フューチャー / バックエンドエンジニア * Go歴3年くらい * 技術ブログ運営者。3.5年 * 業務系IoT おまえだれよ?

Slide 3

Slide 3 text

イメージは無人化/省人化 ・ロボット導入 ・ドローン ・センサー、IoT ・画像解析 https://iot.aperza.com/2019/12/4015/ スマート工場を作るために

Slide 4

Slide 4 text

よくある課題 独特なプロトコル縛り ⤵ ⤵ ⤵ ・データを収集する部分がまず大きな壁 言うても、イチからじゃない ⤵ ⤵ ・既存の設備、ラインを活かす必要 ノウハウが公開されていない ⤵ ・実践的な内容がまだまだ少ない 今日はここ

Slide 5

Slide 5 text

工場のデータを収集しよう 話はまずそこから

Slide 6

Slide 6 text

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が 持っていることが多い

Slide 7

Slide 7 text

PLCへのデータR/W MELSEC Communication Protocol MCプロトコルと呼ばれる(最近はSLMPとも) MELSECは三菱PLCのブランド名 三菱PLCとアクセスするためのプロトコル

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

こ こ が ツ ラ イ よ 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点)

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

リ フ ァ レン ス 5.リファレンスはFreeで取得可能 なお、フォーマット 6.実機がないと通信テストが… エミュレータ欲しい PDFオンリー オークション活用?

Slide 12

Slide 12 text

GoでWrapするライブラリを 作ってます https://github.com/future-architect/go-mcprotocol 実機も購入

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

単 純 に P L C か ら デ ー タ 抽 出 は サ ー ビ ス 済 み PLCのレジスタ内容を定期的にCSVに出力する可能できます 案外、安定稼働しています

Slide 16

Slide 16 text

実 装 に つ い て MCプロトコル自体はEthernet(TCP)かシリアル接続が対応している とりあえずTCP接続に対応 単純に考えるとSocketオープンして バイナリを書き込むだけ。 Socketを開いて、16進数に変換する処理なので、プロトコルを実装している感覚が味わえます →HTTPとかに比べると遥かに仕様が少ないので、オススメ(かも)

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Happy PLC Hacking. Thank you