学习笔记python-modbus rtu的实现

需求:通过modbus协议,从各类传感器获取数据,实时显示测得的数据。
1)需要先安装python依赖包pyserial和pymodbus_tk。
安装方法:cmd里直接运行 pip install pyserial。

pip install pyserial

(由于我的系统是win7 32位,安装python时不知为何装不上pip,最后是手动离线安装的,直接运行pip出错,需要输入python -m pip install pyserial)。
安装pymodbus_tk时也出错

image.png

无奈只好也离线安装,安装包下载地址https://github.com/ljean/modbus-tk。下载好后,cmd cd进入安装包目录,运行下面指令即可完成安装。

python setup.py install

2)模拟串口数据,需要两个工具:
Configure Virtual Serial Port Driver可以创建虚拟串口;


image.png

Modbus Slave,用于模拟slave,产生数据,发送串口com1,接收串口com2。


image.png

3)连接串口
  master = modbus_rtu.RtuMaster(serial.Serial(port="com2",baudrate=9600, bytesize=8, parity='N', stopbits=1))
'''
port ——端口号
baudrate——波特率
bytesize——数据位
parity——校验位
stopbits——停止位
'''
  master.set_timeout(5.0)
  master.set_verbose(True)

4)读取数据

def getdata():
    Hold_value = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 9)  # 参数可修改
#1——从机地址
#cst.READ_HOLDING_REGISTERS——功能码,读保持寄存器
#0——寄存器起始地址
#9——寄存器数量
    lb2.configure(text=Hold_value[0]+Hold_value[1]/100)# 在标签lb2显示值
    app.after(1000,getdata) # 每隔1s调用函数 getdata自身获取数据

注意,Hold_value是一个元组,图示数据输出值为(12,44,0,0,0,0,0,0,0,)
地址0的值为Hold_value[0]
5)显示界面,用标签显示即可


image.png

你可能感兴趣的:(学习笔记python-modbus rtu的实现)