Формат ответного пакета зонда ЗГП-2004 0xAA 0x55 HB1 HB0 DH2 DM2 DL2 CRC8H DH1 DM1 DL1 DH0 DM0 DL0 CRC8L 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 1 TO_ADC CRC8H_7 DH2_6 DM2_6 DL2_6 CRC8H_6 DH1_6 DM1_6 DL1_6 DH0_6 DM0_6 DL0_6 CRC8L_6 Таблица 1 5 1 0 0 CRC8L_7 DH2_5 DM2_5 DL2_5 CRC8H_5 DH1_5 DM1_5 DL1_5 DH0_5 DM0_5 DL0_5 CRC8L_5 4 0 1 0 DM1_7 DH2_4 DM2_4 DL2_4 CRC8H_4 DH1_4 DM1_4 DL1_4 DH0_4 DM0_4 DL0_4 CRC8L_4 3 1 0 DH2_7 DL1_7 DH2_3 DM2_3 DL2_3 CRC8H_3 DH1_3 DM1_3 DL1_3 DH0_3 DM0_3 DL0_3 CRC8L_3 2 0 1 DM2_7 DH0_7 DH2_2 DM2_2 DL2_2 CRC8H_2 DH1_2 DM1_2 DL1_2 DH0_2 DM0_2 DL0_2 CRC8L_2 1 1 0 DL2_7 DM0_7 DH2_1 DM2_1 DL2_1 CRC8H_1 DH1_1 DM1_1 DL1_1 DH0_1 DM0_1 DL0_1 CRC8L_1 TO_ADC – ошибка таймаута АЦП (предыдущий пакет данных потерян), 0xAA(H) = 170(D) – первый байт преамбулы пакета, 0xAA(H) = 85(D) – второй байт преамбулы пакета, HBx – старшие разряды байтов пакета, DHn – данные канала n (прямой двоичный формат с весовым значением младшего разряда 2.9810-7 В), старший байт, DMn - данные канала n (прямой двоичный формат с весовым значением младшего разряда 2.9810-7 В), средний байт, DLn - данные канала n (прямой двоичный формат с весовым значением младшего разряда 2.9810-7 В), младший байт, CRC8H – контрольный избыточный код передачи для байтов с 0xAA по DL2, CRC8L – контрольный избыточный код передачи для байтов с DH1 по DL0, 1 – лог. “1”, 0 – лог. “0”, xxxxx_m – (m=0…7) – номер разряда кода в прямом двоичном представлении. 0 0 1 DH1_7 DL0_7 DH2_0 DM2_0 DL2_0 CRC8H_0 DH1_0 DM1_0 DL1_0 DH0_0 DM0_0 DL0_0 CRC8L_0 Формат пакета команды зонда ЗГП-2004 CMD CMDCRC 7 CMD_7 CMDCRC_7 6 CMD_6 CMDCRC_6 Таблица 2 5 CMD_5 CMDCRC_5 4 CMD_4 CMDCRC_4 3 CMD_3 CMDCRC_3 2 CMD_2 CMDCRC_2 1 CMD_1 CMDCRC_1 0 CMD_0 CMDCRC_0 CMD – код команды (один из [0x74, 0x72, 0x65]), CMDCRC - контрольный избыточный код команды (CMD+<фантом(7 байт 0xFF)>), xxxxx_m – (m=0…7) – номер разряда кода в прямом двоичном представлении. Полный пакет команды зонда ЗГП-2004 CMD PHANTOM5 PHANTOM4 PHANTOM3 PHANTOM2 PHANTOM1 PHANTOM0 CMDCRC 7 CMD_7 1 1 1 1 1 1 CMDCRC_7 6 CMD_6 1 1 1 1 1 1 CMDCRC_6 Таблица 3 5 CMD_5 1 1 1 1 1 1 CMDCRC_5 4 CMD_4 1 1 1 1 1 1 CMDCRC_4 3 CMD_3 1 1 1 1 1 1 CMDCRC_3 2 CMD_2 1 1 1 1 1 1 CMDCRC_2 1 CMD_1 1 1 1 1 1 1 CMDCRC_1 0 CMD_0 1 1 1 1 1 1 CMDCRC_0 Вычисление CMDCRC осуществляется с байта CMD до байта PHANTOM0 включительно. Байты PHANTOM0 – PHANTOM5 передаче на зонд не подлежат. Протокол обмена между зондом ЗГП-2004 и ПЭВМ. 1. Параметры интерфейса Связь между контроллером зонда и ПЭВМ осуществляется по протоколу последовательного интерфейса RS-485. Скорость передачи – 57600 Бод. Длина информационного слова – 8 бит. Количество стоп-бит – 1. Контроль на чётность - отсутствует. Циклический избыточный контроль – присутствует. Формат пакетов команд – 2 байта, двоичный. Формат пакетов ответа – 15 байт, двоичный с перемежением разрядов. Тип пакетов команд – однократный. Тип пакетов ответа – поток. 2. Порядок обмена. ПЭВМ передаёт контроллеру зонда пакет команды, содержащий одну из трёх команд: - t (0x74) – запрос идентификационной строки контроллера. - r (0x72) – рабочий режим опроса аналого-цифрового преобразователя (АЦП). - e (0x65) – режим функционального контроля (ФК) АЦП Формат пакета команды должен соответствовать приведённому в табл.2. Вычисление избыточного кода контроля производится согласно алгоритму, приведённому в Приложении 1. При вычислении кода контроля двух байтов для получения корректного значения кода на фиксированной блоковой длине, равной 7 байтам вводится дополнительный блок информации, не подлежащий передаче по каналу связи (фантом). Для пакета команды он составляет 6 байт, содержащих код 0xFF. Полученное вычислением значение заносится в байт CMDCRC (табл. 2), и совместно с командой передаётся в двух байтах контроллеру зонда. 2.1 При получении команды и совпадении кода контроля, вычисляемого по аналогичному алгоритму контроллером, происходит её исполнение. Получение команды “t” приведёт к передаче на ПЭВМ идентификационной строки зонда, содержащей имя прибора и краткую характеристику АЦП. Строка состоит из ASCII – символов и не снабжена кодом контроля. Для зонда ЗГП-2004 она имеет вид: ZHP-2004 v1.0 VrefADC=2.5V; Fdiskr=50Hz; N=24; K=3. 2.2 Исполнение команды “r” приводит к переключению интерфейса в режим потокового обмена. Информация из зонда с периодом опроса 20 мс (50 Гц), синхронизированная по всем трём каналам измерения упаковывается в пакеты, формат которых приведён в табл. 1 и передаётся на ПЭВМ, где происходит их декодирование и последующие вычисления гидрофизических величин при помощи градуировочных формул. Пакеты снабжены избыточным кодом контроля (2 байта) для двух половин пакета. Вычисление избыточности происходит по алгоритму, аналогичному использованному при приёме команды. Особенность декодирования заключается во введении после приема 14 байта пакета (по счёту от первого байта преамбулы перед вычислением значения байта CRC8L) фантома, содержащего один байт с кодом 0xFF. Невыполнение этого условия приведёт к несовпадению кода контроля CRC8L. Преамбула служит для определения начала пакета и защиты циклического кода контроля от данных, содержащих нулевые значения. 2.3 Команда “e” служит для контроля функционирования АЦП и канала связи. При её исполнении и нормальной работе аппаратуры аналого-цифрового канала обработки данных должно регистрироваться значение преобразованного сигнала амплитудой 2.50.001 В и периодом 0.50.05 Гц прямоугольной формы. Передача данных осуществляется в потоковом режиме аналогично работе команды “r”. 2.4 Для остановки действия команд “r” и “e” ПЭВМ должна осуществлять выдачу команды “t” до момента регистрации в приёмном буфере идентификационной строки зонда согласно п. 2.1. Поток при этом будет остановлен. Приложение 1 Генерация избыточного циклического кода контроля Защита командных последовательностей избыточным кодом контроля необходима для уменьшения вероятности приёма ложной команды вследствии действия помех в канале связи и возможности непреднамеренного изменения задаваемых временных параметров контроллеров. Генератор 8-разрядных циклических контрольных кодов на основе многочлена Хэмминга X8+X5+X4+1 рекомендован международными стандартами ISO, IEEE и CCITT для организации обмена последовательностями данных длиной до 64 разрядов по последовательным каналам связи в условиях повышенного уровня импульсных помех. Код позволяет выявлять следующие дефекты потока: 1) Любое нечётное число ошибок в пределах 64-разрядного «окна», 2) Все двойные ошибки в пределах 64-разрядного «окна», 3) Любую пачку ошибок (1-8 искажений) в пределах 8-разрядного «окна». Разряды генератора вычисляются по рекурсивной схеме на основе следующих зависимостей: b0 b7 I ; b4 b0 b3; b5 b0 b4; b4 (b7 I ) b3 ((b7 I ) (b7 I )) b3 (((b7 I ) (b7 I )) b3) (((b7 I ) (b7 I )) b3) (((b7 I ) (b7 I )) b3) (((b7 I ) (b7 I )) b3) (((b7 I ) (b7 I ) b3 (((b7 I ) (b7 I )) b3) b7 b3 I b7 b3 I b7 b3 I b7 b3 I ; b5 b7 I b3 b7 b3 I b7 I b3 b7 I b3, где I – очередной разряд входного потока в данный момент времени, b0 – b7 – состояния внутренних разрядов генератора. Генератор может быть представлен блок-схемой (рис. 1). X0 X1 X2 X3 X4 X5 X6 X7 I Рис. 1 Алгоритм работы генератора может быть представлена в виде графа (рис. 2) X8 Ï ðî âåðêà âõî äí î ãî áèò à 0 1 0 CRC 80h 1 1 1 (CRC 18h) è ñäâèã âëåâî (CRC 80h) 80h 2 1 0 3 5 0 4 0 6 Ñäâèã âëåâî 7 Í î âî å çí à÷åí èå CRC Рис. 2 Существуют два метода нахождения значения избыточного циклического кода контроля: вычислительный и табличный. Первый характеризуется малым занимаемым объёмом памяти, и потому применяется в контроллере. Его недостатком является неоптимальность по времени исполнения. Второй имеет лучший показатель быстродействия, но требует больший объём памяти для хранения заранее вычисленной таблицы значений.