Установка адреса устройства RS485 в python под linux

Я пытаюсь подключиться к существующей сети устройств, обменивающихся данными через RS485 (ЧМИ + ПЛК, протокол связи — собственный протокол Fatek). У меня нет проблем с подключением напрямую к ПЛК (я могу читать и записывать регистры), но я должен оставить соединение HMI‹>PLC. При прямом подключении к линии между ЧМИ и ПЛК (через адаптер FTDI USB‹>RS485) я не могу читать или записывать регистры из ПЛК (не получаю должных ответов).

Насколько я понял, можно подключить несколько устройств к одной линии RS485 при условии, что у них установлены их адреса. И вот проблема: я не вижу, где прописать этот адрес. Включен ли он в каждый отправленный «кадр»? Установлен ли он где-то в драйвере адаптера USB‹>RS485? Это жестко прописано в адаптере?

Заранее спасибо,

Михал


person mpnowacki    schedule 07.06.2020    source источник
comment
Используете ли вы ioctls rs485, описанные в документе ядра Linux? ? Или адаптер ftdi предоставляет вам какой-то другой API?   -  person meuh    schedule 08.06.2020


Ответы (3)


Обычно при последовательной связи 1:1 или 1:N может быть только один ведущий (в вашем случае HMI является ведущим) и один или несколько ведомых, которые отвечают на запросы от ведущего, и ведущий всегда должен ждать получить ответ перед отправкой нового запроса.

Если вы подключаете второй мастер, вы создаете коллизии в сети, RS-485 не может управлять этими коллизиями.

В последовательной сети может существовать только один мастер.

Если вы хотите преодолеть эти ограничения, подумайте о замене этой сети на Ethernet и TCP/IP.

person Lluis Felisart    schedule 09.06.2020
comment
Хорошо, спасибо, теперь я вижу, что невозможно делать то, что я хочу :) - person mpnowacki; 09.06.2020

Как указано в статье Википедии ниже, RS485 — это электрическая спецификация без программного обеспечения или протокола по умолчанию.
Механизм для обработки адреса устройства должен быть создан вами или путем выбора протокола, имеющего такую ​​функцию, и его применения.

RS-485 — Википедия

RS-485 определяет только электрические характеристики генератора и приемника: физический уровень. Он не определяет и не рекомендует какой-либо протокол связи; Другие стандарты определяют протоколы для связи по каналу RS-485. В предисловии к стандарту содержится ссылка на Бюллетень телекоммуникационных систем TSB-89, который содержит рекомендации по применению, включая скорость передачи данных в зависимости от длины кабеля, длины шлейфа и конфигураций.

Например, часто ли используется Modbus?
Modbus - Википедия

Modbus — это протокол передачи данных, изначально опубликованный компанией Modicon (теперь Schneider Electric) в 1979 году для использования с ее программируемыми логическими контроллерами (ПЛК). Modbus стал де-факто стандартным протоколом связи и в настоящее время является общедоступным средством подключения промышленных электронных устройств. Modbus популярен в промышленных условиях, потому что он открыто публикуется и не требует авторских отчислений.

Есть также несколько пакетов Python.
minimalmodbus 1.0.2
pymodbus 2.3.0

Как установить адрес устройства необходимо будет сделать в соответствии со спецификациями пакета, который будет принят.


Дополнительно:

Кстати, если вы используете собственный протокол производителя для устройства ПЛК, вполне вероятно, что вы будете использовать такой многоабонентский протокол для этого устройства и протокола. Кажется, что первый способ сделать это — обратиться в службу поддержки производителя.

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

HMI_Support & PLC_Support
HMI_Products & PLC_Products

person kunif    schedule 08.06.2020
comment
Спасибо, изменение протокола связи на данный момент не вариант. Насколько я знаю, эти ПЛК, подключенные к этим HMI, могут выполнять многоточечную связь, но я не вижу подробностей того, как это реализовано. - person mpnowacki; 08.06.2020

Похоже, что ваша система использует «коммуникационный протокол Fatek», описанный в Приложении 1 руководства пользователя FB. (Скачать здесь)

Этот протокол похож на многие подобные протоколы, типичные для промышленных контроллеров ПЛК. Однако это немного усложняется количеством типов сообщений. Не заглядывая слишком глубоко, кажется практичным реализовать логику за несколько дней. Или, вероятно, где-то есть реализация с открытым исходным кодом (хотя я не искал).

person wallyk    schedule 08.06.2020
comment
Я знаю этот документ, я использовал его для осуществления связи. Как указано в вопросе, я могу читать и записывать регистры. Я ничего не вижу об адресе отправителя в спецификации этого протокола, но обычно RS485 описывается как обладающий такой функциональностью, может быть, он находится на другом уровне, чем передача данных, описанная в указанном документе? - person mpnowacki; 08.06.2020
comment
@mpnowacki: Все общение происходит между мастером и каждым ведомым. Таким образом, мастер никогда не должен отправлять свой собственный адрес, только адрес подчиненного устройства. Каждое сообщение подчиненного устройства содержит свой идентификатор. Это описано внизу страницы 1-1. В кадре данных идентификатор ведомого устройства — это байты 2 и 3, где первый байт — это STX (^A). Так понятнее? - person wallyk; 08.06.2020
comment
да, теперь я вижу, что невозможно иметь двух мастеров на одной линии RS485 - person mpnowacki; 09.06.2020