You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4使用minimalmodbus读取Geolux传感器报非法函数码错误

Geolux RSS-2-300WL流量传感器Modbus通信错误排查(功能码4非法)

问题背景

使用Raspberry Pi 4 Model B通过minimalmodbus库与Geolux RSS-2-300WL流量传感器通信,串口参数配置为波特率9600、数据位8、偶校验、停止位1、超时1秒,尝试用功能码4读取寄存器地址0x0012时,触发报错:ErrorSlave reported illegal function。

核心原因(基于设备手册)

该传感器仅支持Modbus功能码3(读取保持寄存器),不支持功能码4(读取输入寄存器)。水位数据存储在保持寄存器0x0012(十进制18),为32位浮点数,需连续读取起始地址0x0012的2个寄存器。

修正后的代码

#!/usr/bin/env python3

import minimalmodbus
import serial
import time

# 传感器配置
geolux = minimalmodbus.Instrument('/dev/ttySC0', 1)  # 串口路径、从站ID
geolux.serial.baudrate = 9600
geolux.serial.bytesize = 8
geolux.serial.parity = serial.PARITY_EVEN
geolux.serial.stopbits = 1
geolux.serial.timeout = 1 
geolux.clear_buffers_before_each_transaction = True  # 清除串口缓冲区,避免残留数据干扰

# 主读取循环
try:
    while True:
        try:
            # 读取32位浮点数水位值(从保持寄存器0x0012开始,读2个寄存器)
            water_level = geolux.read_float(registeraddress=0x0012, functioncode=3, number_of_registers=2)
            print(f"当前水位: {water_level}")
            time.sleep(1)  # 每秒读取一次
        except Exception as e:
            print(f"读取失败: {str(e)}")
            time.sleep(1)
except KeyboardInterrupt:
    print("程序已终止")

额外排查建议

  • 确认从站ID:传感器默认ID为1,若已通过配置工具修改,需同步调整代码中的从站ID参数。
  • 检查硬件连接:使用RS485适配器时,确保A/B线与传感器对应引脚正确连接,且树莓派与传感器共地。
  • 测试串口连通性:可使用minicom或screen工具直接发送Modbus指令,验证硬件链路是否正常。

内容的提问来源于stack exchange,提问作者user28387204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:42:18