Разработка протокола обмена данными для лабораторного стенда систем управления электроприводом

Обмен информацией между устройствами, входящими в состав автоматизированной системы (компьютерами, контроллерами, датчиками, исполнительными устройствами, электроприводами), происходит в общем случае через промышленную сеть.

Промышленной сетью называют комплекс оборудования и программного обеспечения, которые обеспечивают обмен информацией (коммуникацию) между несколькими устройствами.

Соединение промышленной сети с ее компонентами (устройствами, узлами сети) выполняется с помощью интерфейсов. Сетевым интерфейсом называют логическую и (или) физическую границу между устройством и средой передачи информации. При существенных модификациях внутренней структуры устройства или программного обеспечения интерфейс остается без изменений, что является одним из признаков, позволяющих выделить интерфейс в составе оборудования. Наиболее важными параметрами интерфейса являются пропускная способность и максимальная длина подключаемого кабеля. Промышленные интерфейсы обычно обеспечивают гальваническую развязку между соединяемыми устройствами. Наиболее распространены в промышленной автоматизации последовательные интерфейсы: RS-232; RS-422; RS-485; Ethernet; CAN; HART; AS-интерфейс.

Для обмена информацией взаимодействующие устройства должны иметь одинаковый протокол обмена. В простейшей форме протокол – это набор правил, которые управляют обменом информацией. Он определяет синтаксис и семантику сообщений, операции управления, синхронизацию и состояния при коммуникации. Протокол может быть реализован аппаратно, программно или программно-аппаратно. Наиболее распространены в промышленной автоматизации протоколы: MODBUS; DMX512; WAKE; DCON; CAN; PROFIBUS; Industrial Ethernet; BACnet; LON-Works; AS-Interface; HART.

В распределенных системах может быть пять типов данных:

  • сигналы — это результаты измерений, получаемые от датчиков и измерительных преобразователей. Их «время жизни» очень короткое, поэтому часто требуется получить только последние данные и в максимально короткий срок;
  • команды — это сообщения, которые вызывают некоторые действия, например, закрытие клапана или включение ПИД-регулятора;
  • состояние показывает текущее или будущее состояние системы, в которое она должна перейти.;
  • событие наступает обычно при достижении текущим параметром граничного значения. Например, событием может быть выход температуры за технологически допустимую границу;
  • запрос — это команда, посылаемая для того, чтобы получить ответ. Примером может быть запрос серверу, который выдает на него ответ.

Структура протокола следующая: пакет всегда начинается управляющим кодом STX. Затем следует необязательный байт адреса, после которого идет байт количества данных. За ним следует байт типа данных, байт команды и собственно байты данных. Завершают посылку два байта контрольной суммы CRC-16 и управляющий код конца посылки EOT. Рассмотрим семантику сообщения протокола. Описание приведено в таблицах 1 и 2, пример сообщения протокола приведен в таблице 3.

Таблица 1 – Синтаксис сообщения

Синтаксис сообщения: [STX][ADR][N][Data][CRC][EOT]
Начало посылки Адрес устройства Длинна посылки Посылка Посылка Контрольная сумма Конец посылки
STX ADR N Data1 DataN CRC EOT

Таблица 2 – Синтаксис данных

Синтаксис данных (Data1 — DataN): [TYPE][CMD][DATA1][DATA2]
Тип данных Команда Младший байт информации Старший байт информации
TYPE CMD Data1 Data2

Таблица 3 – Пример сообщения

1b 2b 3b 4b 5b 6b 7b 8b 9b 10b
0x02 0x01 0x04 0x10 0x20 0x22 0x34 0x3C 0xC9 0x04
STX ADR N TYPE CMD DATA1 DATA2 CRC1 CRC2 EOT

Алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных CRC является практическим приложением помехоустойчивого кодирования, основанном на определённых математических свойствах циклического кода.

Байты контрольной суммы CRC-16 могут отсутствовать в некоторых реализациях протокола. Контрольная сумма CRC рассчитывается перед операцией байтстаффинга для всего пакета, начиная с байта STX, и заканчивая последним байтом данных. Контрольная сумма CRC состоит из двух байт. Контрольная сумма вычисляется передающим устройством и добавляется в конец сообщения. Принимающее устройство вычисляет контрольную сумму в процессе приема и сравнивает ее с полем CRC принятого сообщения.

Алгоритм CRC базируется на свойствах деления с остатком двоичных многочленов, то есть многочленов над конечным полем GF2. Значение CRC является по сути остатком от деления многочлена, соответствующего входным данным, на некий фиксированный порождающий многочлен. Каждой конечной последовательности битов a0, a1,…aN-1 взаимно однозначно сопоставляется двоичный полином

2_последовательность коэффициентов которого представляет собой исходную последовательность. Например, последовательность битов 1011010 соответствует многочлену:

3_Значение контрольной суммы в алгоритме с порождающим многочленом G(x) степени N определяется как битовая последовательность длины N, представляющая многочлен R(x), получившийся в остатке при делении многочлена P(x), представляющего входной поток бит, на многочлен G(x)

4_где

R(x) – многочлен, представляющий значение CRC.

