基于python的modbus RTU测试工具

本文介绍了如何使用ModbusRTU协议在Python中创建一个服务器,处理set_values命令,包括单个和批量设置寄存器值,以及使用串口工具进行测试。主要涉及命令解析、块添加和数据操作功能。
摘要由CSDN通过智能技术生成

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()

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值