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).

Я пытался:

  1. Меняя адрес ведомой формы от 0 до 247, я всегда получаю одно и то же сообщение.
  2. Пробовал проверять другой адрес регистра и проигрывать с помощью функциональных кодов (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%, что действительно сработало, но я попробовал следующее:

  1. Установите программное обеспечение "modpoll" для опроса устройств Modbus, чтобы сравнить параметры в программном обеспечении GF_eXpress и устройстве и узнать, что происходит в фоновом режиме.

  2. Попытался использовать pyserial для последовательной связи с устройством - я думаю, что это сработало, вы должны сначала инициализировать порт, а затем связаться. В моем случае открытие последовательного порта и подключение к порту, а затем использование Modbus, работало как по волшебству.

  3. Я перезапустил программатор, мой Mac, дал основные параметры: скорость передачи данных - 9600, четность - нет, адрес - 1 и стоп-биты - 1, и он начал работать..

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

Контакты на задней панели устройства (15+17(Rx+Tx) и 16+18(Gnd+Gnd)) подключены к данным +(A) и данным -(B) кабеля преобразователя

Может быть, я ошибаюсь, но ИМХО, вы должны использовать контакты 16 и 15 для + и -

Контакты 18 и 17 описаны как:

Конфигурируемая последовательная линия изолирована до 1500 В пассивной токовой петли (макс. 1200 бод)

Может быть, вы не должны связывать их вместе с 15 и 16?

Другие вопросы по тегам