MOXA Nport — взгляд изнутри
Серверы сбора данных по последовательным портам MOXA Nport и им подобные — в настоящее время являются стандартом де факто в области построения систем передающих или принимающих данные через интерфейсы RS-232,RS-485 и RS-422.
Счетчики электроэнергии, управляемые вентили и задвижки, расходомеры, датчики вибрации, устройства телемеханики.
Все, что может генерировать данные или управляться удаленно и имеет интерфейс RS-232, RS-485 и RS-422 — работает через данные преобразователи.
Общий смысл их использования — обычно заключается в следующем: пробросить интерфейсы RS-232,RS-485 и RS-422 через существующую локальную сеть, подключить устройство или прибор имеющий один из последовательных интерфейсов к ПК (серверу, SCADA) через Ethernet, подключится к прибору имеющему последовательный интерфейс через Internet для удаленного управления и т.п.
Цены на данные преобразователи не сильно высоки, младшие модели можно взять за 100-200$. Но учитывая что на любом автоматизированном производстве таких устройств может быть установлено сотни а то и тысячи — вырисовывается довольно лакомый кусочек для отечественных «импортозамещальщиков».
Им то я сегодня и попытаюсь помочь.
Во первых — разберемся в теории, как оно устроено внутри.
Во вторых — вычленим минимальный функционал для запуска работы в режиме Real Com Mode (то есть по сути для проброса виртуального COM порта до устройства через Ethernet).
В третьих — ради интереса разберем протокол поиска и конфигурирования устройства через утилиту NPort Administration Suite. Получим полное понимание, как создать pin-to-pin аналог железки, которую можно воткнуть вместо существующей MOXA Nport при этом получив полную поддержку со стороны родного ПО и драйвера.
Ну и на последок — попробуем посчитать, сколько индусов писало код прошивки MOXA.
Часть 1. Вводная
Итак, у нас на столе подопытный (на самом деле их было несколько, поэтому не удивляйтесь если увидите в статье различные идентификаторы моделей и различные MAC адреса)
На нем есть порт Ethernet и два порта RS-422/RS-485 — это физически.
А в программном плане — на устройстве открыты:
UDP порт 4800 — он отвечает за ловлю пакетов поиска устройства и отдает данные о самом устройстве в утилиту конфигурирования.
TCP порт 4900 — на него приходят команды конфигурирования устройства. Через этот порт настраивается время устройства, имя, IP адрес, режим работы, скорости и настройки портов и прочие базовые параметры, которые можно настроить через основной интерфейс утилиты NPort Administration Suite:
TCP порт 80 — отвечает за работу WEB интерфейса
TCP порты 966, 967, (и 968, 969 у 4х портовых устройств) — это порты управления передачей. По ним бегают команды открытия/закрытия соответствующего COM порта, установка скорости порта, проталкивание данных, мониторинг заполненности буфера передачи / приема и тд. Порт 966 отвечает за работу первого порта соответственно.
TCP порты (по умолчанию) 950, 951, (и 952, 953 у 4х портовых устройств) — это порты непосредственной передачи данных. То есть то, что непосредственно должно оказаться на RS-232/485/422 порте у устройства — передается в данные порт. Только данные, управление потоком в данном порту идет по 966, 967, 968, 969 портам соответственно.
Надеюсь общая картинка понимания работы устройства в голове сложилась. Давайте перейдем к следующей части:
Часть 2. Эмулируем MOXA
Наверняка многим уже стало понятно, что для того чтобы прикинутся MOXA Nport в минимальной конфигурации — необходимо на своем железе поднять TCP сервер на 2х портах: 966 для управления передачей и 950 для непосредственно передачи данных. Естественно придется корректно отвечать и обрабатывать запросы драйвера по 966 порту, но как показал анализ средствами wireshark — запросов не так много и они простейшие.
Дабы не перегружать текст статьи выкладками с описанием запросов и ответов — подготовил и выложил отдельно в виде pdf файла описание всех разобранных запросов, ответов и передаваемых параметров.
Скачать: Описание разбора протокола MOXA.pdf
То есть данный набор знаний позволяет реализовать устройство, которое может работать в паре с родным драйвером и передавать данные как MOXA. Половина работы выполнена, но есть один момент — как поменять конфигурацию? Было бы здорово использовать для этих целей родную утилиту NPort Administration Suite.
Часть 3. Ищем и находим
В первых двух частях было описано что нужно сделать, но ни слова не было о том, как получить данные для реализации протоколов.
В этой части копнем немного глубже и посмотрим, как же проводился анализ самого обмена.
Мы знаем, что на устройстве открыт UDP порт 4800, давайте подключим устройство, запустим NPort Administration Suite, Wireshark и посмотрим что происходит при поиске устройств родной утилитой.
Смотрим отправленные пакеты:
Видим, что NPort Administration Suite отправляет бродкаст на адрес 255.255.255.255 то есть надеется, что пакет разлетится по всей сети.
В payload пакета содержатся данные:
Данный запрос отправляется несколько раз, видимо в надежде что хотя бы один из них достигнет цели.
На данный запрос отзываются все MOXы.
Конкретно наша ответила:
Вроде все элементарно просто, смущает только значение 12 03 00 80 32 03, отвечающее за интерпретацию конкретной модели устройства.
Но, так как данное значение сверяется с каким то эталонным справочным — значит оно должно где то хранится.
Немного изучив директорию с ПО — находим, что в NPort Administrator Suite v1.22 данные значения хранятся в файле C:\Program Files\NPortAdminSuite\bin\dsci.dll
Посидев с Wireshark и устройством несколько дней — получаем полный лог обмена и понимание какие коды функций что получают в ответ. Для удобства восприятия — все найденное описано в том же pdf файле, ссылка на который указана в статье ранее.
Для полноты понимания картины — лишь напомню, что по UDP 4800 идет получение первичных сведений о устройстве, все параметры которые требуют настройки и установки — настраиваются посредством запросов на TCP порт 4900.
Правильно обработав все поступающие запросы на 4800 и 4900 порты — мы сможем полноценно прикинуться устройством, так что даже родное ПО не заметит подвох.
Часть 4. Считаем индусов*
В ходе анализа протокола — меня не покидало ощущение, что различные куски протокола обмена писали разные люди, слишком отличаются значения функций и их интерпретации.
UDP порт 4800 коды функций начинаются с:
TCP порт 4900 коды функций начинаются с:
TCP порты 966, 967, 968, 969 коды функций начинаются с:
То есть используется уже одно байтовый идентификатор функции, а не двухбайтовый как ранее.
Тут кстати вылез забавный момент. По портам 966, 967, 968, 969 ответ на установку параметров всегда состоит из 3х байт.
Первый — это номер функции, а остальные 2 это 4f 4b или есть посмотреть в таблицу ASCII — «O» «K»
Ну OK с ним, идем далее.
Вторая замеченная особенность — мешанина Big и Little Endian в пределах одного ответа.
Подведем итог: Минимум 3 разных человека писали протокол обмена, 1 писал обработку пользовательской части данных и еще как минимум 1 писал обработчик WEB интерфейса. По моим подсчетам над проектом трудилось примерно 5 программистов.
А сколько насчитали вы?
*Под понятием «Индус» в данном случае подразумевается наемный работник, выполняющий свои обязанности за еду и ипотеку, способный кодить отсюда и до обеда не особо вникая в глобальные планы компании работодателя.
Трансляция RS-232 и RS-485 интерфейсов по Ethernet при помощи модемов «NPORT 5130» и «NPORT 5150» компании «MOXA Technologies Co»
Продолжение тестирования преобразователей фирмы MOXA. В данном тестировании использовались преобразователи с увеличенным быстродействием NPort 5130 и NPort 5150.
Возможна работа системы «Орион» по ЛВС ethernet с использованием устройств передачи данных NPort 5130 и 5150 фирмы Моха Technologies Co (далее NPort). В качестве опросчика системы были использованы С2000М v.2.03 и АРМ «Орион» выпуск 7.5.1.
Конфигурация NPORT’ов (режим работы, настройки серийного порта, IP адрес) осуществляется по ЛВС с помощью специальной программы «NPort Administrator», входящей в состав ПО.
Для осуществления передачи сообщений по ЛВС использовалось следующее оборудование:
Трансляция с использованием MOXA NPort 5130
| Характеристики NPort5130 | |
| Системные | |
| Процессор | 16-бит |
| Память | 512КБ |
| Сетевые | |
| Ethernet | 100Base-TX (10/100 Mbps) |
| Серийный порт | |
| Интерфейс | RS-485 |
| Разъем | male DB9 |
| Скорость | от 50 бит/с до 921,6 Кбит/с |
| Режимы работы | виртуальный COM порт TCP сервер TCP клиент передача дейтограмм UDP точка-точка |
| Фирма | Моха Technologies Co.,(Тайвань) |
* Примечание: соответствие выводов прибора с принятым обозначением приведены в таблице.
| обозначение выводов на преобразователе | обозначение вывода на приборах НВП «Болид» |
| D + | A |
| D – | B |
| GND | 0В |
ВАРИАНТЫ ПОДКЛЮЧЕНИЙ NPort 5130
1. Виртуальный COM порт
Компьютер с АРМ «Орион»/АРМ «Орион Про» и NPort 5130 подключаются к локальной сети. На выходе NPort 5130 RS-485 далее к приборам.
Для работы данной схемы необходимо на внутренней плате преобразователя MOXA Nport 5130 выставить джампер JP3.
Для конфигурирования NPort 5130 необходимо подключить его к ПК и запустить программу NPort Administrator.
После чего нажать на кнопку «Search», в результате справа будут отображены все найденные приборы.
Примечание: заводской IP адрес приборов 192.168.127.254, если прибор не находится в программе конфигурирования, то необходимо изменить сетевой адрес ПК на 192.168.127.XXX.
Далее необходимо выбрать конфигурируемый NPort и нажать кнопку «Configure», в результате будет считана текущая конфигурация NPort 5130:
После чего необходимо перейти на вкладку «Network» и настроить IP адрес. Для этого необходимо отметить флаг «Modify» и ввести значение адреса в поле «IP Address».
Далее необходимо перейти на вкладку «Serial», выбрать Nport из списка, отметить опцию «Modify» и нажать на кнопку «Settings». В появившемся окне необходимо задать следующие параметры интерфейса RS-485:
После настройки интерфейса RS-485 необходимо нажать на кнопку «OK» и перейти на вкладку «Operating Mode», выбрать Nport из списка, отметить опцию «Modify» и нажать на кнопку «Settings». В появившемся окне для параметра «Operating Mode» (режим работы) необходимо выставить «Real COM mode».
Далее необходимо нажать кнопку «OK» в подтверждение настроек режима работы. После чего записать конфигурацию в Nport 5130, нажав кнопку «OK» окна Cofiguration.
После чего выбрать в списке «Function» параметр «COM Mapping» и нажать на кнопку «Add». В появившемся окне необходимо выбрать Nport 5130 и нажать кнопку «OK». В результате в списке «COM Mapping» появится новая запись с информацией о подключенном устройстве:
Далее необходимо выбрать запись из списка и нажать на кнопку «Configure», в появившемся окне необходимо настроить следующие параметры.
На вкладке «Basic Settings»:
COM Number – номер виртуального COM порта.
На вкладке «Advanced Settings»:
Tx mode – Hi-Performance;
Fast Flush – включен.
На вкладке «Serial Parameters»:
Flow Control – None;
После чего необходимо нажать кнопку «OK» диалогового окна «COM Port Settings» и кнопку «Apply» программы конфигурировании.
Примечание: при данной схеме подключения возможно использовать только одно устройство Nport для каждого номера виртуального COM – порта.
Для АРМ «Орион»/АРМ «Орион Про» необходимо задать используемый номер COM порта в Администраторе базы данных.
При данных настройках качество обменов 100%, скорость составляет 27-28 обменов в секунду.
При использовании сильно загруженной сети Ethernet возможно ухудшение связи между ПК и приборами. Возможное решение этой проблемы – увеличение параметра «Таймаут ожидания запроса» до 70 мсек в программе Settings (http://bolid.ru/production/orion/po-orion/rssettings.html) на вкладках Общие RS и PORT[n], где n – номер используемого COM-порта.
2. Сетевой контроллер АРМ «Орион»/АРМ «Орион Про» подключается к пульту C2000М, один луч RS-485 к приборам, а другой к NPort 5130, далее в Ethernet, потом NPort 5130 на выходе RS-485 далее приборы.
Для работы данной схемы необходимо на внутренней плате преобразователя MOXA Nport 5130 выставить джампер JP3.
Конфигурирование IP адреса и параметров интерфейса RS-485 для всех используемых NPort 5130 описаны в предыдущем варианте подключения. После чего необходимо настроить режим работы (на вкладке «Operating Mode»).
Настройки Nport 5130, подключенного к пульту:
Примечание: заданный адрес 192.168.11.255 – широковещательный адрес для сети 192.168.11. Если используется другая адресация в сети, то необходимо ввести адрес используемой Ethernet сети и в качестве узла задать 255. Если количество удаленных точек не более 2-3, для локализации трафика возможно указывать IP-адреса удаленных Nport’ов.
Настройки Nport 5130, подключенного к приборам:
Примечание: заданный адрес 192.168.11.1 –IP адрес Nport 5130, подключенного к пульту С2000. Если к пульту подключен Nport 5130 с другим адресом, то необходимо ввести используемый IP адрес.
В зависимости от загруженности сети и ее протяженности возможны два варианта настроек для NPort 5130 и АРМ «Орион»/АРМ «Орион Про» (или пульта С2000М):
| Настройки | большая загрузка сети | малая загрузка сети |













С самого основания данного ресурса мы не перестаем придерживаться мнения, что практика всегда должна опираться на необходимый теоретический минимум, давая в своих статьях порой обширные теоретические отступления. Без теории практика превращается в подобие шаманских камланий с бубном, когда вроде сделал все тоже самое, но ничего не работает. В этом плане технология FastTrack в Mikrotik, несмотря на всю свою простоту, держит пальму первенства по количеству возникающих с ней проблем, которые, в большинстве своем, возникают именно от незнания и непонимания работы этой технологии.
А вот дальше уже становится интереснее. Туннельные соединения и L2TP поддерживают Fast Path, но это лишает нас возможности использовать IPsec, поэтому от Fast Path для данных видов соединений придется отказаться. Тем более что система не даст нам создать интерфейс, сочетающий Fast Path и IPsec.
Правда для L2TP-соединений вы можете одновременно установить обе опции, но при включённом IPsec Fast Path будет игнорироваться. Тем не менее мы категорически не рекомендуем использовать такие неоднозначные варианты настройки, потому как при обновлении RouterOS поведение системы может измениться, что способно привести к неожиданным и непредсказуемым результатам.


