如何用Python读取Keller Modbus深度传感器的输出数据
如何通过Modbus RTU读取Keller深度传感器的压力、温度数据并解析?
我正尝试使用Modbus协议,通过Raspberry Pi 5读取Keller品牌的一款深度传感器。该传感器可输出压力(单位bar)和温度(单位摄氏度)数据,用于计算水深。目前我已能成功读取寄存器,但由于对Modbus协议不熟悉,不清楚需要读取哪些寄存器来获取目标数据,也不知道如何正确解析返回的原始数据。传感器的通信协议文档可在产品官网获取。
通信基础参数
Mode: RTU Mode (ASCII is not supported) Coding System: 8–bit binary, hexadecimal 0–9, A–F Two hexadecimal characters (bytes) contained in each 8–bit field of the message Bits per Byte: 1 start bit 8 data bits, least significant bit sent first No parity (default) 1 parity bit: even or odd parity (programmable) 1 stop bit (default) 2 stop bit (programmable) (Class.Group-version 5.21-XX.XX and 5.24-XX.XX) Error Check Field: 2 Byte Cyclical Redundancy Check (CRC) Baudrate: programmable 9’600baud (default) or 115’200baud
现有代码
import minimalmodbus mb_address = 1 sensy_boi = minimalmodbus.Instrument('/dev/ttyACM0', mb_address) sensy_boi.serial.baudrate = 9600 sensy_boi.serial.bytesize = 8 sensy_boi.serial.parity = minimalmodbus.serial.PARITY_NONE sensy_boi.serial.stopbits = 1 sensy_boi.serial.timeout = 0.5 sensy_boi.mode = minimalmodbus.MODE_RTU sensy_boi.clear_buffers_before_each_transaction = True sensy_boi.close_port_after_each_call = True print(sensy_boi) data = sensy_boi.read_registers(0, 2, 3) print(f"Raw data is {data}") sensy_boi.serial.close()
现寻求帮助,明确以下两点:
- 需要读取哪些寄存器来获取压力、温度数据
- 如何正确解析这些寄存器的原始数据为实际物理量
内容的提问来源于stack exchange,提问作者Casey Koehn
相关产品推荐
相关产品推荐

