modbus_tk库的使用和分析

目录

modbus_tk库的使用和分析

如何使用modbus_tk的主机和从机?

主从Demo代码分析

modbus_tk库函数主代码分析


modbus_tk库的使用和分析

modbus版本:0.5.7 

下载地址:https://github.com/ljean/modbus-tk

1:应用示例程序

2:web形式的主机端(bottle搭建的后台)

3:modbus_tk主代码

4:单元测试代码

目前只讨论1中两个和3

 

如何使用modbus_tk的主机和从机?

【rtuslave_example.py】

功能:开启rtu从端,然后通过命令行设定从机号(地址)、数据块、寄存器或者线圈数值。这就是一个命令行操作的从机端软件。

使用步骤:

  • 修改rtuslave_example.py中“PORT = 'COM11'”后运行。

我的虚拟串口地址是COM11。

  • 添加从机:add_slave 3

添加地址为3的从机

  • 添加从机的块数据:add_block 3 hold 3 0 3

该从机中添加0-3内存块,类型为3表示用作保持寄存器(设置模拟量输出),取名为hold。

注意:0-3内存已经分配出去,添加的新块不能包含此三个。以上类型设置参照fefines.py中的“supported block types”

  • 设定寄存器/线圈数值:set_values 3 hold 0 1 2 3

设置前步骤中的三个内存值为1,2,3

*以上命令参考资料详见rtuslave_example.py代码。

以上产生了一个从机3,内部地址0-3用作保持寄存器,其数值分别为1-3,且从机串口连接在计算机的COM11。在虚拟串口的设置中,是将COM11和COM10连接的,所以从机需要连接COM10来读取从机数据。

【主机读数据流程】

  • rtumaster_example.py中修改PORT = 'COM10',注释掉所有logger.info,添加如下modbus取数据代码:

logger.info(master.execute(3, cst.READ_HOLDING_REGISTERS, 0, 3))

表示要读取保持寄存器从0-3地址上的值

  • 运行该py

上图,成功取出寄存器的值为1,2,3

 

主从Demo代码分析

从端(服务器)代码是基于RtuServer类的应用,除此以外代码中封装了几个交互命令

主端代码分析:

log相关代码+功能性代码,流程很简单:

  1. 生成RtuMaster实例,在此配置了串口参数
  2. 设置从机应答的timeout为5s
  3. 打开debug的log输出 master.set_verbose(False)
  4. 向从机发出取值命令,收信后结束程序

master.execute(3, cst.READ_HOLDING_REGISTERS, 0, 3)

以上函数的返回值就是收到的三个寄存器值得tuple

 

modbus_tk库函数主代码分析

目前只讨论以上红框部分(RTU模式)

  • 9
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Modbus是一种通信协议,常用于工业自动化领域,用于设备之间的数据通信和控制。而Modbus TCP是基于TCP/IP网络的Modbus协议。 Python是一种功能强大的编程语言,提供了许多和工具来简化开发过程。其中,modbus_tkPython中的一个,用于实现Modbus TCP通信。 使用modbus_tk实现Modbus TCP可以通过以下步骤进行: 1. 安装modbus_tk使用pip命令在Python环境中安装modbus_tk。例如:pip install modbus_tk 2. 导入modbus_tk:在Python代码中导入所需的modbus_tk。例如:import modbus_tk 3. 创建Modbus Master对象:使用modbus_tk提供的函数,创建一个Modbus Master对象,用于与Modbus TCP设备进行通信。 4. 连接到Modbus TCP设备:使用Modbus Master对象的connect()函数,指定Modbus TCP设备的IP地址和端口号,与设备建立连接。 5. 读取或写入数据:使用Modbus Master对象的read_coils()、read_discrete_inputs()、read_holding_registers()、read_input_registers()等函数,可以读取Modbus TCP设备的不同类型的寄存器或线圈中的数据,也可以使用write_single_coil()、write_single_register()等函数写入数据到设备。 6. 关闭连接:使用Modbus Master对象的close()函数,关闭与设备的连接。 通过以上步骤,在Python使用modbus_tk可以实现Modbus TCP通信。需要根据具体的需求和设备的寄存器结构,使用适当的函数进行读写操作,以完成数据的通信和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值