Modbusの利用 (16) WAGO 750-842②ディジタル出力
WAGO 750-842にディジタル出力750-512モジュールを追加しました。2チャネルあり、230Vacもしくは30Vdcまでの負荷を駆動できます。
接続は次の順番です。
- 750-842 TCPインターフェース
- 750-512 2チャネル・リレー出力
- 750-600 終端
電源は、DINレールに取り付けられるアマゾンで入手した24V-1.7A電源を用意しました。
●アドレス
750シリーズは、接続した順にアドレスが振られます。750-512を1個だけ接続したので、スレーブ・アドレスは0x0000です。ディジタル入出力は、16ビット単位でアクセスし、750-512はLSBから2ビットでチャネル指定ができます。
0b0000 0000 0000 00xx
●プログラム
write_single_registerで16ビットを書き込みます。以下の動作を繰り返します。動作の確認は、確認用緑のLEDの点灯と、リレーの動作音です。
- 最初 '0'を書き込んで、二つのリレーをOFFにする
- '2'は、DO2をONにDO1をOFFにする
- '1'は、DO1をONにDO2をOFFにする
- '3'は、DO1、DO2共にONにする
from pyModbusTCP.client import ModbusClient import time SERVER_HOST = "192.168.111.24" SERVER_PORT = 502 c = ModbusClient() c.host(SERVER_HOST) c.port(SERVER_PORT) c.open() while 1: c.write_single_register(0, 0) print('----') time.sleep(3.14) c.write_single_register(0, 2) time.sleep(3.14) print('====') c.write_single_register(0, 1) time.sleep(3.14) c.write_single_register(0, 3) print('+++++') time.sleep(3.14)
●アナログ・ユニットを追加でつなぐ①
アナログの熱電対モジュールを追加します。ディジタル・モジュールの後ろに追加できます。
- 750-842 TCPインターフェース
- 750-512 2チャネル・リレー出力
- 750-469 2AI 熱電対
- 750-600 終端
出力と入力はそれぞれ0x0000からアドレスが振られます。
- 750-469 2AI 熱電対 0x0000
- 750-512 2チャネル・リレー出力 0x0000
●プログラム
入力と出力のアドレスは、別個に振られるので、どちらも0x0000です。
from pyModbusTCP.client import ModbusClient import time SERVER_HOST = "192.168.111.25" SERVER_PORT = 502 c = ModbusClient() c.host(SERVER_HOST) c.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)
実行中の様子です。
●アナログ・ユニットを追加でつなぐ②
アナログの電圧入力モジュール750-479を追加します。熱電対のアナログ・モジュールの後ろに追加できます。
- 750-842 TCPインターフェース
- 750-512 2チャネル・リレー出力
- 750-469 2AI 熱電対(入力)
- 750-479 2AI DC±10V、差動入力
- 750-600 終端
●プログラム
アナログ入力が二つになりました。したがって、アドレスは次のように振られます。熱電対のモジュールは2チャネルなので、それぞれにアドレスが振られます。ディジタル出力は0x0000のままで変化しません。
- 750-469 2AI 熱電対 0x0000
- 750-479 2AI DC±10V、差動入力 0x0002
from pyModbusTCP.client import ModbusClient import time SERVER_HOST = "192.168.111.25" SERVER_PORT = 502 c = ModbusClient() c.host(SERVER_HOST) c.port(SERVER_PORT) c.open() WAGO750_469InputAddr = 0x0000 WAGO750_479InputAddr = 0x0002 WAGO750_512OutputAddr = 0x0000 # read back 0x0200 def s16(x): return -(x & 0b1000000000000000) | (x & 0b0111111111111111) while 1: regs469 = c.read_holding_registers(WAGO750_469InputAddr, 1) #reg_addr,number of registers to read print(float(regs469[0])/10.0, '`C') regs479 = c.read_holding_registers(WAGO750_479InputAddr, 1) #reg_addr,number of registers to read r = s16(regs479[0]) print(round((float(r)/32768*10.0),6), 'V') 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)
実行している様子です。
●アナログ・ユニットを追加でつなぐ③
熱電対の2番目にK型センサを追加しました。また、アナログ入力2チャネルの入力を1kΩでショートしました。したがって、それぞれのチャネルのスレーブ・アドレスは、次のようになります。
- 750-469 2AI 熱電対 TC1;0x0000、TC2;0x0001
- 750-479 2AI DC±10V、差動入力 AI1;0x0002、AI2;0x0003
from pyModbusTCP.client import ModbusClient import time SERVER_HOST = "192.168.111.25" SERVER_PORT = 502 c = ModbusClient() c.host(SERVER_HOST) c.port(SERVER_PORT) c.open() WAGO750_469InputAddr = 0x0000 WAGO750_469_2InputAddr = 0x0001 WAGO750_479InputAddr = 0x0002 WAGO750_479Input_2Addr = 0x0003 WAGO750_512OutputAddr = 0x0000 # read back 0x0200 def s16(x): return -(x & 0b1000000000000000) | (x & 0b0111111111111111) while 1: regs469 = c.read_holding_registers(WAGO750_469InputAddr, 1) #reg_addr,number of registers to read print(float(regs469[0])/10.0, '`C') regs469 = c.read_holding_registers(WAGO750_469_2InputAddr, 1) #reg_addr,number of registers to read print(float(regs469[0])/10.0, '`C') regs479 = c.read_holding_registers(WAGO750_479InputAddr, 1) #reg_addr,number of registers to read r = s16(regs479[0]) print(round((float(r)/32768*10.0),6), 'V') regs479 = c.read_holding_registers(WAGO750_479Input_2Addr, 1) #reg_addr,number of registers to read r = s16(regs479[0]) print(round((float(r)/32768*10.0),6), 'V') 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)
実行中の様子です。