Подключение ZET017 U4/U8/T8 по Ethernet

Введение

В данной статье описывается сетевой протокол, используемый для подключения к анализаторам и тензостанциям ZET017 U4/U8/T8 производства ООО «ЭТМС».

Далее в данной статье под устройством будет иметься в виду анализатор или тензостанция ZET017 U4/U8/T8, а под клиентом — ПК либо другое техническое средство, которое подключается к устройству для управления им и обмена данными АЦП/ЦАП.

Режимы работы устройства

Устройство может работать в одном из трех режимов:
1. Подключение по USB.
2. Подключение по Ethernet.
3. Автономный регистратор.

Режим USB доступен всегда, а режимы Ethernet и автономного регистратора доступны в виде опций. Для работы устройства в режиме Ethernet используется протокол, описанный в этом документе. Протокол работает поверх транспортного протокола TCP/IPv4 в режиме сервера (то есть устройство не подключается к кому-нибудь, а ожидает подключения от клиента). Перед использованием устройства в режиме Ethernet, в нем должна быть предварительно произведена настройка параметров сетевого интерфейса. Настройка сетевого интерфейса выполняется в режиме USB с помощью ПО ZETLAB.

Параметры сетевого интерфейса:

  • адрес IPv4;
  • маска подсети;
  • адрес сетевого шлюза;
  • номер порта TCP/IPv4;
  • режим дуплекс/полудуплекс (обычно дуплекс);
  • скорость 100 Мбит/с или 10 Мбит/с (обычно 100 МБит/с).

Адрес IPv4 настраивается статически, так как устройство не поддерживает протоколы DHCP/BOOTP для автоматического определения адреса. По умолчанию в устройстве настроены адрес 192.168.0.100, маска подсети 255.255.255.0 и шлюз 192.168.0.1. Номер порта TCP/IPv4 доступен в настройках, однако фактически принимается только значение 1808.

Порты TCP/IPv4

Устройство открывает три порта TCP/IPv4:

Номер порта Название порта Назначение
1808 Командный порт Для управления устройством
2320 (1808 + 512) Порт выдачи АЦП Для получения данных по каналам АЦП
3344 (1808 + 3*512) Порт приема ЦАП Для отправки данных для ЦАП

Командный порт двусторонний: клиент отправляет по нему команды, а устройство — ответы на команды. Порты АЦП и ЦАП односторонние и используются для передачи данных АЦП от устройства клиенту и для передачи данных ЦАП от клиенту устройства, соответственно.

Формат пакетов

Команды

Первые два байта командного пакета содержат код команды. Содержимое остальных 1022 байтов зависит от значения кода команды.

Код команды Команда Описание
0x0000 GetInfo Получение текущей информации об устройстве
0x0001 ReadDigitalPort Чтение цифрового порта
0x0002 WriteDigitalPort Запись в цифровой порт
0x0003 EnableDigitalPort Управление цифровым портом
0x0012 PutInfo Изменение текущих настроек устройства
0x0207 Restart Программный перезапуск устройства

В таблицах ниже типы полей указаны через для точного указания разрядности. Столбец Упр. (управление) определяет, является ли поле настраиваемым (R/W — read/write) или нет (R/O — read only).

Команда 0x0000 GetInfo

Формат запроса:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0000 — GetInfo)

Остальные поля не имеют значения и не проверяются устройством.

Формат ответа:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0000 — GetInfo)
0x0004 int16_t StartADC R/W Управление АЦП (-1, 0, 1)
0x0006 int16_t StartDAC R/W Управление ЦАП (-1, 0, 1)
0x000e uint32_t QuantityChannelADC R/O Общее количество каналов АЦП (4, 8)
0x0010 uint32_t QuantityChannelDAC R/O Общее количество каналов ЦАП (1)
0x0012 uint8_t TypeDataADC R/O Тип данных АЦП (0 — int16_t, 1 — int32_t)
0x0013 uint8_t TypeDataDAC R/O Тип данных ЦАП (0 — int16_t)
0x0014 uint32_t ChannelADC R/W Маска активных каналов АЦП (0x00..0xFF)
0x0018 uint32_t ChannelDAC R/W Маска активных каналов ЦАП (0x00..0x01)
0x001C uint32_t ICPChannel R/W Маска ICP в каналах АЦП (0x00..0xFF)
0x0024 uint16_t WorkChADC R/W Количество активных каналов АЦП (1..8)
0x0026 uint16_t WorkChDAC R/W Количество активных каналов ЦАП (0..1)
0x0028 uint16_t CodAmplify[8] R/W Коэффициенты усиления (0, 1, 2)
0x00BA uint16_t ModaADC R/W Режим работы АЦП (0..4)
0x00BE uint16_t RateDAC R/W Режим работы ЦАП (400, 800, 1600, 3200)
0x00D8 uint32_t DigitalInput R/O Состояние входов цифрового порта
0x00DC uint32_t DigitalOutput R/W Состояние выходов цифрового порта
0x00EC char VersionDSP[32] R/O Строка с версией устройства
0x010C char DeviceName[16] R/O Строка с названием устройства
0x012C uint32_t SerialNumber R/O Серийный номер устройства
0x013C uint32_t DigitalOutEnable R/W Разрешения на запись цифрового порта
0x014C float DigitalResolutionADC[16] R/O Вес младшего разряда АЦП

