Проблемы со связью с устройствами Modbus через USB по rs485.
, поэтому я использую Python 3.5 и использую PyModbus, PySerial
, и мой код основан на последовательном примере PyModbus ипод windows он работает нормально и правильно связывается с устройством Modbus
, когда я запускаю свой код на Raspberry Pi3 под управлением Ubuntu mate 16.04.5 LTS, устройство не отвечает на мой код.Сначала я подумал, что адаптер не был установлен правильно, но после двойной проверки всего я установил gtkterm и настроил порт на / dev / ttyUSB0 9600 8-n-2 и попытался отправить шестнадцатеричные данные на Modbus, но ответа до сих пор не было.управление потоком имеет настройку RS485-HalfDuplex (RTS) и в дополнительных параметрах, если я устанавливаю задержку отправки на 20 миллисекунд и 10 мс RTS выключается
теперь, когда я пытаюсь отправить пакет шестнадцатеричного режима, устройство отвечаеткак и ожидалось.
Я подключил свой осциллограф, и из кода Python он передает некоторый небольшой пакет данных, случайным образом похожий после истечения времени ожидания при отправке данных.после небольшого разбора кажется, что некоторым устройствам USB to rs485 требуется RTS, чтобы переключить устройство в режим передачи, а затем отключить RTS, чтобы перевести его в режим приема.
Я также обнаружил, что pySerial имеет настройку RS485и попробовал их, а затем передаваемые пакеты были более регулярными и большими, но все же намного короче, чем gtkterm, и много помогло с синхронизацией времени, я немного вернулся к использованию исходного кода, но вставил
socket.setRTS(1)
time.sleep(0.02)
socket.write(request)
time,sleep(0.1)
socket.setRTS(0)
, кажется, дает мне самый длинный пакет, собранный на осциллографе, но длина пакета составляет 8,42 мс, тогда как длина пакета от gtkterm составляет 9,36 мс, и при взгляде между трассировкой обоих сообщений кажется, чтоконец пакета отсутствует.но даже если я увеличу время ожидания перед выключением сигнала RTS, это не имеет значения.