Описание протокола работы
используемого при подключении к ZET 7176
Структура протокола
Параметры подключения
Для подключения к преобразователю интерфейса ZET 7176 CAN↔Ethrnet клиент должен знать его сетевые параметры: адрес IPv4 и номер порта TCP.
Эти параметры настраиваются в устройстве.
По умолчанию в устройстве выставляются следующие сетевые параметры:
- Адрес IPv4: 192.168.1.76.
- Номер порта: 7176.
Получение параметров подключения
Устройство периодически рассылает информацию о своих сетевых параметрах с помощью групповых рассылок по протоколу UDP. Это бывает необходимо в случаях, когда параметры подключения к устройства заранее клиенту неизвестны.
Размер пакета — 28 или более байтов. Формат пакета приведен в таблице. Все поля имеют порядок байтов big-endian (network order).
Формат пакета-отчёта
Заголовок пакета всегда состоит из следующих восьми байтов:
Последние два байта заголовка содержат фактическую длину оставшейся части пакета. Так, например для пакета размером 28 байтов (8 байтов заголовка и 20 байтов данных) будет указано 0x00 0x14, а для пакета размером 32 байта: 0x00 0x18.
Состояние порта:
- 0x0000: доступен для подключения;
- 0x0001: занят (уже подключен);
- 0x0003: обнаружен конфликт IP адресов.
Пример содержимого пакета при параметрах по умолчанию:
Порты
Для подключения используется два порта TCP/IPv4: порт команд и порт данных.
Порт команд
По порту команд производится управление устройством и модулями, входящими в сеть CAN.
Протокол, используемый для управления по порту команд, похож на протокол Modbus TCP. Формат и назначение пакетов практически полностью соответствуют этому протоколу, но есть несколько значимых отличий:
- При подключении к порту, устройство сначала отправляет по нему пакет-отчет.
- Функция с кодом 0x06 отличается от той, что заложена в Modbus.
- Размер данных в ответах с данными указывается двумя байтами, а не одним, как в ответах Modbus.
Спецификации протоколов Modbus и Modbus TCP доступны на сайте: https://www.modbus.org/specs.php.
Формат пакета команд
Коды функций
Старший бит в коде функций используется в ответах для того, чтобы сообщить об ошибке.
Порт данных
Порт команд работает по принципу «запрос-ответ». Этот принцип не совсем удобен для передачи потоковых данных, так как буфер данных в устройстве имеет небольшой размер.
Поэтому для передачи потоковых данных используется отдельный порт. Этот порт однонаправленный (от устройства клиенту), отправка данных инициируется устройством по мере их готовности.
Потоковые данные передаются одинаковыми пакетами, состоящими из 12 байтов.
Поля имеют little-endian.
Формат пакета данных
Идентификатор состоит из двух частей:
- младшие 6 битов содержат адрес модуля (от 2 до 63), от которого пришли данные;
- старшие биты содержат различные флаги (см. таблицу).
Флаги пакета данных
Поле данных может состоять, в зависимости от идентификатора и размера данных, из следующих чисел:
- от нуля до двух чисел с плавающей запятой (float);
- от нуля до четырех целых чисел (int16_t).
При этом поле всегда занимает восемь байтов, в целях упрощения протокола.
Работа протокола
К устройству может быть установлено только одно подключение.
Подключение к устройству
Определение параметров подключения
Возможно два варианта:
- Параметры известны заранее.
- Параметры требуется определить автоматически.
Во втором случае необходимо включить приём групповых рассылок по протоколу multicast UDP:
- адрес группы: 239.192.71.76;
- порт группы: 7176.
После этого требуется подождать от 7 до 30 секунд.
Следует отметить, что передача групповых пакетов может быть заблокирована в настройках различных устройств коммутации сети Ethernet: сетевых шлюзов, маршрутизаторов, управляемых коммутаторов.
Подключение к порту команд
Подключение к порту команд производится по протоколу TCP по сетевым параметрам устройства: IP адресу и номеру порта.
Согласование
После подключения к порту команд, устройство отправляет по нему пакет-отчёт, содержащий, помимо прочего, серийный номер и тип устройства. Это необходимо для получения основных параметров устройства, а также для проверки.
Если устройство ничего не отправляет в течение долгого времени (более 10 секунд), или отправляет данные, не соответствующие формату пакета-отчёта, то соединение с таким устройством должно быть закрыто.
Подключение к порту данных
После согласования устройство открывает порт данных, номер которого на единицу больше номера порта команд.
После подключения к порту данных, устройство становится готово к работе.
Разрыв соединения
Соединение может быть разорвано по следующим причинам:
- отключение по инициативе клиента;
- обрыв связи;
- изменение сетевых параметров подключения;
- обнаружение конфликта IP адресов;
- сбой в работе устройства.
При разрыве соединения по любому из портов (по инициативе одной из сторон или из-за обрыва связи), устройство отключает второй порт и переходит в режим ожидания нового подключения.
В случае, если устройство обнаружило конфликт IP адресов, то есть если в локальной сети есть другое устройство (не обязательно ZET 7176) с таким же IP адресом, то об этом сообщается в пакете-отчёте, а также с помощью индикации на красном светодиоде.
Получение потоковых данных
Полная реализация протокола требуется не всегда. Часто ставится более упрощенная задача — получение потоковых данных с измерительных модулей, которые уже предварительно настроены (например, средствами ПО ZETLAB).
В этом случае можно просто принимать и обрабатывать пакеты по порту данных.