Pymodbus TCP Slave занят - PullRequest
       103

Pymodbus TCP Slave занят

0 голосов
/ 07 мая 2020

Я пытался обновить чужое программное обеспечение для работы на новой машине. Они построили контроллер Modbus с использованием библиотеки Pymodbus для работы с основным программным обеспечением.

Единственное различие между исходной рабочей машиной и этой новой состоит в том, что DAQ отличается. Я предполагал, что это будет означать просто изменение адресов, но, вероятно, из-за моего незнания о Pymodbus это было очень далеко от случая.

Основная проблема, с которой я сейчас сталкиваюсь, заключается в том, что я пытаюсь просто связаться с регистрами временного хранения, и единственный ответ, который я могу получить, это «(131, 3, Slave Device Busy)». Я действительно не уверен, что делать с этой информацией. Это происходит, как только она запускается, и ничто не может ее изменить.

Был ли у кого-нибудь еще опыт, когда устройство всегда выводит один и тот же код ошибки? DAQ, который я использую, представляет собой модуль Aspar IO Slim MOD-ETH. Мы будем очень благодарны за любой совет. Спасибо J

(я бы прикрепил сюда код, но он довольно длинный, и я не уверен, что фрагмент действительно поможет, но дайте мне знать, будет ли он полезен)

Коротко код теста

from pymodbus.client.sync import ModbusTcpClient as ModbusClient 
import logging 
logging.basicConfig() 
log = logging.getLogger() 
log.setLevel(logging.DEBUG) 

log.debug("Connecting to controller (IP=169.254.54.23, Port 502)")
client = ModbusClient('192.168.1.135', port=502)
59 #client = ModbusClient(method='ascii', port='/dev/pts/2', timeout=1) 
60 # client = ModbusClient(method='rtu', port='/dev/ttyp0', timeout=1) 



client.connect()

log.debug("Connected to controller (IP=192.168.1.135, Port 502)")
log.debug("Reading Sump Oil Temperature")

rr = client.read_holding_registers(1021, 1, unit=1)
log.debug("Read Sump Oil Temperature")


if rr.function_code > 0x80:
    print( "Error has occured!\n" + str( rr.function_code ) + "\n" + str( rr.exception_code ) )
else:
    print( rr.getRegister(0) )

client.close() 

Ответ:

DEBUG:root:Connecting to controller (IP=169.254.54.23, Port 502)
DEBUG:root:Connected to controller (IP=192.168.1.135, Port 502)
DEBUG:root:Reading Sump Oil Temperature
DEBUG:pymodbus.transaction:Current transaction state - IDLE
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x3 0x3 0xfd 0x0 0x1
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
DEBUG:pymodbus.transaction:RECV: 0x0 0x1 0x0 0x0 0x0 0x3 0x1 0x83 0x6
DEBUG:pymodbus.framer.socket_framer:Processing: 0x0 0x1 0x0 0x0 0x0 0x3 0x1 0x83 0x6
DEBUG:pymodbus.factory:Factory Response[131]
DEBUG:pymodbus.transaction:Adding transaction 1
DEBUG:pymodbus.transaction:Getting transaction 1
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
DEBUG:root:Read Sump Oil Temperature
Error has occured!
131
6
...