Gefran 800P и minimalmodbus (Mac): "ValueError: слишком короткий ответ Modbus RTU (минимальная длина 4 байта). Ответ: '\x00' "
Я новичок в Python (FYI) и пытаюсь общаться с программистом / контроллером Gefran 800P с использованием библиотеки minimalmodbus (Python + Mac). Я использую кабель последовательного преобразователя USB в RS485 ( http://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_USB_RS485_CABLES.pdf) для связи с устройством Gefran. Контакты на задней панели устройства (15+17(Rx+Tx) и 16+18(Gnd+Gnd)) подключены к Data +(A) и Data -(B) кабеля преобразователя, соответственно (RS485-2 проводной подключение). Я не знаю адрес подчиненного устройства для этого устройства, и там нет упоминания об адресе в руководстве ( http://www.primusthai.com/marketing/Gefran%20800%20(Controller).pdf).
Я пытался:
- Меняя адрес ведомой формы от 0 до 247, я всегда получаю одно и то же сообщение.
- Пробовал проверять другой адрес регистра и проигрывать с помощью функциональных кодов (3 и 4), проигрывал с настройками программатора, проверяя, чтобы оба параметра в коде и устройстве были одинаковыми. Ничего не работает! Может быть, я что-то упустил. Ждем вашей помощи. Я действительно застрял в этой точке больше недели!
Ниже приведен мой код, и при запуске он выдает ошибку "ValueError: Слишком короткий ответ Modbus RTU (минимальная длина 4 байта). Ответ: '\x00' ".
import minimalmodbus
import serial
import sys
import time
import sh
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = False
print "scanning for addresses..."
for i in range(1,247):
programmer = minimalmodbus.Instrument('/dev/tty.usbserial-FT0C9E5S', i, 'rtu')
print "address is", i
programmer.mode = minimalmodbus.MODE_RTU
programmer.serial.timeout = 8
programmer.handle_local_echo = False
# If RS-485 adapter has local echo enabled
programmer.serial.bytesize = 8
programmer.precalculate_read_size = True
programmer.serial.baudrate = 9600
programmer.serial.parity = minimalmodbus.serial.PARITY_NONE
programmer.debug = True
print "all parameters set... now reading"
print programmer
try:
setpoint = programmer.read_register(79,1,4)
print setpoint
print "This is the address", i
except sh.ErrorReturnCode_1:
print "no response"
2 ответа
Хорошо, Яцек, спасибо за все подсказки... Мне, наконец, удалось установить связь устройства с помощью Gefran Cable. Я не уверен на 100%, что действительно сработало, но я попробовал следующее:
Установите программное обеспечение "modpoll" для опроса устройств Modbus, чтобы сравнить параметры в программном обеспечении GF_eXpress и устройстве и узнать, что происходит в фоновом режиме.
Попытался использовать pyserial для последовательной связи с устройством - я думаю, что это сработало, вы должны сначала инициализировать порт, а затем связаться. В моем случае открытие последовательного порта и подключение к порту, а затем использование Modbus, работало как по волшебству.
Я перезапустил программатор, мой Mac, дал основные параметры: скорость передачи данных - 9600, четность - нет, адрес - 1 и стоп-биты - 1, и он начал работать..
Я предполагаю, что все это могло бы помочь плюс, если ничего не работает, всегда хорошо перезапустить каждое используемое вами устройство и сбросить параметры и снова установить для него базовые / стандартные значения.
Контакты на задней панели устройства (15+17(Rx+Tx) и 16+18(Gnd+Gnd)) подключены к данным +(A) и данным -(B) кабеля преобразователя
Может быть, я ошибаюсь, но ИМХО, вы должны использовать контакты 16 и 15 для + и -
Контакты 18 и 17 описаны как:
Конфигурируемая последовательная линия изолирована до 1500 В пассивной токовой петли (макс. 1200 бод)
Может быть, вы не должны связывать их вместе с 15 и 16?