Python 最小,随机生成错误的crc
我目前正在与树莓进行数据采集项目。当我启动我的请求脚本时,有时(罕见但太频繁)我的从属计算机检测到CRC错误或无效长度。我猜错误可能来自这样一个事实:由于我的脚本速度很快,在几秒钟内要求数百个寄存器,有时消息不完整,我的从属服务器将其检测为错误消息。我想知道是否有可能minimalmodbus时间不对,有时会发送错误或部分请求(不完整) 从服务器上返回的错误:Python 最小,随机生成错误的crc,python,modbus,minimalmodbus,modbus-tk,Python,Modbus,Minimalmodbus,Modbus Tk,我目前正在与树莓进行数据采集项目。当我启动我的请求脚本时,有时(罕见但太频繁)我的从属计算机检测到CRC错误或无效长度。我猜错误可能来自这样一个事实:由于我的脚本速度很快,在几秒钟内要求数百个寄存器,有时消息不完整,我的从属服务器将其检测为错误消息。我想知道是否有可能minimalmodbus时间不对,有时会发送错误或部分请求(不完整) 从服务器上返回的错误: invalid request: Invalid CRC in request 这是一个典型的错误,当我的主人不知道该回答什么时,我会
invalid request: Invalid CRC in request
这是一个典型的错误,当我的主人不知道该回答什么时,我会犯这个错误:
error = SLAVE_ERRORS[str(e)]
KeyError: "Checksum error in rtu mode: '\\x8aÿ' instead of '\\x8fF' . The response is: '4ÿ\\x07$Ê\\x8aÿ' (plain response: '4ÿ\\x07$Ê\\x8aÿ')"**
我在从机上使用modbus_tk来模拟modbus从机。下一步通常是我的代码的一部分,它从从属服务器请求值,这取决于值的类型
try:
try:
var_register = file_var[i]['varRegister']
var_type = file_var[i]['varType']
var_use = file_var[i]["varUse"]
var_name = file_var[i]["varName"].strip()
if '#' in var_register:
continue
elif var_type=='U16' or var_type=='I16' or var_type=='S16':
value = inst.read_register(
int(var_register),
0,
3,
not bool(file_var[i]['varSigned'])
)
elif var_type=='U32' or var_type=='I32' or var_type=='S32':
value = inst.read_long(
int(var_register),
3,
not bool(file_var[i]['varSigned'])
)
由于我的第一个猜测是计时问题,我随机插入了“time.sleep”来计时我的请求,但错误仍然不断出现。它是完全随机的,有时会工作5分钟,有时在我第一次CRC错误前几秒钟。你知道我应该去哪里调查吗?提前感谢您的帮助
编辑:我的电脑充当从机,带有模拟多个从机的modbus_tk脚本。RPI是请求寄存器及其值的主机。从机都配置为在这些特定寄存器中具有值,以避免IllegaAddress错误。物理连接是一个USB到RS485转换器,RPI配备了一个处理RS485输入/输出的HAT。因此,它实际上是ModBus RTU通信。当请求进来时,从机循环并发送应答
编辑2:所以我做了进一步的调查,发现了一些有趣的事情。我收到一个错误(这一次是在主机上),从机显然发送了错误的校验和。。。在查看时,我发现modbus_tk生成的校验和很好,但主机收到的答案不一样。看起来有些字节在路上被改变了,这很奇怪。那是从哪里来的?硬件问题?仅当轮询多个寄存器(一次超过2个)时才会发生此错误。如果请求的寄存器数为1或2,则所有其他请求都可以。听起来您的问题可能是仿真从机使用的问题。不,这并不奇怪,可能是噪声或其他硬件问题 这正是CRC存在的原因,以确保您在主机上接收到与从机发送的值相同的值 您很可能有:
也许你能更好地解释一下你的设置?如何连接PC和RPi?Modbus TCP?那么Modbus RTU安装在哪里?谁是主人,谁是奴隶?奴隶是在读东西还是只是在发送假帧?Modbus RTU或TCP上是否检测到CRC错误?太多的开放端无法提供帮助。嘿,感谢这些解释,我认为这是唯一可以解释我的随机错误的东西。问题是,我认为我的电缆没有扭曲A和B电缆,这会产生太多的噪音。。。GND接线似乎为噪音增加了安全性。但是我看到过很多rs485接线上没有任何GND的安装。我认为扭转使它非常有弹性。我只是想总结一下,我的电报是非常错误的。我会看那些文件,以防新电线发生这种情况!谢谢你的时间,不客气。我认为这真的取决于你的环境和电源。如果您在清洁的环境中,最差的电缆可能还可以。双绞线和GND应该有帮助。祝你好运