标签: pymodbus3

Modbus错误:[无效消息]接收到不完整的消息,预期至少2个字节(已接收0个)

问题

pymodbus主站/客户端可以向从站/服务器发送请求。从属/服务器使事物准备好返回,并正在等待主/客户端将它们捡起。尽管服务器/从机已准备就绪,但主服务器/客户端仅返回错误“ Modbus错误:[输入/输出] Modbus错误:[无效消息]接收到的消息不完整,预期至少2个字节(接收到0个字节)”。

设定

我使用带有此适配器的笔记本电脑作为服务器/从机:https : //www.amazon.com/dp/B076WVFXN8/ref=twister_B076X1BS4H?_encoding=UTF8&psc=1

我有一个Raspberry Pi 3 / BananaPi作为主服务器/客户端,并带有此适配器:https ://www.aliexpress.com/item/32781613765.html?spm=a2g0s.9042311.0.0.1aec4c4d0EXx8M

我下面本教程的大部分的设置,除了Arduino是交换与笔记本电脑适配器:https://circuitdigest.com/microcontroller-projects/rs485-serial-communication-between-arduino-and-raspberry-pi - Raspberry的针脚连接方法与本教程中的相同。

我在笔记本电脑上将此程序作为服务器/从机:

#!/usr/bin/env python
from pymodbus.server.sync import StartTcpServer
from pymodbus.server.sync import StartUdpServer
from pymodbus.server.sync import StartSerialServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSequentialDataBlock, ModbusSparseDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.transaction import ModbusRtuFramer, ModbusBinaryFramer

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)

def run_server():

    slave_store1 = ModbusSlaveContext(co=ModbusSequentialDataBlock(0, [1]*16))
    slave_store2 = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [1]*16))
    slave_store3 …
Run Code Online (Sandbox Code Playgroud)

python modbus rs485 banana-pi pymodbus3

5
推荐指数
1
解决办法
571
查看次数

Modbus 错误:[输入/输出] 未收到来自远程设备的响应

我尝试使用“安装”/dev/cu.SLAB_USBtoUART.

这是我的代码:

import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)

from pymodbus.constants import Endian
from pymodbus.constants import Defaults
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer

# settings for USB-RS485 adapter
SERIAL = '/dev/cu.SLAB_USBtoUART'
BAUD = 19200

# set Modbus defaults

Defaults.UnitId = 1
Defaults.Retries = 5

client = ModbusClient(method='rtu', port=SERIAL, stopbits=1, bytesize=8, timeout=3, baudrate=BAUD, parity='E')

connection = client.connect()
print "Readout started"

#result = client.read_discrete_inputs(0)
#result = client.read_holding_registers(12,19)
result = client.read_input_registers(0,1)
print(result) …
Run Code Online (Sandbox Code Playgroud)

python modbus pymodbus3 pymodbus

4
推荐指数
1
解决办法
1万
查看次数

pymodbus和pymodbus3模块有什么区别?

希望你过得很好!我最近开始使用python进行modbus通信.我想澄清一些疑惑.

  1. 什么模块更适合使用Python的modbus实现 - minimalmodbus,pymodbus,pymodbus3或其他.
  2. 我使用python3.4但无法使用pip或任何方式安装pymodbus模块.所以我安装了pymodbus3.
  3. 使用pymodbus3模块时,我能够使用以下代码编写线圈:

    import pymodbus3
    import serial
    from pymodbus3.pdu import ModbusRequest
    from pymodbus3.client.sync import ModbusSerialClient as ModbusClient 
    from pymodbus3.transaction import ModbusRtuFramer
    from serial.tools.list_ports import comports
    
    client = ModbusClient(method = "rtu", port = 'COM4',stopbits = 1, bytesize = 8, parity = 'N', baudrate= 19200)
    connection = client.connect()
    client.write_coil(1000, 1, unit = 0x01)
    
    Run Code Online (Sandbox Code Playgroud)

用于读取线圈状态(功能0x01):

result = client.read_coils(1000,1)
print(result)
client.close()
Run Code Online (Sandbox Code Playgroud)

它返回无.

或者写入注册和阅读也不起作用:

client.write_register(0, 1000, unit=0x01)
resu= client.read_holding_registers(0, 1, unit=0x01)
print(resu)
client.close()
Run Code Online (Sandbox Code Playgroud)

欢迎积极响应!

python python-3.x pymodbus3 pymodbus

2
推荐指数
1
解决办法
2546
查看次数

标签 统计

pymodbus3 ×3

python ×3

modbus ×2

pymodbus ×2

banana-pi ×1

python-3.x ×1

rs485 ×1