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)
実行中の様子です。





