zhu9296 2018-12-11 07:59 采纳率: 0%
浏览 2824

求大神看看这程序哪里错了?为什么一直报错,求大神指教

程序是为了循环读取功率仪704地址的数据,程序段如下:

import serial 
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import time

def sleeptime(hour,min,sec):
    return hour*3600 + min*60 + sec
master = modbus_rtu.RtuMaster(
    serial.Serial('COM8', baudrate=19200, bytesize=8, parity='N', stopbits=1)
)
master.set_timeout(5.0)
while (True):

    data = master.execute(1, cst.READ_HOLDING_REGISTERS, 704, 1)
    print (data)
    second = sleeptime(0,0,3)
    time.sleep(second)

但是每次运行只有第一次能读出来,然后后面就出现以下报错:

Traceback (most recent call last):
  File "C:\Users\zqc\Desktop\新建文本文档 (2).PY", line 15, in <module>
    data = master.execute(1, cst.READ_HOLDING_REGISTERS, 704, 1)
  File "E:\Python\lib\site-packages\modbus_tk\utils.py", line 39, in new
    raise excpt
  File "E:\Python\lib\site-packages\modbus_tk\utils.py", line 37, in new
    ret = fcn(*args, **kwargs)
  File "E:\Python\lib\site-packages\modbus_tk\modbus.py", line 306, in execute
    response_pdu = query.parse_response(response)
  File "E:\Python\lib\site-packages\modbus_tk\modbus_rtu.py", line 46, in parse_response
    raise ModbusInvalidResponseError("Response length is invalid {0}".format(len(response)))
modbus_tk.exceptions.ModbusInvalidResponseError: Response length is invalid 0
  • 写回答

5条回答 默认 最新

  • 初级阅读者2021 2023-04-18 22:40
    关注

    我也遇到这样问题,PC与ardunio 板子(模拟modbus slave器件,使用modbus slave库,查了通讯设定是:9600,8,N,1)通讯,上位机使用python 和 Modbus_tk库,发现通讯成功率非常非常低,往往只有第一次通讯成功,随后开始报“Response length is invalid 0”,发现类似的程序在公司电脑上没什么问题,后来更换了很短的USB连线后,发现通讯成功率大大提高,但是也会出现上述报错。同时连接电脑的还有以USB转TTL形式串行通讯的ardunio板子(模拟串口通讯器件),通讯没有问题。

    推测原因:使用modbus_tk库,因为某种原因,以通讯设定:9600,8,N,1的情况下,对通讯连线或PC端USB口稳定性要求高,建议更换短的或质量好的通讯线,并且避免使用不带校验位的串口通讯设定(如果从机能够修改设定的话)。查了网上有人也建议更换通讯线或USB转串口器件。

    这个问题没有工具的话有些难差原因,如果监控数据的话,估计会看到乱码。网上查了好几次没得到明确的答案,所以把自己的发现写出来供大家参考,不喜勿喷,谢谢。

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大