Подключение 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:

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

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

Команды

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

После согласования требуется инициализация устройства. Для этого требуется отправить по командному порту две команды: 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.

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

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