トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

PLC−マイコン間通信による制御技術

PLC−マイコン間通信による制御技術

  1. コース概要及び留意事項
    1. コースの目的
    2. 専門的能力の現状確認
    3. 安全上の留意事項
  2. マイコンの構成
    1. マイコンの構成:Raspberry Pi 3
    2. CPUアーキテクチャ:Cortex-A53 (ARMv8-A)
  3. マイコンとPLC間の通信
    1. 通信の規格とプロトコル
    2. PLC通信設定
    3. PLCとマイコンとの通信実習
  4. プログラム開発手順
  5. プログラミング技法
  6. 機械制御総合実習
  7. まとめ

 関連

PLC

ネットワーク

Pythonプログラミング

Raspberry Pi (Linux OS)

 三菱

ライブラリ(FX5U)

 次のライブラリはFX5UJでも使用できます。

  1. UTAIOT-team/mitsubishi-fx5 at try-oee_with_schedule
  2. GitHub - freedomikeppp/mitsubishi-fx5: 三菱FX5シーケンサを操作するPythonのサンプルです。
  3. mitsuplccom · PyPI - Library to communicate with FX5U PLC using socket communication
  4. GitHub - nexus1203/plc_conn: A python library for controlling the Mitsubhishi and Siemens PLCs.

 1.は2.をフォーク(fork;分岐)したもので、その中のfx5.pyを使います。 これは1.をアップデートしたものです。

 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〜にずれているので機種ごとにレジスタ番号のつけ方が違うのかもしれません。

pymelsec (Python)

pip3 install pymelsec

MC-Protocol(mcp.py)

PySLMPClient

mitsuplc-robinsin

FX3U

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

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)

Omron FINS Driver in Python 3

pip install fins

OmronFinsEthernet

pip install omronfins

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

 キーエンス

内蔵入出力のリレー番号は以下の通りです。
 ・入力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

 

 Modbus

 OPC UA