Goで工場を制御する要であるPLCにアクセスする ~ Goでスマート工場を作りたい~
GoでPLCにアクセスするライブラリを開発しています。 なんのために開発しているのか、どういうところがムズカシイ(楽しい)のかお伝えします。 #umedago
Goで工場を制御する要であるPLCにアクセスする~ Goでスマート工場を作りたい~Umeda.go 2020 Winter ☃フューチャー株式会社 真野隼記
View Slide
真野 隼記@laqiiz* フューチャー / バックエンドエンジニア* Go歴3年くらい* 技術ブログ運営者。3.5年* 業務系IoTおまえだれよ?
イメージは無人化/省人化・ロボット導入・ドローン・センサー、IoT・画像解析https://iot.aperza.com/2019/12/4015/スマート工場を作るために
よくある課題独特なプロトコル縛り ⤵ ⤵ ⤵・データを収集する部分がまず大きな壁言うても、イチからじゃない ⤵ ⤵・既存の設備、ラインを活かす必要ノウハウが公開されていない ⤵・実践的な内容がまだまだ少ない今日はここ
工場のデータを収集しよう話はまずそこから
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が持っていることが多い
PLCへのデータR/WMELSEC Communication ProtocolMCプロトコルと呼ばれる(最近はSLMPとも)MELSECは三菱PLCのブランド名三菱PLCとアクセスするためのプロトコル
MCプロトコルHTTPと同様、TCP上でも動くRequest/Response型16進数のバイナリでやり取り◇【例】要求伝文500000FFFF03000C001000010400002C0100A80300◇ 【例】応答伝文D00000FFFF03000800000001000A006400
こ こ が ツ ラ イ よ 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点)
こ こ が ツ ラ イ よ M C プ ロト コ ル2.独自用語がやっぱり分からないマルチドロップ..?3.ある通信モードだと、一部がリトルエンディアンになる伝聞全体じゃないのがポイント4.積み重ねた歴史通信モード周りだけでも多様・Ethernet以外にもシリアル・マルチドロップ、自局・3Eフレーム、4Eフレーム・バイナリ、アスキー・製品番号でコードが変わる
リ フ ァ レン ス5.リファレンスはFreeで取得可能なお、フォーマット6.実機がないと通信テストが…エミュレータ欲しいPDFオンリーオークション活用?
GoでWrapするライブラリを作ってますhttps://github.com/future-architect/go-mcprotocol実機も購入
色々な厄介事を隠蔽化し て い く 予 定もっとも利用頻度が高いであろうPLCの構成を、最も少ないコードでアクセスPLCの機種やモードは宣言的に行えます
コマンドは順次対応中PLCプロトコルは多くのコマンドがあるが、適時対応している例えば、HealthCheckなど利用可能な操作コマンドは30種類超えなので大変
単 純 に P L C か ら デ ー タ 抽 出 は サ ー ビ ス 済 みPLCのレジスタ内容を定期的にCSVに出力する可能できます案外、安定稼働しています
実 装 に つ い てMCプロトコル自体はEthernet(TCP)かシリアル接続が対応しているとりあえずTCP接続に対応単純に考えるとSocketオープンしてバイナリを書き込むだけ。Socketを開いて、16進数に変換する処理なので、プロトコルを実装している感覚が味わえます→HTTPとかに比べると遥かに仕様が少ないので、オススメ(かも)
G o で 作 っ て 良 か っ た と こ ろ工場側に配備している、低スペックなPC(古いOS)でも安定して動くInstallが簡単(シングルバイナリ)→リモート接続できない環境でもデプロイ簡単は嬉しい安定稼働!!安定稼働!!→稼働後、3ヶ月経過しますがplcmirrorサービスは不具合ゼロ
Happy PLC Hacking.Thank you