- MOXA Nport — взгляд изнутри
- Часть 1. Вводная
- Часть 2. Эмулируем MOXA
- Часть 3. Ищем и находим
- Часть 4. Считаем индусов*
- Распайки различных интерфейсных кабелей
- Общая распайка для принтеров Epson и Star
- RS-232(9-pinmale)длятерминаловIBMSurePos»>Распайка кабеля-переходника RJ45 -> RS-232 (9-pin male) для терминалов IBM SurePos
- Распайка кабеля-переходника для разъема COM4 (RJ45 10-pin) на терминалах Glaive/Gladius (старые модели)
- Распайка кабеля-переходника для разъема COM4 (RJ45 8-pin) на терминалах Glaive RT565
- Кабель-переходник для разъема COM-порта (RJ45 8-pin) на станциях RK6200
- Кабель соединения игрового контроллера со считывателем СРЧ-2М (Ангстрем)
- Кабель соединения игрового контроллера со считывателем СРЧ-125 (Em-Marine)
- Распайка интерфейсного кабеля для принтера Posiflex Aura 7000
- Распайка интерфейсного кабеля для принтера Samsung BIXOLON STP-131S
- Распайка кабеля для подключения весов CAS (серия AD)
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 в пределах одного ответа.
Размер пакета кодируется одним образом, а все числовые значения (год, месяц, день . ) другим. Отсюда можно сделать вывод, что обработку пользовательской части начиная с 75 00 04 00…… писал другой программист.
Подведем итог: Минимум 3 разных человека писали протокол обмена, 1 писал обработку пользовательской части данных и еще как минимум 1 писал обработчик WEB интерфейса. По моим подсчетам над проектом трудилось примерно 5 программистов.
А сколько насчитали вы?
*Под понятием «Индус» в данном случае подразумевается наемный работник, выполняющий свои обязанности за еду и ипотеку, способный кодить отсюда и до обеда не особо вникая в глобальные планы компании работодателя.
Источник
Распайки различных интерфейсных кабелей
В документе содержится информация по распайке интерфейсных кабелей для различного оборудования.
Важно! нумерация в разъеме RJ-45 указана на рисунке ниже:
Общая распайка для принтеров Epson и Star
DB9 RS232 (компьютер) | DB25 RS232 (принтер) |
2 | 2 |
3 | 3 |
5 | 7 |
6 | 20 |
DB9 RS232 (компьютер) | DB25 RS232 (принтер) |
2 | 2 |
3 | 3 |
4 | 6 |
6 | 4 |
5 | 7 |
8 | 20 |
RS-232(9-pinmale)длятерминаловIBMSurePos»>Распайка кабеля-переходника RJ45 -> RS-232 (9-pin male) для терминалов IBM SurePos
В POS-терминале IBM SurePos внешние COM-порты выполнены в виде разъемов RJ45. Как правило, в комплекте поставляется один кабель-переходник, который можно изготовить самостоятельно. Ниже в таблице указана схема распайки:
RJ-45 (8-pin) | RS-232 (9-pin Male) |
1 | 7 |
2 | 8 |
3 | 3 |
4 | 2 |
5 | 5 |
6 | 4 |
7 | 1 |
8 | 6 |
Распайка кабеля-переходника для разъема COM4 (RJ45 10-pin) на терминалах Glaive/Gladius (старые модели)
На POS-терминалах Glaive/Gladuis (также на остальных терминалах производтсва компании Firich) COM4 выполнен в виде 10-ти контактного разъема RJ45. Для подключения к COM4 различной перифирии необходимо изготовить переходник, схема которого указана ниже в таблице:
RJ-45 (10-pin) | RS-232 (9-Pin Male) |
2 | 8 |
4 | 5 |
5 | 4 |
6 | 6 |
7 | 3 |
8 | 2 |
Примечание: для изготовления переходника можно использовать стандартную витую пару, которая имеет восемь жил — в таком случае первый и последний пины в разъеме RJ45 (10-pin) остаются свободными.
Распайка кабеля-переходника для разъема COM4 (RJ45 8-pin) на терминалах Glaive RT565
На POS-терминале Glaive RT565 COM4 выполнен в виде стандартного 8-ми контактного разъема RJ45
RJ-45 (8-pin) | RS-232 (9-Pin «папа») |
1 | 9 |
2 | 8 |
3 | 5 |
4 | 7 |
5 | 4 |
6 | 6 |
7 | 3 |
8 | 2 |
Кабель-переходник для разъема COM-порта (RJ45 8-pin) на станциях RK6200
На станции RK6200 все COM-порты выполнены в виде стандартных 8-ми контактных разъемов RJ45 (всего на станции четыре свободных COM-порта)
Распайка кабеоя переходника на стандартный разъем DB9 простая — прямое соединение с 1-го по 8-й пин:
RJ-45 (8-pin) | RS-232 (9-Pin «папа») |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
Кабель соединения игрового контроллера со считывателем СРЧ-2М (Ангстрем)
Данный кабель используется для подключения бесконтактного считывателя СРЧ-2М (Ангстрем) к Ethernet-контроллеру UCS.14.03.02/UCS.08.01.04.04 с преобразователем TTL. Эта модель контроллера поддерживает одновременное подключение двух считывателей — один подлючается в разъем DB9, второй в разъем RJ-12. Ниже в таблицах приведены распайки соотв. кабелей
RJ-12
RJ-45 (СРЧ-2М) | RJ-12 (Ethernet-контроллер) |
1 | 5 |
2 | 3 |
3 | 6 |
4 | — |
5 | 1 |
6 | — |
7 | — |
8 | — |
DB9
RJ-45 (СРЧ-2М) | DB9 (Ethernet-контроллер) |
1 | 2 |
2 | 5 |
3 | 3 |
4 | — |
5 | 9 |
6 | 5 |
7 | — |
8 | — |
9 | — |
Кабель соединения игрового контроллера со считывателем СРЧ-125 (Em-Marine)
Данный кабель используется для подключения бесконтактного считывателя СРЧ-125 UCS.03.01.01.01M2 (Em-Marine) к игровому ethernet-контроллеру UCS.14.03.02/UCS.08.01.04.04 с преобразователем TTL. Эта модель контроллера поддерживает одновременное подключение двух считывателей — один подлючается в разъем DB9, второй в разъем RJ-12. Ниже в таблицах приведены распиновки соотв. разъемов и распайки соединительных кабелей.
Распиновка разъема СРЧ-125 | Распиновка разъема RJ-12 | Распиновка разъема DB9 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Пин | Назначение |
1 | TXD |
2 | GND |
3 | RXD |
4 | nc |
5 | +5V_input |
6 | GND |
7 | +5V_input |
8 | nc |
Пин | Назначение |
1 | +5V_internal |
2 | CTS |
3 | GND |
4 | DTR |
5 | RXD |
6 | TXD |
Пин | Назначение |
1 | DCD |
2 | RXD |
3 | TXD |
4 | DTR |
5 | GND |
6 | DSR |
7 | RTS |
8 | CTS |
Схема соотв. контактов для распайки кабеля
СРЧ-125 | RJ-12 (RS232 6 pin) | DB9 (RS232 9 pin) |
1 | 5 | 2 |
2 | 3 | 5 |
3 | 6 | 3 |
5 ⇒ +5V (внешний) | 1 ⇒ +5V (внешний) |
Распайка интерфейсного кабеля для принтера Posiflex Aura 7000
9-pin RS-232 (Мат. плата) | 9-pin RS-232 (принтер) | 25-pin RS-232 (принтер) |
3 | 3 | 2 |
5 | 5 | 7 |
6 | 6 | 6 |
7 и 8 замкнуть | 4 и 5 замкнуть |
Важно! На стороне принтера замкнуть контакты 7 и 8 (для разъема 9-pin) , и контакты 4 и 5 (для разъема 25-pin).
Распайка интерфейсного кабеля для принтера Samsung BIXOLON STP-131S
DB25 — принтер («папа»)
DB9 -компьютер («мама»)
1
1
2
2
3
3
6
4
7
5
20
6
6
7
20
8
9
Распайка кабеля для подключения весов CAS (серия AD)
Источник