Инициализация устройства с использованием минимальной шины по RS-232
Я ищу несколько советов по использованию библиотеки python (2.7) "minimalmodbus" (версия 0.7) для связи с тепловой камерой Test Equity Modela 115a-F4T.
Я довольно плохо знаком с использованием python для программирования аппаратного обеспечения, поэтому я не совсем уверен, что в моем подходе отсутствуют некоторые основные команды инициализации. Вот мой код:
instrument = minimalmodbus.Instrument('/dev/ttyUSB1',1)
print instrument
print minimalmodbus.BAUDRATE
minimalmodbus.BAUDRATE = 9600
print minimalmodbus.BAUDRATE
print minimalmodbus.__version__
instrument.read_register(0,1)
Вот мой вывод:
minimalmodbus.Instrument<id=0x7fb5fd2136c8, address=1, mode=rtu,
close_port_after_each_call=False, precalculate_read_size=True,
debug=False, serial=Serial<id=0x7fb5fc71a890, open=True>
(port='/dev/ttyUSB1', baudrate=19200, bytesize=8, parity='N',
stopbits=1, timeout=0.05, xonxoff=False, rtscts=False, dsrdtr=False)>
19200
9600
0.7
Traceback (most recent call last):
File "/usr/local/google/home/mimartin/Documents/test-equity/model-
115a.py", line 13, in <module>
instrument.read_register(0,1)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line
258, in read_register
return self._genericCommand(functioncode, registeraddress,
numberOfDecimals=numberOfDecimals, signed=signed)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line
697, in _genericCommand
payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line
795, in _performCommand
response = self._communicate(request, number_of_bytes_to_read)
File "/usr/local/lib/python2.7/dist-packages/minimalmodbus.py", line
930, in _communicate
raise IOError('No communication with the instrument (no answer)')
IOError: No communication with the instrument (no answer)*
Термальная камера включена. И я подключен к нему через последовательный кабель USB. Я также поместил нуль-модемный адаптер в последовательный конец (на камере) кабеля, как указано в руководстве по эксплуатации камеры. Я предположил, что моя первая строка кода - это то, что инициализирует камеру для контроля. Тем не менее, мое сообщение об ошибке указывает на обратное.
Нужна помощь или руководство здесь. Спасибо.
2 ответа
Minimalmodbus отлично работает через RS-232. Watlow F4 и F4T используют только TX, RX и GND для связи с RS-232. Камеры TestEquity используют контакты RS-232 для обоих контроллеров (оба могут поддерживать 232 или 485).
F4 использует только 16-битные целые числа. F4T в режиме карты 1 использует числа с плавающей запятой, 32-битные и 16-битные целые числа и "строковый" тип. Поэтому вам нужны разные функции для чтения этих значений. Режим карты 2 или 3 - это обратная совместимость с F4 для общих регистров F4.
Свяжитесь с TestEquity по ссылке ниже, и они предоставят вам образцы Python. www.testequity.com/chambers-technical-support
На F4T см. Настройки Modbus-RTU в Меню -> Настройки -> Сеть -> Modbus.
при условии 9600, нет, карта данных 1
instrument = open_port('/dev / ttyUSB1', 1) # порт, адрес Modbus
instrument.serial.baudrate = 9600
instrument.serial.timeout = 0,1
value = instrument.read_register (14092,0) # порядок слов modbus-rtu в режиме карты 1
значение печати
значение должно быть 1330 (High Low) или 1331 (Low High)
Я устраняю очень похожую проблему, и мне кажется, что для RS-485 был создан minimalmodbus, который не использует выводы состояния DTR и DSR (из вашей строки отладки dsrdtr=False). Мое аппаратное соединение работает с помощью бесплатной утилиты Simplymodbus, поэтому я знаю, что она подключена правильно. Используемый мной код Python minimalmodbus, очень похожий на ваш, выглядит идентично запросу simplemodbus на выводе приема ведомого устройства при просмотре осциллографа. Однако контакты DTR и DSR ведут себя по-разному, simplemodbus получает ответ, а код python minimalmodbus - нет.
Я не нашел способа включить dsrdtr в коде minimalmodbus или с помощью утилиты преобразователя RS-232 в USB, но, похоже, в библиотеке pyserial есть параметры. Один из вариантов, который я буду изучать, - это переключение на соединение RS-485, которое не использует эти выводы состояния.