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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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点)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  18. Happy PLC Hacking.
    Thank you

    View full-size slide