|
| 1 | +import modbus_rt |
| 2 | +import modbus_rt_defines as cst |
| 3 | + |
| 4 | +serial_name = "/dev/ttyUSB0" |
| 5 | +ip_addr = "" |
| 6 | + |
| 7 | +rm = modbus_rt.rtu(cst.MASTER) |
| 8 | +rm.set_serial(serial_name) |
| 9 | +rm.open() |
| 10 | +ts = modbus_rt.tcp() |
| 11 | +ts.set_net(ip_addr, 502, cst.SOCK_STREAM) |
| 12 | +def pre_call(evt) : |
| 13 | + slave = evt.slave |
| 14 | + function = evt.function |
| 15 | + addr = evt.addr |
| 16 | + quantity = evt.quantity |
| 17 | + if cst.READ_HOLDING_REGISTERS == function: |
| 18 | + data = rm.excuse(slave, function, addr, quantity) |
| 19 | + ts.excuse(cst.WRITE, cst.REGISTERS, addr, quantity, data) |
| 20 | + elif cst.READ_DISCRETE_INPUTS == function: |
| 21 | + data = rm.excuse(slave, function, addr, quantity) |
| 22 | + ts.excuse(cst.WRITE, cst.INPUTS, addr, quantity, data) |
| 23 | +def done_call(evt) : |
| 24 | + slave = evt.slave |
| 25 | + function = evt.function |
| 26 | + addr = evt.addr |
| 27 | + quantity = evt.quantity |
| 28 | + if cst.WRITE_SINGLE_COIL == function: |
| 29 | + data = ts.excuse(cst.READ, cst.CIOLS, addr, 1) |
| 30 | + rm.excuse(slave, function, addr, data[0]) |
| 31 | + elif cst.WRITE_SINGLE_REGISTER == function: |
| 32 | + data = ts.excuse(cst.READ, cst.REGISTERS, addr, 1) |
| 33 | + rm.excuse(slave, function, addr, data[0]) |
| 34 | + elif cst.WRITE_MULTIPLE_COILS == function: |
| 35 | + data = ts.excuse(cst.READ, cst.CIOLS, addr, quantity) |
| 36 | + rm.excuse(slave, function, addr, quantity, data) |
| 37 | + elif cst.WRITE_MULTIPLE_REGISTERS == function: |
| 38 | + data = ts.excuse(0, cst.REGISTERS, addr, quantity) |
| 39 | + rm.excuse(slave, function, addr, quantity, data) |
| 40 | +ts.add_block("A", 0, 20000, 10) |
| 41 | +ts.add_block("B", 1, 10000, 16) |
| 42 | +ts.add_block("C", 4, 0, 10) |
| 43 | +ts.set_strict(0) |
| 44 | +ts.set_pre_ans_callback(pre_call) |
| 45 | +ts.set_done_callback(done_call) |
| 46 | +ts.open() |
0 commit comments