通过Modbus RTU与多端口PRD282 Raspberry Pi 4进行通信时出现问题

2024-07-05 14:08:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过Modbus RTU进行通信时遇到问题。首先为我的英语感到抱歉;):

  1. 我使用RS485 Pi SN65HVD72连接多芯PRD-28-2。我在这个指令中做了一切:https://www.abelectronics.co.uk/kb/article/1035/raspberry-pi-3-serial-port-usage

config.txt更改:

  • toverlay=pi3小型UART bt
  • 启用\u uart=1

在此步骤之后,my/dev的配置如下所示:

  • LRWXRWX 1根根目录7 gru 30 15:03 serial0->;ttyAMA0
  • lrwxrwx 1根根目录5 gru 30 15:03 serial1->;ttyS0
  1. 在多芯PRD-28-2中,我将RS485选项更改为:
  • 协议:Modbus
  • 奇数
  • 停止位:1位
  1. Python代码:
    from pymodbus.client.sync import ModbusSerialClient as ModbusClient
    import logging

    FORMAT = ('%(asctime)-15s %(threadName)-15s'
    ' %(levelname)-8s %(module)-15s:%(lineno)-8s %(message)s')
    logging.basicConfig(format=FORMAT)
    log = logging.getLogger()
    log.setLevel(logging.DEBUG)
    #multicont = ModbusClient(method='rtu',port='/dev/serial0',stopbits=1,bytsize=8,parity='N',baudrate=9600,timeout=1,strict=False)
    multicont = ModbusClient(method='rtu',port='/dev/serial0',stopbits=1,bytsize=8,parity='O',baudrate=9600,timeout=1,strict=False)
    connection = multicont.connect()
    print(connection)
    value = multicont.read_coils(1,15,unit=1)
    log.debug(value)
  1. 错误消息:

Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received)

  1. 日志:

2020-12-30 16:24:51,992 MainThread DEBUG transaction :118
Current transaction state - IDLE
2020-12-30 16:24:51,992 MainThread DEBUG transaction :123 Running transaction 1
2020-12-30 16:24:51,992 MainThread DEBUG transaction
:230 SEND: 0x1 0x1 0x0 0x1 0x0 0xf 0x2d 0xce
2020-12-30 16:24:51,993 MainThread DEBUG sync :75 New Transaction state 'SENDING'
2020-12-30 16:24:51,993 MainThread
DEBUG transaction :239 Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
2020-12-30 16:24:52,995 MainThread DEBUG transaction :253 Transaction failed. (Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received))
2020-12-30 16:24:52,995 MainThread DEBUG rtu_framer :241 Frame - [b''] not ready
2020-12-30 16:24:52,996 MainThread DEBUG
transaction :409 Getting transaction 1
2020-12-30 16:24:52,996 MainThread DEBUG transaction :204
Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
2020-12-30 16:24:52,996 MainThread
DEBUG communication :20 Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received)


Tags: fromdevdebugmessageportloggingerrormodbus
1条回答
网友
1楼 · 发布于 2024-07-05 14:08:52

PyModbus未收到响应

如果你能使用示波器,现在就是使用它的时候了。Modbus RTU可能会出现很多问题

确保您知道如何使用电线,熟悉RS485偏置和终端

可能的原因:

  • 发送到错误串行设备/接口的请求
  • 设备使用不同的波特率或串行设置
  • 设备可以正常听到您的声音,但配置了不同的从属ID,所以它不会响应
  • 接线错误、接地问题
  • RS485电气问题,最明显的是主机必须偏置总线,通常通过必须焊接/启用的电阻器
  • 总线端接电阻器需要正确的电压水平(有时它们已经内置,更经常的情况是需要启用它们,幸运的话可能不需要)
  • 当从设备响应时,主设备仍在驱动RS485总线。(如果您没有专用的RS485驱动程序,总线可能最终被不可靠的软件定时器断言/解除断言。某些设备允许您将响应延迟配置为解决方法。)
  • 主人根本不开公共汽车。(在RS232模式下工作,而不是在RS485模式下工作。)
  • 此外,Linux可能已将TTYAM0配置为引导/内核消息的串行控制台。(这不太可能导致您当前的问题,只是需要注意的其他问题。)

最后一条建议:如果您可以选择使用Modbus TCP而不是Modbus RTU,则改为。这将取代所有的RS485电气问题,这是IP配置问题,您可以使用非处方药

相关问题 更多 >