P(x) – многочлен, коэффициенты которого представляют входные данные.

G(x) – порождающий многочлен.

N – степень порождающего многочлена.

Листинг процедуры подсчета контрольной суммы табличным методом приведен ниже:

QByteArray Class_Protocol::calc_CRC (QByteArray mes_buf){
quint16 sum_byte[2]; QByteArray answerCRC;
int i, mes_length = mes_buf.length()-1;
sum_byte[0]=sum_byte[1]=sum_byte[2]=0;
for (int tempi = 0; tempi<mes_length; ++tempi ){
sum_byte[2]=sum_byte[1]; sum_byte[1]=sum_byte[0]; sum_byte[0]=0;
i = sum_byte[2]^(mes_buf[tempi] & 0xFF);
sum_byte[0] ^= (check_sum_tableL[i]);
sum_byte[1] ^= (check_sum_tableH[i]);}
answerCRC.append(sum_byte[0]); answerCRC.append(sum_byte[1]);
return answerCRC;}

Передача ESC-последовательности. Для передачи данных используются все возможные значения байта (00h…FFh). Для передачи служебной информации зарезервированы два коды: STX, EOT и т.д. Если в потоке данных встречаются байты, значения которых совпадают с управляющими кодами, производится подмена этих байт ESC — последовательностями. Такой механизм называют байтстаффингом (byte stuffing). Код STX заменяется последовательностью <ESC>, <TSTX>, а код EOT — последовательностью <ESC>, <TEND>. Коды TSTX и TEND являются управляющими только в ESC — последовательностях, поэтому при передаче данных они в подмене не нуждаются. Примеры кодирования сообщения приведены в таблицах 4 -7.

Пример: пусть STX = 0х02; EOT = 0х04; ESC = 0х1F;

Результирующие последовательности будут иметь вид:

[A]=[C][A+E], a [B]=[C][B+E],

где Е – кодирующий символ сдвига, Е = 0х20.

Таблица 4 – Пример одного из вариантов сообщения до байтстаффинга

1b 2b 3b 4b 5b 6b 7b 8b
0х02 0х01 0х02 0х10 0х11 0х14 0х74 0х04
STX ADR N TYPE CMD CRC1 CRC2 EOT

Таблица 5 – Пример одного из вариантов сообщения после байтстаффинга

1b 2b 3b 4b 5b 6b 7b 8b 9b
0х02 0х01 0х1F 0х22 0х10 0х11 0х14 0х74 0х04
STX ADR N TYPE CMD CRC1 CRC2 EOT

Таблица 6 – Пример одного из вариантов сообщения до байтстаффинга

1b 2b 3b 4b 5b 6b 7b 8b 9b 10b
0x02 0x01 0x04 0x10 0x20 0x22 0x34 0x3C 0xC9 0x04
STX ADR N TYPE CMD DATA1 DATA2 CRC1 CRC2 EOT

Таблица 7 – Пример одного из вариантов сообщения после байтстаффинга

1b 2b 3b 4b 5b 6b 7b 8b 9b 10b 11b
0x02 0x01 0x1F 0x24 0x10 0x20 0x22 0x34 0x3C 0xC9 0x04
STX ADR N TYPE CMD DATA1 DATA2 CRC1 CRC2 EOT

В таблицах 8 – 9 приведена привязка кодирующих символов к типу команды и команде.

Таблица 8 – Привязка кодирующего символа к типу команды

TYPE Назначение Источник
0x10 Сигнал Запрос
0x11 Сигнал Ответ
0x12 Команда Запрос
0x13 Команда Ответ
0x14 Состояние Запрос
0x15 Состояние Ответ
0x16 Событие Запрос
0x17 Событие Ответ
0x18 Запрос Запрос
0x19 Запрос Ответ

Таблица 9 – Привязка кодирующего символа к команде

CMD Назначение
0x01 Действие 1
0x55 Действие N
0x56 Установка параметра1
0xAA Установка параметра N
0xFE Запрос параметра N-1
0xFF Запрос параметра N

Листинг кодов при обмене данными с устройством приведен ниже:

02 1F 21 10 10 B5 53 04
02 05 11 00 EE 1F 26 00 3F BE 04
02 1F 22 10 13 44 10 04
02 03 11 13 03 1F 24 75 04
02 1F 22 10 10 14 49 04
02 1F 24 11 10 00 00 4D 65 04
02 1F 22 10 10 14 49 04
02 1F 24 11 10 00 00 4D 65 04
02 1F 22 10 1F 35 E4 A2 04
02 05 11 1F 35 00 EC 00 5F FF 04
02 1F 22 10 12 74 27 04
02 1F 26 11 12 00 31 DE FF 65 8D 04

 Список использованной литературы

1. Зайцев В. П. Доклад. Передача данных в промышленных сетях. Молодежь и наука 2014. — Красноярск: Сиб. федер. ун-т., 2014.

2. http://bookasutp.ru/Chapter2_1.aspx;

3. http://redblot.ru/archives/371;

4. https://ru.wikipedia.org/wiki/циклический_избыточный_код;

5. http://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing.

You may also like...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>