pymodbus使用介绍
上次介绍的是Modbus调试助手的使用,这次我们自己使用第三方库实现一些功能。
当我们写程序写的多一些时,自然就会使用第三方库,在使用过程中注意规避掉一些坑即可。
接下来我们使用python的 pymodbus
库来实现 modbus
功能。
运行环境:Ubuntu 14.04、 Python2.7
1.下载 pymodbus
库
我使用的是2.2.0版本,并没有使用最新的。下载完成后并无法直接使用,需要改动一下,不知道其他小伙伴是否也是这样,在网上查的时候资料还很少,最后是看了以前的版本才搞定的。忧桑。。。
下载好后是pymodbus-2.2.0,我们使用时是 pymodbus
这个文件夹。
2. 客户端简单例子
pymodbus下载好后,里面有很多例子,更多的功能可以参考例子后进行修改。这次和大家分享的是比较简单的例子,很容易上手。
①文件结构
将pymodbus文件夹与新建的测试文件放到同一目录下
②测试文件内容
#! /usr/bin/env python # coding=utf-8
from pymodbus.client.sync import ModbusTcpClient import time
UNIT = 0x1
client = ModbusTcpClient('192.168.1.99', port = 502, timeout = 1)
while True: request = client.read_holding_registers(0, 3) result = request.registers #print(result.bits[0]) print(result) print(result[0]) time.sleep(1)
client.close()
新建客户端去连接服务器,填充服务器IP与端口号。 pymodbus
库已经为我们封装好了寄存器的种类,例子中是读取保持寄存器的状态。
read_holding_registers(0, 3)
,从地址
0 开始,读取
3
位。之后我们将结果打印出来观察。
③服务器配置
使用之前介绍的modbus调试助手 ModSim32
作为服务器,配置如下图:
地址为1,为方便观察 Length
设置为 10
将40002设置为 111,40003
设置为 222
,以检查客户端读取的结果
④ python
客户端运行结果
我是直接使用ubuntu终端下运行的,连接成功后打印结果如下:
程序中我们读取3位,分别是 0
、 111
、 222
⑤客户端与服务器地址不匹配运行报错
如果客户端与服务器配置的地址不匹配,那么在运行的时候就会报错,错误信息如下:
服务器地址还是像之前的配置,但是客户端读取使是从11开始读取的,然鹅这个地址服务器端并没有配置,所以客户端这边对应的进行报错。
后记小结:
python的 modbus
库还有其他的,感兴趣的老铁可以去查一查。 libmodbus
库是另一个 c
的库,也是很常用的一个库。
往期Modbus相关:
欢迎大家关注公众号: Pou光明