1.将压缩包下载下来直接解压即可使用。
2.运行界面
3.输入指令:
单个命令
set_values 1 3 0 10 11 12 13
解释:set_value:设置数据
1:从站编号
3:保持寄存器,可输入(1,2,3,4)分别对应常规的寄存器类型。
0:起始地址
10 11 12 13 。。。。。:起始地址后多少个寄存器数据,举例中为是个寄存器地址数据。
批量使用
set_values 1 3 40 PT
解释:set_value:设置数据
1:从站编号
3:保持寄存器,可输入(1,2,3,4)分别对应常规的寄存器类型。
40:起始地址
PT:一次可随机生成126个寄存器地址数据
4.设置完成后可用串口调试工具或自己写的程序充当主站进行测试。
# -*- coding: utf_8 -*-
import sys
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import serial
print("please input port:")
PORT = input()
def main():
server = modbus_rtu.RtuServer(serial.Serial(PORT,baudrate = 4800,bytesize = 8,parity = 'N',stopbits = 1))
try:
server.start()
slave_1 = server.add_slave(1)
slave_1.add_block('1', cst.COILS, 0, 1024)
slave_1.add_block('2', cst.DISCRETE_INPUTS, 0, 1024)
slave_1.add_block('3', cst.HOLDING_REGISTERS, 0, 1024)
slave_1.add_block('4', cst.ANALOG_INPUTS, 0, 1024)
while True:
print("please input Cmd")
cmd = sys.stdin.readline()
args = cmd.split(' ')
if cmd.find('quit') == 0:
sys.stdout.write('bye-bye\r\n')
break
elif args[0] == 'add_slave':
slave_id = int(args[1])
server.add_slave(slave_id)
sys.stdout.write('done: slave %d added\r\n' % (slave_id))
elif args[0] == 'add_block':
slave_id = int(args[1])
name = args[2]
block_type = int(args[3])
starting_address = int(args[4])
length = int(args[5])
slave = server.get_slave(slave_id)
slave.add_block(name, block_type, starting_address, length)
sys.stdout.write('done: block %s added\r\n' % (name))
elif args[0] == 'set_values':
slave_id = int(args[1])
name = args[2]
address = int(args[3])
values = []
print(args[4], args[4].find('PT'))
if args[4].find('PT') > -1:
import random
for val in range(0, 127):
values.append(random.randint(80, 1000))
else:
for val in args[4:]:
values.append(int(val))
slave = server.get_slave(slave_id)
slave.set_values(name, address, values)
values = slave.get_values(name, address, len(values))
sys.stdout.write('done: values written: %s\r\n' % (str(values)))
elif args[0] == 'get_values':
slave_id = int(args[1])
name = args[2]
address = int(args[3])
length = int(args[4])
slave = server.get_slave(slave_id)
values = slave.get_values(name, address, length)
sys.stdout.write('done: values read: %s\r\n' % (str(values)))
else:
sys.stdout.write("unknown command %s\r\n" % (args[0]))
finally:
server.stop()
#测试命令
# set_values 1 3 0 10 11 12 13
# set_values 1 3 40 PT
if __name__ == "__main__":
main()