我如何解决modbus中的校验和错误

问题描述 投票:0回答:1

我有一个脚本,应该从与MODBUS连接的传感器中收集浓度数据。当我运行脚本时,会发生此错误:

追踪(最近通话):文件“ C:\ Users \ AquaBattery.HP-LAPTOP \ Desktop \ H2-read.py”,第33行,在val = H2.read_long(ADRH2,functioncode = 4,byteorder = 0)文件“ C:\ Users \ AquaBattery.HP-LAPTOP \ Desktop \ minimalmodbus.py”,行560,在read_long中payloadformat = _PAYLOADFORMAT_LONG,_generic_command中的文件“ C:\ Users \ AquaBattery.HP-LAPTOP \ Desktop \ minimalmodbus.py”,行1170payload_from_slave = self._perform_command(功能代码,payload_to_slave)_perform_command中的文件“ C:\ Users \ AquaBattery.HP-LAPTOP \ Desktop \ minimalmodbus.py”,第1244行响应,自我地址,自我模式,功能代码_extract_payload中的文件“ C:\ Users \ AquaBattery.HP-LAPTOP \ Desktop \ minimalmodbus.py”,行1756引发InvalidResponseError(文本)minimalmodbus.InvalidResponseError:rtu模式下的校验和错误:'\ x00 \ x00'而不是'c \ x85'。响应为:“ \ x01 \ x04 \ x0e \ x00 \ x00 \ x00 \ x00 \ x00 \ x00”(普通响应:“ \ x01 \ x04 \ x0e \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00')] >

这是我的代码:

import time
import os
import serial
import minimalmodbus



delay = 1
pdata = 1


#-- H2 sensor read out  -----------------------------------
#def getH2():
res = 0      
ADRH1 = 1 # read out register for H2
ADRH2 = 0 # read out register for H2

try:
        H2 = minimalmodbus.Instrument('COM6',ADRH1)  # open serial port
        H2.serial.port          # this is the serial port name
        H2.serial.baudrate = 9600   # Baud
        H2.serial.bytesize = 8
        H2.serial.parity   = serial.PARITY_NONE
        H2.serial.stopbits = 1
        H2.serial.timeout  = 0.25   # seconds


        val = H2.read_long(ADRH2,functioncode=4,byteorder=0)
        print("test")
        res = float(val)/10
        print(val)
        print("---")
        print(res)

except ValueError:
        print("Failed to read H2")

如何更改对传感器的请求或传感器的响应,以使两个数据流的校验和相同?

此致,卢卡斯

我有一个脚本,应该从与MODBUS连接的传感器中收集浓度数据。当我运行脚本时,会发生此错误:追溯(最近一次呼叫最近):文件“ C:\ Users \ ...

checksum minimalmodbus
1个回答
0
投票

我知道了!

© www.soinside.com 2019 - 2024. All rights reserved.