Simulink Support Package for Raspberry Pi ⑦ Modbus/TCP 熱電対

 Simulink Support Package for Raspberry PiのブロックNetworkにあるModbusを動かします。Modbusは工業用で使われるフィールド・バス規格の一つです。RS485を使うModbus/RTUとイーサネットを媒体に使うModbus/TCPがあります。ここではModbus/TCPを使います。

Modbus/TCPサーバを用意

 PLCのWAGO 750-842はETHERNETバス・コントローラで、アナログ入出力やディジタルI/Oを追加して利用できます。通信は、Modbus(TCP, UDP)プロトコルをサポートしています。

 こちらの記事で利用しています。

  Modbusの利用 (15) WAGO 750-842①熱電対

 接続は次のようにしました。

  • 750-842 TCPインターフェース
  • 750-469 2AI 熱電対
  • 750-512 ディジタル出力(2チャネル、リレー出力)
  • 750-479 アナログ入力(2チャネル差動)
  • 750-600 終端

 電源は、DINレールに取り付けられるアマゾンで入手した24V電源を2系統用意しました。PLCは、本体動作用とI/O用は別々の電源を用います。

 750-469には、Kタイプの熱電対を+TC1(1)/-TC1(2)につなぎ、TC2には何もつないでいません。モジュールのLED-Dは断線を示す赤色のLEDが点灯しています。

Pythonで動作確認

 IPアドレスの振り方は、次の記事を参照してください。192.168.111.25を振りました。

  Modbusの利用 (13) WAGO 750-342①IPアドレスを振る

 最初に、ライブラリをインストールします。利用環境はWindows10のコマンドプロンプトです。

pip install pymodbustcp

 TCP/IPで接続した後、熱電対の温度を読み込み、ディジタル出力のリレーを動かします。リレーはメカニカルなので、動作音がします。


from pyModbusTCP.client import ModbusClient
import time

SERVER_HOST="192.168.111.25"
SERVER_PORT=502

c = ModbusClient(SERVER_HOST, port=SERVER_PORT)
c.open()

WAGO750_469InputAddr = 0x0000
WAGO750_512OutputAddr = 0x0000 # read back 0x0200

while 1:
    regs = c.read_holding_registers(WAGO750_469InputAddr, 1)  #reg_addr,number of registers to read 
    print(float(regs[0])/10.0, '`C')
    c.write_single_register(WAGO750_512OutputAddr, 0)
    print('----')
    time.sleep(3.14)
    c.write_single_register(WAGO750_512OutputAddr, 2)
    time.sleep(3.14)
    print('====')
    c.write_single_register(WAGO750_512OutputAddr, 1)
    time.sleep(3.14)
    c.write_single_register(WAGO750_512OutputAddr, 3)
    print('+++++')
    time.sleep(3.14)

 プログラムをwago01.pyで保存します。実行例です。

Simulink その1

 TCP/IP、port502で接続をします。
 そのあとModbusブロックで読み出します。

  TCP/IP Serverブロックです。接続だけを行います。

 Modbus TCP/IP Master Readブロックの内容です。
 IPアドレス、Function、レジスタのアドレスを指定します。Modbusの規約では、Holding Registerにデータが入っていることが多いです。

 読み出した値は1nt16なので、Data Type Coversionブロックでfloat(double)に変換します。

 読み出した値は温度を10倍した整数値なので、Gainブロックで1/10します。

●Simulink その2

 温度が一定以上になったら、Modbus/TCPで送信してディジタル出力をONにします。出力には何もつながないでも、動作確認用のLEDの点灯で確認ができます。

 25℃以上と28℃以上の二つのブロックを追加しました。

 それぞれの書き込みブロックの内容です。FunctionはWrite Multiple Coilsを使いました。

実行

 温度の読み出しは、今までと同じく「監視と調整」をクリックして実行していました。
 しかし、出力側のブロックを追加すると、熱電対の先端を指でつまんでも温度表示が上がりません。

 右側の「ビルド、展開起動」を一度実行した後は、リアルタイムに温度は上がり、出力も正常になりました。

 これらの違いが何であるかを理解できていません。

前へ

Simulink Support Package for Raspberry Pi ⑥ I2C BMP280 BME280 LPS22B LPS25HB