Главная
Техподдержка
Протокол обмена Протокол обмена
Протокол обмена с приборами ОАО «Практик-НЦ» и АО «ЭКСИС»
В этом разделе Вы можете найти информацию о протоколе обмена с приборами производства ОАО «Практик-НЦ» и АО «ЭКСИС».
Внимание! Разработана новая библиотека обмена EksisExchange.dll. Поддержка старой прекращена. Ссылка на старую оставлена ради примеров использования. Документация внутри архивов. В архиве версии для x86 и x64 систем.
Описание протокола обмена RS-232
Протокол обмена строится по принципу ведущий – ведомый в полудуплексном режиме. Прибор всегда является ведомым устройством. Ведущее устройство (компьютер, блок индикации или пр.) формирует команду – запрос, а прибор – ответ. Время ожидания ответа не более 300 мс. Обмен осуществляется 10-ти битными словами, каждое из которых состоит из: 1 старт – бит, 1 стоп – бит, 8 информационных бит. Восемь информационных бит слова составляют символ. Скорость обмена варьируется от 1200 до 115200 бит/с в зависимости от прибора. Для обмена используются ASCII символы: $,!, 0...9, A...F, I, R, <0D>. Форматы запросов и ответов стандартизованы и приведены ниже. Принцип обмена строится на чтение параметров по определенным адресам в измерительном устройстве. Команды записи и настройки устройств нами не предоставляются.
Формат запроса: {$}[Addr][Cmd]([DataAddr])([DataLen])([Data])[ch]<0D>
Формат ответа: {!}[Addr][Cmd]([Data])[ch]<0D> {?}[Addr][Cmd][ch]<0D>
Условные обозначения:
В скобках {} указазаны передаваемые символы в явном виде, в скобках <> указаны коды передаваемых символов, в скобках [] — условные обозначения параметров, в скобках () указаны параметры, которые присутствуют в зависимости от команды запроса.
$ — зарезервированный символ начала посылки ведущего устройства;
! — зарезервированный символ начала посылки ведомого устройства в случае верного выполнения команды;
? — зарезервированный символ начала посылки ведомого устройства в случае ошибки выполнения команды;
[Addr] — адрес устройства (4 символа), четырехразрядное шестнадцатеричное число, каждая цифра которого передается текстовым ASCII – символом, все приборы помимо основного адреса задаваемого пользователем имеют служебный — FFFF;
[Cmd] — команда, 2 символа;
[DataAddr] — адрес данных (4 символа), четырехразрядное шестнадцатеричное число, каждая цифра которого передается текстовым ASCII – символом;
[DataLen] — длина данных (2 символа), двухразрядное шестнадцатеричное число, каждая цифра которого передается текстовым ASCII – символом;
[Data] — данные, каждый байт передаётся 2-мя символами;
[ch] — контрольная сумма (2 символа), двухразрядное шестнадцатеричное число, каждая цифра которого передается текстовым ASCII – символом. Контрольная сумма вычисляется сложением по модулю 256 всех предыдущих кодов ASCII – символов посылки;
<0Dh> — зарезервированный символ окончания посылки (1 байт), имеющий шестнадцатеричный код 0Dh. Для ведущего и ведомого устройств символы конца посылки совпадают.
Описание формата данных:
Unsigned char — целое беззнаковое число, 1 байт, согласно ANSI Unsigned short char. Передается с помощью двух текстовых ASCII – символов. Байт числа разбивается на два нибла, каждый из которых передается шестнадцатеричной цифрой в кодировке текстовых ASCII – символов. Первым передается старший нибл. Порядок передачи байт обратный. Например, число 40h (64) передается ASCII - символами в следующем порядке: 4, 0;
Unsigned int — целое беззнаковое число, 2 байта, согласно ANSI Unsigned short int. Передается с помощью четырех текстовых ASCII – символов. Каждый байт числа разбивается на два нибла, каждый из которых передается шестнадцатеричной цифрой в кодировке текстовых ASCII – символов. Первым передается старший нибл. Порядок передачи байт обратный. Например, число 1234h (4660) передается ASCII - символами в следующем порядке: 3, 4, 1, 2;
Float — число с плавающей запятой, 4 байта, согласно ANSI Float. Передается с помощью восьми текстовых ASCII – символов. Каждый байт числа разбивается на два нибла, каждый из которых передается шестнадцатеричной цифрой в кодировке текстовых ASCII – символов. Первым передается старший нибл. Порядок передачи байт обратный. Например, число 1.23 (3F9D70A4h) передается ASCII - символами в следующем порядке: A, 4, 7, 0, 9, D, 3, F.
Примеры:
Чтение температуры (Float) из ИВТМ-7Н
Запрос: $ 0001 RR 0000 04 AD 0D [Addr] = 0001, [Cmd] = RR, [DataAddr] = 0000, [DataLen] = 04, [ch] = AD.
Ответ: ! 0001 RR 0000 A041 B2 0D [Addr] = 0001, [Cmd] = RR, [Data] = 41 А0 00 00 (20,0 гр. Ц.), [ch] = B2.
Описание протокола обмена USB
Измерители определяются операционной системой как HID-устройство. Обмен ведется по каналу Control Transfers посредством Feature Reports блоками до 128 байт со скоростью до 64000 байт в секунду. Точный размер передаваемого блока (заголовок + данные + контрольная сумма) устройство передаёт в своихHID device capabilities (HidP_GetCaps).
Данные передаются в неизменном бинарном виде. Логически обмен данными построен схожим с обменом по RS-232 способом: чтение и запись данных производится по определенным адресам в измерительном устройстве, а каждая модификация измерителя имеет свою карту адресов по которым осуществляется обмен, попытки доступа к адресам вне данной карты воспринимаются как ошибочные и соответствующим образом сигнализируются в ответах.
Формат запроса: [Addr][Cmd]([DataLen])([Data])[CheckSum]
Формат ответа: [Result]([DataLen])([Data])[CheckSum] - успех, либо <0xFF>[Cmd][CheckSum] - ошибка
Условные обозначения:
В скобках <> указаны коды передаваемых символов, в скобках [] — условные обозначения параметров, в скобках () указаны параметры, которые присутствуют в зависимости от команды запроса.
[Result] — результат выполнения запроса, 1 байт:
0x00 — команда выполнена успешно;
0xFE — устройство не готово, повторите запрос позже;
0xFF — ошибки выполнения команды;
[Addr] — адрес данных, 4 байта;
[Cmd] — команда, 1 байт;
[DataLen] — длина данных, 1 байт;
[Data] — двоичные данные;
[CheckSum] — контрольная сумма (1 байт), вычисляется сложением по модулю 256 всех байт пакета (начальное значение контрольной суммы 0xFF);
Для правильной отправки Feature Report требуется установка размера буфера в соответствии с HID device capabilities.
Команды и примеры построения запросов по USB:
Команды чтения (байт):
0х80 — команда чтения данных из ОЗУ (как правило для текущих значений измерений);
0х82 — команда чтения данных из ПЗУ настройки (как правило для настроек прибора);
0х81 — команда чтения данных из ПЗУ статистики;
Команды записи (два символа):
0х00 — команда записи данных в ОЗУ;
0х02 — команда записи данных в ПЗУ настройки;
0х01 — команда записи данных в ПЗУ статистики;
Пример чтения влажности (данные в формате Float) из ИВТМ-7 Р-03-Д
Запрос: 00000000 80 04 83
[Addr] = адрес читаемой памяти (0x00000000);
[Cmd] = команда (0x80);
[DataLen] = количество читаемых байт (0x04);
[CheckSum] = контрольная сумма всей посылки (0xFF + 0x00 + 0x00 + 0x00 + 0x00 + 0x80 + 0x04 mod 0x100 = 0x83 )
Ответ: 00 04 0000A041 E0
[Result] = 0x00 (признак успешного выполнения команды);
[DataLen] = количество байт данных в ответе (4);
[Data] = 41 А0 00 00 (0x41A00000 = 20,0 %)
[CheckSum] = контрольная сумма данных (0xFF + 0x04 + 0x00 + 0x00 + 0xA0 + 0x41 = 0xE0).
Команда получения идентификационной строки устройства: 0x8F. Пример:
Запрос: 00000000 8F 00 8E
[Addr] = адрес читаемой памяти (0x00000000);
[Cmd] = команда (0x8F);
[DataLen] = количество читаемых байт (0x00);
[CheckSum] = контрольная сумма всей посылки (0xFF + 0x00 + 0x00 + 0x00 + 0x00 + 0x8F + 0x04 mod 0x100 = 0x8E )
[Result] = 0x00 (признак успешного выполнения команды);
[DataLen] = количество байт данных в ответе (52);
[Data] = C842...31 ("ИBTМ-7Р-03 r2.11 10084563 VID=3412 PID=1003 EAL=0001")
Технологический номер в разных приборах может находится на разных позициях, но всегда имеет 8 цифр.
[CheckSum] = 0x28