使用Python通过ModBus RTU 协议读取传感器数据
# 加载 ModBus模块
import minimalmodbus
# 设置 串口地址 和 设备地址(此处是10进制的地址,串口报文是16进制的地址)
inst = minimalmodbus.Instrument('COM4',1)
# 设置波特率
inst.serial.baudrate=9600
# 设置超时
inst.serial.timeout=1
#报文格式
# 01 03 00 05 00 01 94 0B
# 01(设备地址)03(问询)0005(寄存器地址)0001(寄存器数量)940B(CRC)
# 00 01 表示读取1个寄存器,同理 00 02 表示读取两个连续的寄存器 报文中的寄存器地址当作首个,依次向后类推
# 温度寄存器地址 0001
tem = inst.read_register(1,1,signed=True)
# 湿度寄存器地址 0000
hum = inst.read_register(0,1,signed=False)
print("当前温度"+str(tem)+"℃")
print("当前湿度"+str(hum)+"%")其中read_register(1,1,signed=False)的参数,第1位是十进制的寄存器地址,第2位是精度要求,1代表小数点1位,signed=False代表是否有符号,比如温度就是有负值的。
另外在开始写代码之前要先知道传感器的报文结构
这里使用的是RS485的问询命令
报文结构 01(设备地址)03(功能码)0005(寄存器地址)0001(寄存器数量)940B(CRC)

报文结构01(设备地址)03(功能码)02(两位有效数据)020D(有效数据,将16进制转化成10进制就是数据)78E1(CRC校验)
参考资料:
https://minimalmodbus.readthedocs.io/en/stable/
https://www.bilibili.com/video/BV1BE411E77R
http://www.ip33.com/crc.html
评论已关闭