Проблема с чтением регистров из Carlo Gavazzi EM24-DIN.AV5 с использованием Python / ModBUS - PullRequest
0 голосов
/ 03 августа 2020

Уважаемые,

У меня есть измеритель энергии Carlo Gavazzi EM24-DIN.AV5, и я подключаю его к Raspberry PI с помощью преобразователя USB / RS485 (zk-u485). Порты A / B / GND USB-RS485 соединены с портами 41/42/43 устройства.

Устройство оснащено джойстиком для настройки скорости последовательного порта и адреса ModBus (в моем случае это 9600 и 3).

Я использовал этот образец кода для чтения некоторых регистров, но всегда получал Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received) D

#!/usr/bin/env python
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)

from pymodbus.client.sync import ModbusSerialClient as ModbusClient

client = ModbusClient(method='rtu', port='/dev/ttyUSB0', timeout=3, stopbits = 1, bytesize = 8,  parity='N', baudrate= 9600)
val = client.connect()
if not val:
   print("******** Connection error *************")

while True:
#    rr = client.read_input_registers(address=37, count=2, unit=3);
    rr = client.read_input_registers(2,2,unit=3)
    print( rr);

Просмотр полного журнала отладки:

DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:SEND: 0x3 0x4 0x0 0x2 0x0 0x2 0xd1 0xe9
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Transaction failed. (Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received))
DEBUG:pymodbus.framer.rtu_framer:Frame - [] not ready
DEBUG:pymodbus.transaction:Getting transaction 3
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received)
DEBUG:pymodbus.transaction:Current transaction state - TRANSACTION_COMPLETE
DEBUG:pymodbus.transaction:Running transaction 2
DEBUG:pymodbus.transaction:SEND: 0x3 0x4 0x0 0x2 0x0 0x2 0xd1 0xe9
DEBUG:pymodbus.framer.rtu_framer:Changing state to IDLE - Last Frame End - None, Current Time stamp - 1596433492.94
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Incomplete message received, Expected 9 bytes Recieved 0 bytes !!!!
DEBUG:pymodbus.transaction:Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
DEBUG:pymodbus.transaction:RECV:
DEBUG:pymodbus.framer.rtu_framer:Frame - [] not ready
DEBUG:pymodbus.transaction:Getting transaction 3
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
Modbus Error: [Input/Output] No Response received from the remote unit/Unable to decode response
DEBUG:pymodbus.transaction:Current transaction state - TRANSACTION_COMPLETE
DEBUG:pymodbus.transaction:Running transaction 3
DEBUG:pymodbus.transaction:SEND: 0x3 0x4 0x0 0x2 0x0 0x2 0xd1 0xe9
DEBUG:pymodbus.framer.rtu_framer:Changing state to IDLE - Last Frame End - 1596433495.95, Current Time stamp - 1596433495.95
DEBUG:pymodbus.framer.rtu_framer:Waiting for 3.5 char before next send - 4.01 ms
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'

Согласно документации протокола ModBus: https://www.ccontrols.com/support/dp/CarloGavazziEM24.pdf Адреса ModBus

Ваша помощь очень ценится.

...