1. Общие положения.
Приборы типа МЕТАКОН рассчитаны на подключение к ним по последовательному каналу RS-485 устройств двух типов:
§ соединение одного или нескольких приборов с одним специализированным устройством (устройства с жестким алгоритмом).
§ соединение одного или нескольких приборов с компьютером (устройства с мягким алгоритмом).
Под специализированными понимаются устройства, имеющие стандартизированный протокол обмена (изменить который нельзя) и гарантирующие свое функционирование совместно с любыми (в том числе и вновь разработанными) подчиненными приборами. Например, это могут быть устройства вывода данных измерения на принтер, преобразования их в токовые сигналы различных стандартов и т.д. Стандартизация специализированных устройств подразумевает обязательную поддержку устройств данного типа во вновь разрабатываемых приборах серии МЕТАКОН.
Параметры работы специализированных устройств могут задаваться через приборы типа МЕТАКОН, для чего в меню конфигурирования предусматриваются соответствующие пункты.
2. Физические характеристики канала передачи данных:
§ способ передачи - асинхронный полудуплекс;
§ скорость передачи выбирается из значений 2.4, 4.8, 9.6, 19.2 Кбод;
§ формат посылки фиксирован - один стартовый бит., восемь бит данных без проверки на четность, один стоповый бит;
§ максимальное количество устройств в одной сети без повторителей – 32;
§ максимальное расстояние передачи без повторителей – не более 1 км.
3. Описание протокола.
Командно-информационный обмен управляющего компьютера или специализированного устройства (в дальнейшем УУ - управляющее устройство) с приборами осуществляется в пакетном режиме по принципу "команда-ответ".
Способ представления информации - двоичный побайтовый; адреса или параметры, длина которых превышает 1 байт, передаются младшими байтами вперед.
Максимальная длина пакета – 38 байт.
Каждый пакет состоит из нескольких полей, передающихся друг за другом без разрывов во времени.
Таблица 1. Перечень командных и ответных пакетов (в порядке следования).
Название поля |
Условное обозначение |
Длина поля, (байт) |
Примечания. |
Поле сетевого адреса прибора |
DEV |
1 |
Устанавливается при конфигурации прибора. |
Поле адреса канала прибора |
CHA |
1 |
Канал – локальный замкнутый контур управления одиночным параметром техпроцесса. Каналы нумеруются с 0. |
Поле адреса регистра |
REG |
1 |
Регистр – переменная или константа канала. |
Поле команды |
CMD |
1 |
Двоичный код команды:
00h – чтение регистра, далее RD,
01h – запись регистра, далее WR. |
Поле типа данных |
TYP |
1 |
Младшая тетрада содержит условный тип регистра (см. табл. 2), а старшие два бита определяют права доступа к регистру:
TYP.7=1 – регистр доступен по записи (W);
TYP.6=1 – регистр доступен по чтению (R). |
Поле данных |
DATA |
1…32 |
Может отсутствовать (в зависимости от назначения пакета) |
Поле контрольной суммы |
CRC |
1 |
Однобайтовый циклический код, вычисляемый по всем предшествующим битам данного пакета (см. ниже). |
Модель прибора со стороны УУ представляет собой набор регистров (переменных и констант различной длины и формата), читая и записывая которые УУ имеет возможность сбора информации и инициирования различных действий приборов.
Таблица 2. Перечень типизированных форматов данных.
Характеристика типа |
Обозначение |
Длина (байт) |
Диапазон возможных значений |
TYP.0…3 |
Булева переменная |
Bool |
1 |
00h = False, FFh = True |
0 |
Беззнаковое байтовое |
Ubyte |
1 |
0...255 |
1 |
Знаковое байтовое |
Byte |
1 |
-128...127 |
2 |
Беззнаковое целое |
Uint |
2 |
0...65535 |
3 |
Знаковое целое |
Int |
2 |
-32768...32767 |
4 |
Беззнаковое длинное |
Ulong |
4 |
0...4294967295 |
5 |
Знаковое длинное |
Long |
4 |
-2147483648...2147483647 |
6 |
С плавающей точкой (формат IEEE) |
Float |
4 |
±1.2E-38 ... ±3.4E+38 |
7 |
С плавающей точкой (формат IEEE) |
Double |
8 |
±2.2E-308 ... ±1.8E+308 |
8 |
Нуль – терминированная строка |
ASCIIZ |
1…32, включая завершающий 0 |
Любая последовательность ASCII кодов, заканчивающихся нулем |
9 |
Признаком конца пакета служит отсутствие передачи на линии после окончания стоп-бита последнего байта в течении времени передачи двух байтов при данной скорости.
Типичные сеансы связи УУ с прибором могут выглядеть следующим образом:
Операция чтения состояния регистра:
От УУ: DEV.CHA.REG.RD.CRC
От прибора: DEV.CHA.REG.RD.TYP.DATA.CRC
Операция установки состояния регистра:
От УУ: DEV.CHA.REG.WR.TYP.DATA.CRC
От прибора: DEV.CHA.REG.WR.CRC
Примечание: В вышеприведенных выражениях десятичные точки используются исключительно с целью визуального разделения полей командных и ответных пакетов. На самом деле поля пакета передаются друг за другом без разрывов во времени.
После завершения передачи последнего байта командного пакета УУ ожидает поступления ответа от запрашиваемого прибора в течении:
TIMEOUT = 2*ONE_TIME + SIZE*ONE_TIME + 25 мс
где:
ONE_TIME - время передачи одного байта при выбранной скорости. Байт посылается 10-ю битами (1 стартовый бит + 8 бит данных + 1 стоповый бит), следовательно ONE_TIME = 10 / (скорость обмена, в бод);
SIZE - ожидаемый размер ответного пакета (в байтах);
25 мс - максимальное время реакции регулятора.
Если через TIMEOUT [мс] ответный пакет не поступает, то производятся еще 2 попытки, если они также заканчиваются неудачей, сеанс связи считается несостоявшимся.
Прибор отвечает на поступивший командный пакет только в том случае, если поле адреса пакета совпадает с его собственным адресом, поле номера канала соответствует одному из каналов, действительно имеющихся в наличии в данном регуляторе, а номер регистра соответствует одному из действительно существующих регистров канала.
Пакеты с некорректной контрольной суммой отбрасываются (считаются не поступившими).
Контрольная сумма вычисляется сверткой всех битов пакета (начиная с младшего бита первого байта) с полиномом X8+X5+X4+1. Алгоритм вычисления CRC приведен в приложении.
4. Регистровая модель канала.
Логическая (регистровая) модель канала является совокупностью регистров различного назначения, которые могут иметь различную длину и формат.
Адресное пространство регистров делится на две половины:
§ Область с адресами 00h - 7Fh предназначена для размещения регистровых блоков общего назначения, структура которых может быть различна у разных приборов и разных каналов (используется в устройствах с мягким алгоритмом).
§ Область с адресами 7Fh - FFh - стандартизирована, и содержит блоки регистров, структура и адреса которых жестко закреплены за конкретными типами специализированных устройств (используется в устройствах с жестким алгоритмом). Иначе говоря любое специализированное управляющее устройство обращается только к закрепленным за устройствами этого типа регистрам.
На данный момент разработано только одно специализированное управляющее устройство - адаптер принтера МЕТАПРИНТ. Для устройств этого типа отведены следующие регистры (табл. 3).
Таблица 3. Интерфейсные регистры специализированного управляющего устройства типа адаптера принтера.
Адрес регистра |
Доступ |
Тип |
Назначение регистра. |
80h |
R |
Int |
Содержит результат измерения данного канала (то, что печатается) |
81h |
R |
Ubyte |
Содержит код периода вывода на печать результата измерения |
82h |
R |
Ubyte |
Содержит код положения десятичной точки |
Со стороны УУ (устройства с мягким алгоритмом) каждый канал со своей определенной регистровой структурой имеет свой индивидуальный код, по которому УУ определяет тип этого канала. Регистр с адресом 00h всегда содержит константу этого кода. Регистровые модели каналов приборов типа МЕТАКОН-5Х2-ХХ-1, МЕТАКОН-535-1, МЕТАКОН-5Х4-ХХ-1, МЕТАКОН-5Х3-ХХ-1, МЕТАКОН-613-ХХ-1, МЕТАКОН-614-ХХ-1, МЕТАКОН-515-Х-1 приведены в табл. 4 - 10.
Таблица 4. Регистровая модель одного канала приборов типа МЕТАКОН-5Х2-ХХ-1.
Адрес |
Доступ |
Тип |
Название регистра. |
Диапазон допустимых значений |
Примечание |
00h |
R |
Ubyte |
Код канала данного типа |
00h |
-- |
01h |
R |
Int |
Результат измерения |
-999…9999 |
1,2,3,4 |
02h |
RW |
Int |
Параметр H |
-999…9999 |
1,2,5,6,7 |
03h |
RW |
Int |
Параметр h |
-999…9999 |
1,2,5,6,7 |
04h |
RW |
Bool |
Выход H |
0h или FFh |
4,7,8 |
05h |
RW |
Int |
Параметр L |
-999…9999 |
1,2,5,6,7 |
06h |
RW |
Int |
Параметр l |
-999…9999 |
1,2,5,6,7 |
07h |
RW |
Bool |
Выход L |
0h или FFh |
4,7,8 |
Таблица 5. Регистровая модель одного канала приборов типа МЕТАКОН-535-1.
Адрес |
Доступ |
Тип |
Название регистра. |
Диапазон допустимых значений |
Примечание |
00h |
R |
Ubyte |
Код канала данного типа |
01h |
-- |
01h |
R |
Int |
Результат измерения |
-999…9999 |
1,2,3,4 |
02h |
RW |
Int |
Уставка |
-999…9999 |
1,2,5,6,7 |
03h |
RW |
Int |
Ширина гистерезиса |
0…255 |
1,2,5,6 |
04h |
RW |
Bool |
Выход управления |
0h или FFh |
4,7,8 |
Таблица 6. Регистровая модель одного канала приборов типа МЕТАКОН-5Х4-ХХ-1.
Адрес |
Доступ |
Тип |
Название регистра. |
Диапазон допустимых значений |
Примечание |
00h |
R |
Ubyte |
Код канала данного типа |
02h |
-- |
01h |
R |
Int |
Результат измерения |
-999…9999 |
1,2,3,4 |
02h |
RW |
Int |
Уставка ПДД регулятора |
-999…9999 |
1,2,5,6 |
03h |
RW |
Uint |
Зона пропорциональности |
1…9999 |
1,2,5,6 |
04h |
RW |
Uint |
Постоянная интегрирования |
1…30000 |
5,6,9 |
05h |
RW |
Ubyte |
Постоянная дифференцирования |
0…255 |
5,6,9 |
06h |
RW |
Byte |
Сигнал управления |
-100…100 |
4,6,8,13 |
07h |
R |
Bool |
Выход “Больше” |
0h или FFh |
4 |
08h |
R |
Bool |
Выход “Меньше” |
0h или FFh |
4 |
09h |
RW |
Int |
Уставка Н |
-999…9999 |
1,2,5,6,7 |
0Ah |
RW |
Ubyte |
Ширина гистерезиса Н |
0…255 |
1,2,5,6 |
0Bh |
RW |
Bool |
Выход Н |
0h или FFh |
4,7,8 |
0Ch |
RW |
Int |
Уставка L |
-999…9999 |
1,2,5,6,7 |
0Dh |
RW |
Ubyte |
Ширина гистерезиса L |
0…255 |
1,2,5,6 |
0Eh |
RW |
Bool |
Выход L |
0h или FFh |
4,7,8 |
Таблица 7. Регистровая модель одного канала приборов типа МЕТАКОН-5Х3-ХХ-1.
Адрес |
Доступ |
Тип |
Название регистра. |
Диапазон допустимых значений |
Примечание |
00h |
R |
Ubyte |
Код канала данного типа |
03h |
-- |
01h |
R |
Int |
Результат измерения |
-999…9999 |
1,2,3,4 |
02h |
RW |
Int |
Уставка ПИД регулятора |
-999…9999 |
1,2,5,6 |
03h |
RW |
Uint |
Зона пропорциональности |
1…9999 |
1,2,5,6 |
04h |
RW |
Uint |
Постоянная интегрирования |
1…30000 |
5,6,9 |
05h |
RW |
Ubyte |
Постоянная дифференцирования |
0…255 |
5,6,9 |
06h |
RW |
Byte |
Выходная мощность |
-100…100 |
4,6,8,14 |
07h |
R |
Bool |
Выход ШИМ+ |
0h или FFh |
4 |
08h |
R |
Bool |
Выход ШИМ- |
0h или FFh |
4 |
09h |
RW |
Int |
Уставка Н |
-999…9999 |
1,2,5,6,7 |
0Ah |
RW |
Ubyte |
Ширина гистерезиса Н |
0…255 |
1,2,5,6 |
0Bh |
RW |
Bool |
Выход Н |
0h или FFh |
4,7,8 |
0Ch |
RW |
Int |
Уставка L |
-999…9999 |
1,2,5,6,7 |
0Dh |
RW |
Ubyte |
Ширина гистерезиса L |
0…255 |
1,2,5,6 |
0Eh |
RW |
Bool |
Выход L |
0h или FFh |
4,7,8 |
Таблица 8 Регистровая модель одного канала приборов типа МЕТАКОН-614-ХХ-1.
Адрес |
Доступ |
Тип |
Название регистра. |
Диапазон допустимых значений |
Примечание |
00h |
R |
Ubyte |
Код канала данного типа |
04h |
-- |
01h |
R |
Int |
Результат измерения |
-999…9999 |
1,2,3,4 |
02h |
RW |
Int |
Уставка ПДД регулятора |
-999…9999 |
1,2,5,6 |
03h |
RW |
Uint |
Зона пропорциональности |
1…9999 |
1,2,5,6 |
04h |
RW |
Uint |
Постоянная интегрирования |
1…30000 |
5,6,9 |
05h |
RW |
Ubyte |
Постоянная дифференцирования |
0…255 |
5,6,9 |
06h |
RW |
Byte |
Сигнал управления |
-100…100 |
4,6,8,13 |
07h |
R |
Bool |
Выход “Больше” |
0h или FFh |
4 |
08h |
R |
Bool |
Выход “Меньше” |
0h или FFh |
4 |
09h |
RW |
Int |
Параметр Н |
-999…9999 |
1,2,5,6,7 |
0Ah |
RW |
Int |
Параметр h |
-999…9999 |
1,2,5,6,7 |
0Bh |
RW |
Bool |
Выход Н |
0h или FFh |
4,7,8 |
0Ch |
RW |
Int |
Параметр L |
-999…9999 |
1,2,5,6,7 |
0Dh |
RW |
Int |
Параметр l |
-999…9999 |
1,2,5,6,7 |
0Eh |
RW |
Bool |
Выход L |
0h или FFh |
4,7,8 |
0Fh |
RW |
Ubyte |
Режим работы |
0,1,2,4,6,8 |
5,7,8,10,11 |
10h |
RW |
Ubyte |
Номер циклограммы |
0…9 |
5,6 |
11h |
RW |
Ubyte |
Номер участка циклограммы |
0…9 |
5,6 |
12h |
RW |
Int |
Начальное значение циклограммы |
-999…9999 |
1,2,5,6 |
13h |
RW |
Ubyte |
Условие начала циклограммы |
0,1,2,3,4 |
5,10 |
14h |
RW |
Uint |
Время текущего участка |
0…9999 |
5,6,12 |
15h |
RW |
Int |
Значение текущего участка |
-999…9999 |
1,2,5,6 |
16h |
RW |
Ubyte |
Состояние выходов d текущего участка |
0…7 |
5,6,10 |
17h |
R |
Bool |
Выход d0 |
0h или FFh |
4 |
18h |
R |
Bool |
Выход d1 |
0h или FFh |
4 |
19h |
R |
Bool |
Выход d2 |
0h или FFh |
4 |
Таблица 9. Регистровая модель одного канала приборов типа МЕТАКОН-613-ХХ-1.
Адрес |
Доступ |
Тип |
Название регистра. |
Диапазон допустимых значений |
Примечание |
00h |
R |
Ubyte |
Код канала данного типа |
05h |
-- |
01h |
R |
Int |
Результат измерения |
-999…9999 |
1,2,3,4 |
02h |
RW |
Int |
Уставка ПИД регулятора |
-999…9999 |
1,2,5,6 |
03h |
RW |
Uint |
Зона пропорциональности |
1…9999 |
1,2,5,6 |
04h |
RW |
Uint |
Постоянная интегрирования |
1…30000 |
5,6,9 |
05h |
RW |
Ubyte |
Постоянная дифференцирования |
0…255 |
5,6,9 |
06h |
RW |
Byte |
Выходная мощность |
-100…100 |
4,6,8,14 |
07h |
R |
Bool |
Выход ШИМ+ |
0h или FFh |
4 |
08h |
R |
Bool |
Выход ШИМ- |
0h или FFh |
4 |
09h |
RW |
Int |
Уставка Н |
-999…9999 |
1,2,5,6,7 |
0Ah |
RW |
Ubyte |
Ширина гистерезиса Н |
0…255 |
1,2,5,6 |
0Bh |
RW |
Bool |
Выход Н |
0h или FFh |
4,7,8 |
0Ch |
RW |
Int |
Уставка L |
-999…9999 |
1,2,5,6,7 |
0Dh |
RW |
Ubyte |
Ширина гистерезиса L |
0…255 |
1,2,5,6 |
0Eh |
RW |
Bool |
Выход L |
0h или FFh |
4,7,8 |
0Fh |
RW |
Ubyte |
Режим работы |
0,1,2,4,6,8 |
5,7,8,10,11 |
10h |
RW |
Ubyte |
Номер циклограммы |
0…9 |
5,6 |
11h |
RW |
Ubyte |
Номер участка циклограммы |
0…9 |
5,6 |
12h |
RW |
Int |
Начальное значение циклограммы |
-999…9999 |
1,2,5,6 |
13h |
RW |
Ubyte |
Условие начала циклограммы |
0,1,2,3,4 |
5,10 |
14h |
RW |
Uint |
Время текущего участка |
0…9999 |
5,6,12 |
15h |
RW |
Int |
Значение текущего участка |
-999…9999 |
1,2,5,6 |
16h |
RW |
Ubyte |
Состояние выходов d текущего участка |
0…7 |
5,6,10 |
17h |
R |
Bool |
Выход d0 |
0h или FFh |
4 |
18h |
R |
Bool |
Выход d1 |
0h или FFh |
4 |
19h |
R |
Bool |
Выход d2 |
0h или FFh |
4 |
Таблица 10. Регистровая модель одного канала приборов типа МЕТАКОН-515-Х-1.
Адрес |
Доступ |
Тип |
Название регистра. |
Диапазон допустимых значений |
Примечание |
00h |
R |
Ubyte |
Код канала данного типа |
64h |
-- |
01h |
R |
Int |
Результат измерения |
-999…9999 |
1,2,3,15 |
02h |
RW |
Int |
Основная уставка ПИД регулятора |
-999…9999 |
1,2,5,6,16 |
03h |
RW |
Uint |
Зона пропорциональности |
1…9999 |
1,2,5,6 |
04h |
RW |
Uint |
Постоянная интегрирования |
1…9999 |
5,6,17 |
05h |
RW |
Uint |
Постоянная дифференцирования |
0…9999 |
5,6,20 |
06h |
RW |
Uint |
Скорость изменения задания (рампа) |
0…9999 |
5,6,18 |
07h |
RW |
Ubyte |
Выходная мощность |
0…100 |
5,6,15,19 |
08h |
RW |
Int |
Уставка H компаратора H |
-999…9999 |
1,2,5,6,7 |
09h |
RW |
Int |
Уставка h компаратора H |
-999…9999 |
1,2,5,6,7 |
0Ah |
RW |
Int |
Уставка H компаратора L |
-999…9999 |
1,2,5,6,7 |
0Bh |
RW |
Int |
Уставка h компаратора L |
-999…9999 |
1,2,5,6,7 |
0Ch |
RW |
Int |
Уставка H компаратора F |
-999…9999 |
1,2,5,6,7 |
0Dh |
RW |
Int |
Уставка h компаратора F |
-999…9999 |
1,2,5,6,7 |
0Eh |
RW |
Int |
Дополнительная уставка 0 ПИД регулятора |
-999…9999 |
1,2,5,6 |
0Fh |
RW |
Int |
Дополнительная уставка 1 ПИД регулятора |
-999…9999 |
1,2,5,6 |
10h |
RW |
Int |
Дополнительная уставка 2 ПИД регулятора |
-999…9999 |
1,2,5,6 |
11h |
RW |
Int |
Дополнительная уставка 3 ПИД регулятора |
-999…9999 |
1,2,5,6 |
12h |
R |
Bool |
Выход H/ШИМ |
0h или FFh |
15 |
13h |
R |
Bool |
Выход L |
0h или FFh |
15 |
14h |
R |
Bool |
Выход F/АВАРИЯ |
0h или FFh |
15 |
Прибор МЕТАКОН-515-Х-1 дополнительно поддерживает скорости передачи 38.4, 57.6 и 115.2 Кбод.
Следующие примечания относятся ко всем вышеуказанным таблицам:
Примечание 1. Физический смысл значения регистра зависит от типа используемого в приборе датчика и настроек прибора. Диапазон изменения может быть ограничен допустимыми значениями для конкретного типа датчика (см. Руководство по эксплуатации на данный прибор).
Примечание 2. Положение десятичной точки устанавливается в приборе при настройке на конкретный тип датчика и должно быть учтено опрашивающей программой при чтении данного регистра. Само значение регистра не содержит десятичной точки.
Примечание 3. В случае возникновения аварийной ситуации в приборе (см. Руководство по эксплуатации на данный прибор) этот регистр содержит число -32768.
Примечание 4. Содержимое регистра обновляется прибором 1 раз в секунду.
Примечание 5. Значение регистра сохраняется в энергонезависимой памяти при отключении питания прибора.
Примечание 6. В случае записи в регистр значения, выходящего за указанный диапазон, это значение перезаписывается в приборе верхним или нижним допустимым пределом. При этом прибор не сигнализирует об ошибке.
Примечание 7. Значение, записываемое в данный регистр, может быть изменено прибором в случае его несогласованности с другими параметрами прибора (см. Руководство по эксплуатации на данный прибор). При этом прибор не сигнализирует об ошибке.
Примечание 8. Запись в данный регистр допустима, но прибор может изменить записанное значение в соответствии со своим алгоритмом и режимом работы (см. Руководство по эксплуатации на данный прибор).
Примечание 9. Значение регистра задается в секундах.
Примечание 10. Регистр не может принимать никакие другие значения кроме указанных. Расшифровка значений указывается в Руководстве по эксплуатации на данный прибор.
Примечание 11. Регистр 0Fh (Режим работы) в модификациях МЕТАКОН 61Х может принимать следующие значения: 0 - автоматический режим, 1 - ручной режим, 2 - режим автонастройки, 4 - режим однократного исполнения циклограммы, 6 - режим циклического исполнения циклограммы, 8 - режим паузы в циклограмме. Все остальные значения сигнализируют о режиме аварии. Прибор может быть в любой момент переведен в один из указанных режимов (кроме режима аварии) путем записи в регистр соответствующего значения.
Примечание 12. Значение регистра измеряется в десятых долях минуты. Само значение регистра не содержит десятичной точки.
Примечание 13. Содержимое регистра отображает длительность текущего выходного импульса в процентах от периода ШИМ.
Примечание 14. Содержимое регистра отображает величину выходной мощности исполнительного устройства в процентах от минимальной до максимальной.
Примечание 15. Значение параметра обновляется 4 раза в секунду.
Примечание 16. При включенной функции переключения уставок (см. Руководство по эксплуатации на данный прибор) регистр доступен только для чтения. Уровень задания ПИД регулятора в этом режиме определяется дополнительными уставками и комбинацией сигналов управления.
Примечание 17. Значение регистра задается в 0.1*минут.
Примечание 18. Значение регистра измеряется в 0.01*ед.изм./мин. При задании регистру значения 0 функция рампы отключена.
Примечание 19. Запись в регистр происходит только при работе прибора в режиме ручного управления.
Примечание 20. Значение регистра задается в 0.1*секунд.
5. Приложение.
Алгоритм расчета контрольной суммы.
![](_data/objects/01661/image002.gif)
Условные обозначения:
§ CRC - текущее значение контрольной суммы;
§ BYTES_CTR - счетчик байтов
§ BITES_CTR - счетчик битов;
§ BYTES - указатель на текущий обрабатываемый байт;
§ A, B, C - вспомогательные переменные;
§ P_LENGTH - длинна пакета без байта контрольной суммы;
§ Å - операция поразрядного сложения по модулю 2;
§ SHR - операция поразрядного сдвига на 1 бит в право;
§ A.0 - самый младший бит переменной A.
Приведенный алгоритм вычисления контрольной суммы обладает следующими возможностями по обнаружению ошибок:
§ обнаруживает наличие любого нечетного количества ошибок;
§ все двойные ошибки;
§ любой блок ошибок длиной до 8 бит;
§ подавляющее большинство прочих более сложно распределенных ошибок.
В качестве примера предлагаем варианты программы расчета контрольной суммы на языках Basic, Си и Паскаль с комментариями. Просим прощения за возможные синтаксические ошибки в варианте на Basic, так как этот язык в наших разработках не используется.
На языке Basic
crc = &HFF ;Принять контрольную сумму равной &HFF
For i = 1 To p_length ;Цикл пока не обработаны все байты,
; (p_length - длина сообщения в байтах)
b = buffer(i) ;Взять текущий байт сообщения
For j = 1 To 8 ;Цикл по количеству битов в байте (8)
a = b Xor crc ;Логически сложить текущий байт с текущим значением crc
c = (a And &H1)*128 ;Выделить младший бит результата
If c = &H80 Then ;Младший бит результата равен 1?
crc = crc Xor &H18 ;Да. Логически сложить текущую crc с &H18
End If
crc = (crc / 2) Or c ;Сдвинуть crc вправо на 1 бит с заполнением
; старшего бита результатом предыдущих вычислений
b = b / 2 ;Сдвинуть текущий байт на 1 бит вправо
; с заполнением старшего бита нулем
Next j ;Завершение цикла по количеству битов в байте
Next i ;Завершение цикла по длине сообщения.
На языке Pascal (Turbo Pascal, Delphi)
I,J: Integer; //Счетчики циклов
CRC: Byte; //Контрольная сумма
AUX,DAT: Byte; //Временные переменные
Frame: array [0..39] of Byte //Сообщение
Length: Integer; //Длина сообщения (без контрольной суммы!)
CRC := $FF; //Инициализация контрольной суммы
for I := 0 to Length-1 do //Цикл по длине сообщения
begin
DAT := Frame[I]; //Заполнение DAT символом из сообщения
for J := 0 to 7 do //Цикл по байту сообщения (8 бит в байте)
begin
AUX := (DAT xor CRC) and 1; //Вычисление контрольной суммы:
if AUX = 1 then CRC := CRC xor $18; // xor – Исключающее ИЛИ
CRC := CRC shr 1; // and/or – Логическое И/ИЛИ
CRC := CRC or (AUX shl 7); // shl/shr – Сдвиг влево/вправо, не
DAT := DAT shr 1; // циклический, без переноса-заема
end; //Конец цикла по байту сообщения
end; //Конец цикла по длине сообщения
На языке C (ANSI)
int I,J; //Счетчики циклов
unsigned char CRC; //Контрольная сумма
unsigned char AUX,DAT; //Временные переменные
unsigned char Frame[40] //Сообщение
int Length; //Длина сообщения (без контрольной суммы!)
CRC=0xFF; //Инициализация контрольной суммы
for(I=0; I
{ DAT=Frame[I]; //Заполнение DAT символом из сообщения
for(J=0; J<8; J++) //Цикл по байту сообщения (8 бит в байте)
{ AUX=(DAT^CRC)&1; //Вычисление контрольной суммы:
if(AUX==1) CRC=CRC^0x18; // ^ – Исключающее ИЛИ
CRC=CRC>>1; // & / | – Логическое И/ИЛИ
CRC=CRC|(AUX<<7); // << / >> – Сдвиг влево/вправо, не
DAT=DAT>>1; // циклический, без переноса-заема
} //Конец цикла по байту сообщения
} //Конец цикла по длине сообщения
В следующей таблице представлены результаты расчета контрольной суммы по указанному алгоритму (в HEX - формате) для однобайтовых сообщений. Поле “Байт” содержит сообщение, поле “CRC” – его контрольную сумму.
Таблица 11. Пример расчета контрольной суммы для однобайтовых сообщений.
Байт |
CRC |
Байт |
CRC |
Байт |
CRC |
Байт |
CRC |
Байт |
CRC |
Байт |
CRC |
Байт |
CRC |
Байт |
CRC |
00 |
35 |
20 |
16 |
40 |
73 |
60 |
50 |
80 |
B9 |
A0 |
9A |
C0 |
FF |
E0 |
DC |
01 |
6B |
21 |
48 |
41 |
2D |
61 |
0E |
81 |
E7 |
A1 |
C4 |
C1 |
A1 |
E1 |
82 |
02 |
89 |
22 |
AA |
42 |
CF |
62 |
EC |
82 |
05 |
A2 |
26 |
C2 |
43 |
E2 |
60 |
03 |
D7 |
23 |
F4 |
43 |
91 |
63 |
B2 |
83 |
5B |
A3 |
78 |
C3 |
1D |
E3 |
3E |
04 |
54 |
24 |
77 |
44 |
12 |
64 |
31 |
84 |
D8 |
A4 |
FB |
C4 |
9E |
E4 |
BD |
05 |
0A |
25 |
29 |
45 |
4C |
65 |
6F |
85 |
86 |
A5 |
A5 |
C5 |
C0 |
E5 |
E3 |
06 |
E8 |
26 |
CB |
46 |
AE |
66 |
8D |
86 |
64 |
A6 |
47 |
C6 |
22 |
E6 |
1 |
07 |
B6 |
27 |
95 |
47 |
F0 |
67 |
D3 |
87 |
3A |
A7 |
19 |
C7 |
7C |
E7 |
5F |
08 |
F7 |
28 |
D4 |
48 |
B1 |
68 |
92 |
88 |
7B |
A8 |
58 |
C8 |
3D |
E8 |
1E |
09 |
A9 |
29 |
8A |
49 |
EF |
69 |
CC |
89 |
25 |
A9 |
06 |
C9 |
63 |
E9 |
40 |
0A |
4B |
2A |
68 |
4A |
0D |
6A |
2E |
8A |
C7 |
AA |
E4 |
CA |
81 |
EA |
A2 |
0B |
15 |
2B |
36 |
4B |
53 |
6B |
70 |
8B |
99 |
AB |
BA |
CB |
DF |
EB |
FC |
0C |
96 |
2C |
B5 |
4C |
D0 |
6C |
F3 |
8C |
1A |
AC |
39 |
CC |
5C |
EC |
7F |
0D |
C8 |
2D |
EB |
4D |
8E |
6D |
AD |
8D |
44 |
AD |
67 |
CD |
02 |
ED |
21 |
0E |
2A |
2E |
09 |
4E |
6C |
6E |
4F |
8E |
A6 |
AE |
85 |
CE |
E0 |
EE |
C3 |
0F |
74 |
2F |
57 |
4F |
32 |
6F |
11 |
8F |
F8 |
AF |
DB |
CF |
BE |
EF |
9D |
10 |
A8 |
30 |
8B |
50 |
EE |
70 |
CD |
90 |
24 |
B0 |
07 |
D0 |
62 |
F0 |
41 |
11 |
F6 |
31 |
D5 |
51 |
B0 |
71 |
93 |
91 |
7A |
B1 |
59 |
D1 |
3C |
F1 |
1F |
12 |
14 |
32 |
37 |
52 |
52 |
72 |
71 |
92 |
98 |
B2 |
BB |
D2 |
DE |
F2 |
FD |
13 |
4A |
33 |
69 |
53 |
0C |
73 |
2F |
93 |
C6 |
B3 |
E5 |
D3 |
80 |
F3 |
A3 |
14 |
C9 |
34 |
EA |
54 |
8F |
74 |
AC |
94 |
45 |
B4 |
66 |
D4 |
03 |
F4 |
20 |
15 |
97 |
35 |
B4 |
55 |
D1 |
75 |
F2 |
95 |
1B |
B5 |
38 |
D5 |
5D |
F5 |
7E |
16 |
75 |
36 |
56 |
56 |
33 |
76 |
10 |
96 |
F9 |
B6 |
DA |
D6 |
BF |
F6 |
9C |
17 |
2B |
37 |
08 |
57 |
6D |
77 |
4E |
97 |
A7 |
B7 |
84 |
D7 |
E1 |
F7 |
C2 |
18 |
6A |
38 |
49 |
58 |
2C |
78 |
0F |
98 |
E6 |
B8 |
C5 |
D8 |
A0 |
F8 |
83 |
19 |
34 |
39 |
17 |
59 |
72 |
79 |
51 |
99 |
B8 |
B9 |
9B |
D9 |
FE |
F9 |
DD |
1A |
D6 |
3A |
F5 |
5A |
90 |
7A |
B3 |
9A |
5A |
BA |
79 |
DA |
1C |
FA |
3F |
1B |
88 |
3B |
AB |
5B |
CE |
7B |
ED |
9B |
04 |
BB |
27 |
DB |
42 |
FB |
61 |
1C |
0B |
3C |
28 |
5C |
4D |
7C |
6E |
9C |
87 |
BC |
A4 |
DC |
C1 |
FC |
E2 |
1D |
55 |
3D |
76 |
5D |
13 |
7D |
30 |
9D |
D9 |
BD |
FA |
DD |
9F |
FD |
BC |
1E |
B7 |
3E |
94 |
5E |
F1 |
7E |
D2 |
9E |
3B |
BE |
18 |
DE |
7D |
FE |
5E |
1F |
E9 |
3F |
CA |
5F |
AF |
7F |
8C |
9F |
65 |
BF |
46 |
DF |
23 |
FF |
00 |
|
Еще один пример - типичный запрос на получение измеренного значения второго канала у прибора с адресом 1 выглядит в HEX – формате так:
Таблица 12.
DEV |
CHA |
REG |
RD |
CRC |
01 |
01 |
01 |
00 |
0B |
То же самое, но для прибора с адресом 2:
Таблица 13.
DEV |
CHA |
REG |
RD |
CRC |
02 |
01 |
01 |
00 |
83 |
|