PLC−マイコン間通信による制御技術
- コース概要及び留意事項
- コースの目的
- 専門的能力の現状確認
- 安全上の留意事項
- マイコンの構成
- マイコンの構成:Raspberry Pi 3
- CPUアーキテクチャ:Cortex-A53 (ARMv8-A)
- マイコンとPLC間の通信
- 通信の規格とプロトコル
- PLC通信設定
- PLCとマイコンとの通信実習
- プログラム開発手順
- プログラミング技法
- 機械制御総合実習
- まとめ
関連
PLC
ネットワーク
Pythonプログラミング
Raspberry Pi (Linux OS)
三菱
- PLCとRaspberry Piはとっても相性がいい。(通信の行い方) #Python - Qiita
- PythonでPLCのレジスタアクセスを試す - Qiita
- [続] PythonでPLCのレジスタアクセスを試す #numpy - Qiita
- MCプロトコルのチートシート - Qiita
- 三菱のシーケンサ FX5UJ を Python で叩いてみた - 鱧技術
- マニュアル > 機器接続ガイド > 三菱電機 > 公開プロトコル(Ethernet) > iQ-Fシリーズ FX5 > 接続例【iQ-Fシリーズ】
- Hacking Mitsubishi PLC Without Access To Firmware
- ПЛК Mitsubishi: как разобрать сетевой протокол и найти уязвимости в устройстве без использования прошивки / Хабр
ライブラリ(FX5U)
次のライブラリはFX5UJでも使用できます。
- UTAIOT-team/mitsubishi-fx5 at try-oee_with_schedule
- GitHub - freedomikeppp/mitsubishi-fx5: 三菱FX5シーケンサを操作するPythonのサンプルです。
- mitsuplccom · PyPI - Library to communicate with FX5U PLC using socket communication
- GitHub - nexus1203/plc_conn: A python library for controlling the Mitsubhishi and Siemens PLCs.
1.は2.をフォーク(fork;分岐)したもので、その中のfx5.pyを使います。 これは2.をアップデートしたものです。
4.はFX5Uにも対応しています。 3.と4.は試してみましたが、使い方がよくわからず動作確認ができていません。
3.の使い方(Windows)
pip install mitsuplccom
Collecting mitsuplccom
Using cached mitsuplccom-0.0.1.tar.gz (2.6 kB)
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [6 lines of output]
Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<pip-setuptools-caller>", line 34, in <module>
File "C:\Users\tanioka\AppData\Local\Temp\pip-install-2_fz2ecg\mitsuplccom_6d9a42add639405f99ca9f864c98c8e3\setup.py", line 15, in <module>
long_description=open('README.txt').read() + '\n\n' + open('CHANGELOG.txt').read(),
FileNotFoundError: [Errno 2] No such file or directory: 'CHANGELOG.txt'
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
ファイル'CHANGELOG.txt'が足りないためエラーが出てインストールできません。'CHANGELOG.txt'を足してインストールしましたがplc.pyが不完全で実行できませんでした。
代わりに、次のmitsuplc-robinsinをインストールしましたが、これもplc.pyが3.と同じものでした。
pip install mitsuplc-robinsin
そこで、次のファイルをダウンロードして展開します。
wget https://files.pythonhosted.org/packages/a5/14/ba6349d4002541e68854728f6f02a7e46f0f2e54b3ca39250b326bfd8332/mitsuplc-robinsin-0.0.1.tar.gz
その中にあるplc.pyで上書きします。
サンプルプログラムmain.pyが添付されているので参考にしました。
from mitsuplc import plc host = '192.168.52.250' port = 250 conn = plc.Conn(host, port) data = [True] w_data_obj = plc.WDataObj(1, 1, data) print(plc.write_data(conn, w_data_obj, plc.MBIT))
このライブラリを使うときは交信データコードをASCII(XY 16進)にしてください。
4.の使い方(Windows)
wget https://github.com/nexus1203/plc_conn/archive/refs/heads/main.zip tar xf plc_conn-main.zip cd plc_conn-main dir 2023/10/31 18:51 <DIR> . 2023/10/31 18:51 <DIR> .. 2023/10/31 18:51 1,068 LICENSE 2023/10/31 18:51 <DIR> plc_conn 2023/10/31 18:51 1,434 README.md 2023/10/31 18:51 900 test.py
plc_connディレクトリの中にあるplc_utils.pyがライブラリ本体ですが、一か所訂正するところがあります。8行目を次のように変えます。
現在は直っています。
変更前 module_name = f"plc_worker.__versions.{python_version}.plc_com"変更後 module_name = f"plc_conn.__versions.{python_version}.plc_com"
pymcprotocol (Python)
pip install pymcprotocol
FX5Uでも使えましたが、Y10〜がY20〜に、Y20〜がY40〜にずれているので機種ごとにレジスタ番号のつけ方が違うのかもしれません。
- PythonでMCプロトコルを使用してPLCのデータを取り出す - Qiita
- ラズパイPythonと三菱PLCをネットワーク経由で連携させる方法-ICHIKEN@エンジニアキャンパーのバエないアメリカ生活
- ラズパイPythonと三菱PLCのネットワーク連携【イーサネットユニット編】-ICHIKEN@エンジニアキャンパーのバエないアメリカ生活
- 雅(みやび)さんはTwitterを使っています: 「ラズパイPythonと三菱PLCをネットワーク経由で連携させる方法 | ICHIKEN@エンジニアキャンパーのバエないアメリカ生活 https://t.co/rES13so208」 / Twitter
- pymcprotocol · PyPI
- pymcprotocol API referencess — pymcprotocol '0.3.0' documentation
- GitHub - senrust/pymcprotocol: MC Protocol(MELSEC Communication Protocol) implementation by Python
pymelsec (Python)
pip3 install pymelsec
- NothinRandom/pymelsec: Python3 Implementation of MELSEC Communication
- zcattacz/upymcprotocol: MC Protocol(MELSEC Communication Protocol) for Mistubishi PLC implementation in Python
MC-Protocol(mcp.py)
- OkitaSystemDesign/MC-Protocol: Mitsubishi MELSEC MC Protocol
- 三菱MELSEC MCプロトコルをpythonで送信 - Qiita
- 三菱MELSEC MCプロトコルをpythonで送信 | ニッポンふるさとプレス
PySLMPClient
mitsuplc-robinsin
- mitsuplc-robinsin · PyPI - Package to communicate with Mitsubishi PLC
- GitHub - foxandroid/pythonProject
FX3U
- GitHub - KrystianD/fxplc: Python connector for low-level Mitsubishi PLC MELSEC FX series (FX-232AW) serial protocol.
- FX3U clones - OpenPLC Forum
mcprotocol (JavaScript)
Node-RED
Java FX5U
オムロン
形式構成
| 記号 | |
|---|---|
| N | ネットワークモデル |
| 20 | 20点(入力12点、出力8点) |
| D | DC入力 |
| R | リレー出力 |
| A | AC電源 |
| アドレス | 三菱 | キーエンス | |
|---|---|---|---|
| 入力 | 0.00から0.11(CPUユニット) | X | R000〜R015(X000〜X00F) |
| 出力 | 100.00から100.07(CPUユニット) | Y | R500〜R507(Y050〜Y057) |
| 内部補助リレー | W0.00からW511.15 | M | MR |
- XユーザーのQiitaマイルストーンさん: 「10いいね! | OMRON FINSコマンドをPythonで送信する https://t.co/jVUIVDtJoW https://t.co/WITfou6cPV」 / X
- OMRON FINSコマンドをPythonで送信する #PLC - Qiita
- OkitaSystemDesign/FinsCommand: OMRON Fins Command Communication
LECPython
pip install LECPython
from LECPython import LECPython
if __name__ == "__main__":
lecp = LECPython()
try:
# Establish a connection with the Omron FINS PLC
result = lecp.OmronFinsNetConnection("192.168.52.252", 9600, 13, 0, "CDAB", True, 2000)
print("Omron FINS PLC connection call successful:", result["ErrorCode"])
# Write boolean values to address W0.00
rtval = lecp.WriteNodeValues(result["Content"], "W0.00", "bool", [True])
print(f"The written values are: {rtval}")
rtval = lecp.ReadNodeValues(result["Content"], "W0.00", "bool", 10)
print(f"The PLC read rtval is: {rtval}")
# Close the connection
lecp.ConnectClose(result["Content"])
except AttributeError as e:
print(e)
- Raspberry Pi Open Source PLC Communication Wonder LECPython, and Example of Communication with Omron PLC | Python | Coding Forums
- Open Source LECPython: Raspberry Pi PLC Communication | Python 技术论坛
- xeden3/LECPython: LECPython is a Python component developed in C# that enables seamless communication between Python and PLCs.
- LECPython http://www.lecpserver.com:3003/
Omron FINS Driver in Python 3
pip install fins
OmronFinsEthernet
pip install omronfins
- TaishiUeda/OmronFinsEthernet: Utility functions for FINS protocol used by omron's PLCs
- omronfins · PyPI
aphytcomm - This is a library for communicating with Omron NX and NJ industrial PLC and motion controllers using Ethernet/IP.
pip install aphyt
ロギング
C言語ライブラリ
FINS
- pythonでPLCのデータを取得するbyFINS通信 - chao_demiglaceのブログ
- PLC-Python TCP/UDP 通信コマンドまとめ2 【オムロン、キーエンス】 - フードテックブログ
- Omron PLC cs / cj2 read / write data over Python - Other Omron Software - Forums.MrPLC.com
- ころっけ(@korokke_fa)さん / X
- OSSはどこまで産業用機器に使えるか_20230520.pdf
- PythonでIoT!Raspberry Piで産業用のデータ収集してみた
- 産業用PCとPLCの通信について - ・オムロンCP2(ネットワ... - Yahoo!知恵袋
キーエンス
内蔵入出力のリレー番号は以下の通りです。 ・入力16点:R000〜R015(X000〜X00F) ・出力8点:R500〜R507(Y050〜Y057)
from kvhostlink import kvHostLink
kv = kvHostLink('192.168.52.210')
data = kv.mode('1') # RUNモードにする
print(data)
data = kv.unittype() # 機種の問い合わせ
print(data) # 52はKV-5000
data = kv.set('MR0') # MR0をonにする
print(data)
data = kv.reset('MR0') # MR0をoffにする
print(data)
# data = kv.settime() # PLCの日付時刻をパソコンの時計に合わせる
# print(data)
- pythonでPLCのデータを取得するbyMCプロトコル通信 - chao_demiglaceのブログ
- KEYENCE 上位通信
- 【PLC】PCとリンクしてリアルタイムデータを読み書きして連携する | Extra-Lab
- ツールの作り方 – 通信編/上位リンク(KEYENCE) | PLCのメモ書き
- VB.NET KEYENCE上位リンク通信 読書きコマンド | もももFAブログ
Python
- Pythonで文字列を抽出(位置・文字数、正規表現) | note.nkmk.me
- Pythonでキー入力を用いてLoopを抜けるには? - Qiita
- Python で KeyboardInterrupt エラーをキャッチする | Delft スタック
- ノンプログラム!?意外と簡単にできる産業用PLCからのデータ取得 | IIJ Engineers Blog
- 【SiOt/python】SiOt(簡易PLC)をPCとpythonのソケット通信を使って制御する方法【モジュール化編】 - 非プログラマ技術者のためのAI・プログラミング技術ブログ
- PxCJ_WP_産業用アプリケーションにおけるPython.pdf
- 製造現場におけるIoT活用〜PLCデータ収集〜
- ソフトピアジャパン DX・IT研修 » 製造現場におけるIoT活用〜PLCデータ収集〜
- ソフトピアジャパン DX・IT研修 » 製造現場におけるIoT活用〜PLCデータ収集〜
- ソフトピアジャパン DX・IT研修 » 製造現場におけるIoT活用〜PLCデータ収集〜
- ソフトピアジャパン DX・IT研修 » 製造現場におけるIoT活用〜PLCデータ収集〜
- ソフトピアジャパン DX・IT研修 » 製造現場におけるIoT活用〜PLCデータ収集〜
Modbus
- 技術レポート「Modbus/TCP通信 〜「通信プロトコル支援機能」の使用〜」|ソフテックだより|株式会社ソフテック
- 産業用機器向けフィールドネットワークModbusで温湿度センシング | フューチャー技術ブログ
- Modbus/TCPでFactory IOとMELSECを接続しよう(自動応答機能) - Qiita
OPC UA
- ホーム·ページ - OPC Foundation Japan (日本OPC協議会)
- GitHub - FreeOpcUa/python-opcua: LGPL Pure Python OPC-UA Client and Server
- GitHub - FreeOpcUa/opcua-asyncio: OPC UA library for python >= 3.7
- OPC UA サーバー Variable ノードのデータ変更をサブスクライブする方法 | devnote
- Connecting OPC UA with Python. How to connect OPC UA with Python | by Chanon Krittapholchai | FAUN — Developer Community 🐾