Команда 0x0001 ReadDigitalPort

Формат запроса:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0001 — ReadDigitalPort)

Остальные поля не имеют значения и не проверяются устройством.

Формат ответа:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0001 — ReadDigitalPort)
0x00D8 uint32_t DigitalInput R/O Состояние входов цифрового порта

Остальные поля должны быть проигнорированы.

Команда 0x0002 WriteDigitalPort

Формат запроса:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0002 — WriteDigitalPort)
0x00DC uint32_t DigitalOutput R/W Состояние выходов цифрового порта

Остальные поля не имеют значения и не проверяются устройством.

Формат ответа:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0002 — WriteDigitalPort)

Остальные поля должны быть проигнорированы.

Команда 0x0003 EnableDigitalPort

Формат запроса:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0003 — EnableDigitalPort)
0x013C uint32_t DigitalOutEnable R/W Разрешения на запись цифрового порта

Остальные поля не имеют значения и не проверяются устройством.

Формат ответа:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0003 — EnableDigitalPort)

Остальные поля должны быть проигнорированы.

Команда 0x0012 PutInfo

Формат запроса:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0012 — PutInfo)

Остальные данные пакета соответствуют формату ответа на команду 0x0000 GetInfo.

Перед тем, как отправить пакет с запросом, необходимо сначала считать текущие настройки с помощью команды 0x0000 GetInfo и затем изменить в полученном пакете значения требуемых полей. Поля R/O изменять нельзя. Формат ответа соответствует формату ответа на команду 0x0000 GetInfo, включая значения кода команды (Command == 0x0000).

Команда 0x0207 Restart

Формат запроса:

Смещение Поле (тип и название) Упр. Описание
0x0000 uint16_t Command R/W Код команды (0x0207 — Restart)
0x0008 uint16_t Restart W Перезапуск (0x0001)

Остальные данные пакета должны быть обнулены.

Устройство будет перезапущено сразу же, без отправки ответа.

Подключение к устройству

Подключение к устройству:

  • Подключение к устройству производится в несколько этапов.

Установка соединения TCP/IPv4:

  • Клиент должен установить соединение по протоколу TCP/IPv4 ко всем трем портам устройства. Порядок подключений не важен.

Адрес IPv4 должен быть известен клиенту заранее, так как в устройстве нет средств для его обнаружения в локальной сети с помощью широковещательных или групповых запросов (таких как, например, SNMP).

Согласование:

После установки соединения по любому порту, устройство отправляет клиенту пакет для согласования.

Смещение Поле (тип и название) Описание
0x0000 uint32_t size Размер последующих данных
0x0004 uint8_t handshake[size] Данные

Сами данные не несут никакой полезной информации — их просто требуется вычитать по порту для согласования с устройством.

Инициализация:

После согласования требуется инициализация устройства. Для этого требуется отправить по командному порту две команды: 1. 0x0000 GetInfo — для получения текущей информации об устройстве. 2. 0x0012 PutInfo — для инициализации устройства.

Управление устройством:

После успешной инициализации устройство становится готовым для работы. По командному порту можно отправлять команды для изменения настроек, управления цифровым портом устройства, включения и отключения АЦП или ЦАП. Разрыв соединения При разрыве соединения по любому из портов (по инициативе клиента или из-за потери связи) устройство отключает все остальные порты, останавливает работу АЦП и ЦАП, после чего переходит в режим ожидания нового соединения. Факт потери связи определяется по факту отсоединения патч-корда (link down) или через TCP Keep-Alive.

Получение данных АЦП

Настройка каналов АЦП

Перед тем, как получать данные с АЦП, требуется настройка каналов АЦП. Настройка производится командой PutInfo. Всего в устройстве доступно Info.QuantityChannelADC каналов (4 или 8).

Любой канал может быть активен или неактивен (при условии, что активным остается как минимум один канал), а также он может быть включен в режиме ICP или без него. Активация каналов управляется полем Info.ChannelADC, в котором биты от нулевого по седьмой отвечают за активность соответствующего канала. Например, для активации каналов 1, 2 и 4 поле должно принимать значение Info.ChannelADC == 0x000B (установлены 0-й, 1-й и 3-й биты). Общее количество активных каналов указывается в поле Info.WorkChADC. В случае активации каналов 1, 2 и 4 поле принимает значение 3. Режим ICP управляется полем Info.ICPChannel, которое также содержит битовую маску для каждого канала. Все каналы оцифровываются данные синхронно, частота дискретизации у них общая.

