Ошибка MinimalModbus IO

Я пытаюсь связаться с настраиваемой платой через соединение Modbus RTU-полудуплекс RS-485 с моей машины с Windows (Windows 10). Я использую python MinimalModbus API и установил все зависимые библиотеки. У меня также есть подходящий адаптер RS-422/485. Я знаю, что скорость передачи данных, COM-порт, адрес подчиненного устройства и бит четности верны. Я также знаю, что мой код выводит битовый поток из трассировки O-области. По какой-то причине правление вообще не отвечает. Любая помощь приветствуется.

import minimalmodbus
import serial 

#minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = True 
minimalmodbus.PARITY = serial.PARITY_EVEN
#minimalmodbus.handle_local_echo=True
minimalmodbus.BAUDRATE = 57600
minimalmodbus.TIMEOUT = .01
instrument = minimalmodbus.Instrument('COM4',0)
instrument.debug = True
print(instrument.read_register(11,1))

MinimalModbus debug mode. Writing to instrument (expecting 7 bytes back): '\x00\x03\x00\x0b\x00\x01ô\x19' (00 03 00 0B 00 01 F4 19)
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1478637162864.7 ms, minimum silent period: 0.67 ms.
MinimalModbus debug mode. Response from instrument: '' () (0 bytes), roundtrip time: 10.9 ms. Timeout setting: 10.0 ms.

Traceback (most recent call last):
  File "RS485.py", line 11, in <module>
    print(instrument.read_register(11,1))
  File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 258, in read_register
    return self._genericCommand(functioncode, registeraddress, numberOfDecimals=numberOfDecimals, signed=signed)
  File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 697, in _genericCommand
    payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
  File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 795, in _performCommand
    response = self._communicate(request, number_of_bytes_to_read)
  File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 930, in _communicate
    raise IOError('No communication with the instrument (no answer)')
OSError: No communication with the instrument (no answer)

person CompMan    schedule 08.11.2016    source источник
comment
Поскольку плата не отвечает, а ваш код отправляет данные (вы точно изменили формат?), Было бы неплохо отладить целевое устройство, а не ПК.   -  person too honest for this site    schedule 09.11.2016
comment
Сейчас я проверяю битовый поток на моем осциллографе. Я знаю, что целевому устройству требуется дополнительный стоп-старт и бит четности для каждого PDU, но мне сложно понять, как именно должен выглядеть битовый поток. Возможно ли, что задержка преобразователя может изменить скорость передачи?   -  person CompMan    schedule 09.11.2016
comment
Вы знаете, ожидают ли все устройства Modbus именно этих дополнительных битов? или они специфичны для этой платы? Кроме того, когда вы говорите «Отладка целевого устройства», вы имеете в виду программное обеспечение? например, использовать GDB для пошагового выполнения прошивки, когда я пытаюсь с ней общаться?   -  person CompMan    schedule 09.11.2016
comment
Я понятия не имею. Никогда не работал с ModBus. Как насчет того, чтобы прочитать спецификацию, проверить, находятся ли синхронизация и формы сигналов в установленных пределах? Пусть отдельно ваш вопрос не соответствует советам, данным в Как спросить, это может быть даже не проблема программирования. По крайней мере, вы не исключили другие причины. Обратите внимание, что мы не являемся сайтом для отладки / консультирования и не являемся сайтом для обсуждения.   -  person too honest for this site    schedule 09.11.2016


Ответы (2)


Проблема в строке:

instrument = minimalmodbus.Instrument('COM4',0)

Вы даете minimalmodbus указание обратиться к прибору с идентификатором Modbus, равным нулю. Это недопустимый идентификатор.

Проверьте настройки вашего инструмента и исправьте идентификатор в вашем коде.

person egelados    schedule 01.01.2017

Попробуйте установить идентификатор ведомого устройства с instrument = minimalmodbus.Instrument('COM4',1), где 1 - идентификатор ведомого устройства для вашего пользовательского инструмента.

И попробуйте увеличить параметр тайм-аута этой строкой

minimalmodbus.TIMEOUT = 1 где 1 равно 1000 миллисекунд.

person Fernando Magro    schedule 23.07.2017