modbus_tk库的使用和分析

目录

modbus_tk库的使用和分析

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

主从Demo代码分析

modbus_tk库函数主代码分析


modbus_tk库的使用和分析

modbus版本:0.5.7 

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

modbus_tk库的使用和分析_第1张图片

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

modbus_tk库的使用和分析_第2张图片

*以上命令参考资料详见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

modbus_tk库的使用和分析_第3张图片

上图,成功取出寄存器的值为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库函数主代码分析

modbus_tk库的使用和分析_第4张图片

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

你可能感兴趣的:(Python语言,开源软件阅读)