Частота управляется полем Info.ModaADC:

  • 50 кГц (Info.ModaADC == 1);
  • 25 кГц (Info.ModaADC == 2);
  • 5 кГц (Info.ModaADC == 3);
  • 2 500 Гц (Info.ModaADC == 4);
  • 25 кГц (по умолчанию для всех других значений Info.ModaADC).

Для каждого канала можно задать коэффициент усиления с помощью массива Info. CodAmpllify:

  • КУ 1 (Info.CodAmplify[i] == 0, по умолчанию);
  • КУ 10 (Info.CodAmplify[i] == 1);
  • КУ 100 (Info.CodAmplify[i] == 2);

Запуск АЦП

Для запуска АЦП после настройки каналов требуется отправить команду PutInfo с полем Info.StartADC, равным 1.

Получение данных

Данные передаются по порту АЦП по мере их готовности и только при запущенном АЦП (Info.StartADC == 1). Данные передаются пакетами по 1024 байта. Первые 1008 байтов содержат очередную порцию отчетов. Отчеты передаются кадрами — группами по одному отчету с каждого активного канала.

Например, если в устройстве активированы 1-й, 2-й и 4-й каналы, то данные будут передаваться в следующей последовательности:

  • [отчет №1 канала 1], [отчет №1 канала 2], [отчет №1 канала 4];
  • [отчет №2 канала 1], [отчет №2 канала 2], [отчет №2 канала 4];
  • [отчет №3 канала 1], [отчет №3 канала 2], [отчет №3 канала 4];
  • и так далее.

Каждый отчет передается в «сыром» виде в формате int16_t (2 байта) или long (4 байта), в зависимости от разрядности АЦП в устройстве (Info.TypeDataADC). Байты с 1008-го по 1015-й, включительно, не задействованы — их следует игнорировать. Последние 8 байтов (с 1016-го по 1023-й, включительно) содержат счетчик пакетов, который инкрементируется на 1 в каждом следующем отправленном пакете. Счетчик пакетов служит для проверки их последовательности.

Остановка АЦП

Для остановки АЦП требуется отправить команду с полем Info.StartADC == -1 (запрос на остановку АЦП). После отправки команды следует продолжать чтение пакетов по порту АЦП до тех пор пока устройство не отправит нулевой пакет (состоящие из 1024 нулевых байтов). После этого требуется отправить команду с полем Info.StartADC == 0 (окончание остановки АЦП).

Работа генератора

Настройка генератора:
В устройстве есть только один канал генератора. Настройка производится с помощью команды PutInfo.
Частота дискретизации ЦАП настраивается полем Info.RateDAC:

  • 200 кГц (Info.RateDAC == 400);
  • 100 кГц (Info.RateDAC == 800);
  • 50 кГц (Info.RateDAC == 1600);
  • 25 кГц (Info.RateDAC == 3200).

Значения Info.RateDAC, отличные от приведенных в списке, возможны, но могут привести к некорректной работе генератора. Итоговая частота дискретизации вычисляется по следующей формуле: FreqDAC = RefFreqDAC / RateDAC, где RefFreqDAC == 80 МГц.

Запуск генератора

Запуск ЦАП синхронизирован с запуском АЦП, поэтому для запуска ЦАП требуется отправить команду PutInfo с полем Info.StartDAC == 1, а затем запустить АЦП.

Отправка данных генератора

Устройство принимает пакеты ЦАП только при включенном генераторе (Info.StartDAC == 1). Пакет ЦАП состоит из 1024 байтов, содержащих очередные 512 отчетов ЦАП в «сыром» виде в формате int16_t (2 байта). Следует учитывать, что данные ЦАП поступают на аппаратном выходе генератора с задержкой относительно их отправки, поэтому данные требуется отправлять с небольшим опережением. В устройстве имеется буфер для накопления данных ЦАП. Устройство принимает новые данные по порту ЦАП только когда в буфере есть свободное место. При заполнении буфера прием данных приостанавливается до тех пор, пока буфер не будет освобожден по мере фактической выдачи данных на выходе генератора. Устройство может отправлять данные по порту ЦАП. Их следует вычитывать во избежание переполнения буфера отправки в устройстве. Сами данные можно игнорировать.

Остановка генератора

Для остановки ЦАП следует отправить команду PutInfo с полем Info.StartDAC == -1, а затем команду PutInfo с полем Info.StartDAC == 0.

Пример программы

Пример небольшой программы приведен в руководстве разработчика «ZETLab Studio», с. 30.

Программа подключается к устройству с IP-адресом 192.168.0.100, запускает АЦП (8 каналов, 25 кГц) и ЦАП (200 кГц) и выдает сообщение раз в секунду

Авторизация
*
*

Потеряли пароль?

Политика конфиденциальности персональных данных

Регистрация
*
*
*

Политика конфиденциальности персональных данных

Генерация пароля