ПРОТОКОЛ ОБМЕНА ИНФОРМАЦИЕЙ С ПК ДЛЯ РАСХОДОМЕРА ВР-1 (MODBUS)
Расходомер - счетчик ВР-1 обеспечивает вывод текущих и архивных значений параметров измерения на внешние устройства в виде сигналов последовательного интерфейса RS485.
Протоколом связи по интерфейсу RS485 является протокол Modbus, скорость обмена - 4800 бит / С.
1 Формат каждого байта, который принимается и передается контроллерами
следующий:
1 start bit, 8data bits, 1 stop bit
(No Parity bit).
LSB (Least Significant bit) младший бит передается
первым.
Кадр Modbus сообщения следующий:
Таблица 1
DEVICE
ADDRESS
|
FUNCTION
CODE
|
DATA
FILD
|
CRC CHECK
|
8 bits
|
8 bits
|
K* 8 bits
|
16 bits
|
а)
Device address. Адрес устройства
Адрес
контроллера (slave -
устройства) в сети (1 - 99), по которому обращается master - устройство со своим запросом. Когда slave - устройство посылает свой ответ,
оно размещает этот же (собственный) адрес в этом поле, чтобы master - устройство «знало», какое slave -устройство отвечает на
запрос.
б) Function code.
Функциональный код операции
Счетчик-расходомер
поддерживает следующие функции:
Таблица
2
FUNCTION CODE
|
Функция
|
67
(пользовательский)
|
Чтение часового
архива
|
68
(пользовательский)
|
Чтение суточного
архива
|
69
(пользовательский)
|
Чтение месячного
архива
|
70
(пользовательский)
|
Чтение текущих
значений параметров
|
в) Data Fild. Поле передаваемых
данных
Поле данных сообщения, посылаемого master - устройством удаленном
контроллеру содержит добавочную информацию, которая необходима slave - устройству для детализации функции. Она включает:
Поле данных сообщения, посылаемого master - устройством удаленном
контроллеру содержит добавочную информацию, которая необходима slave - устройству для детализации функции. Она включает:
-
Начальный адрес (час, число, месяц) и количество
регистров для функции 67;
-
Начальный адрес (число, месяц, год) и количество
регистров для функции 68;
-
Начальный адрес (месяц, год, 0x00) и количество регистров для
функции 69;
-
Начальный адрес и количество регистров для функции 70;
Поле данных сообщения, посылаемого в ответ
удаленным контроллером содержит:
-
Количество байт
ответа на функции 67-70 и содержимое запрашиваемых регистров. Содержимое
запрашиваемых регистров представлено в
коде ASCII.
г) CRC Check. Поле значения контрольной суммы
Значение этого
поля - результат контроля с помощью циклического избыточного кода (Сyclical Redundancy Check
- CRC).
После
формирования сообщения (address,
fuction code,
data) передающее
устройство подсчитывает CRC
код и помещает его в конец сообщения.
Приемное устройство рассчитывает CRC код принятого сообщения и
сравнивает его с переданным CRC
кодом. Если CRC код не
совпадает, это означает, что имеет место коммуникационная ошибка. Устройство не
выполняет действий и не дает ответ в случае обнаружения CRC ошибки.
Последовательность
CRC расчетов:
-
Загрузка CRC регистра (16 бит) единицами
0хFFFF;
-
Исключающее ИЛИ с первыми 8
бит байта сообщения с содержимым CRC регистра;
-
Сдвиг результата на один бит вправо;
-
Если сдвигаемый бит =1, исключающее
ИЛИ содержимого регистра с 0хА001 значением;
-
Если сдвигаемый бит нуль, повторить шаг 3;
-
Повторить шаги 3,4 и 5 пока 8 сдвигов не будут иметь
место;
-
Исключающее ИЛИ со следующими
8 бит байта сообщения с содержимым CRC регистра;
-
Повторить шаги от 3 до 7 пока все байты сообщения не
обработаются;
-
Конечное содержимое регистра и будет значением
контрольной суммы.
Когда CRC размещается в конце
сообщения, младший байт CRC
передается первым.
Пример расчета
контрольной суммы на языке СИ.
unsigned int crc_calculation (unsigned char
*buff, unsigned char number_byte)
{
unsigned int crc;
unsigned char bit_counter;
crc = 0xffff; // initialize crc
while (number_byte > 0)
{
crc ^ = *buff++; //
crc XOR with data
bit_counter = 0; //
reset counter
while (bit_counter < 8)
{
if (crc &
0x0001)
{
crc >> =
1; // shift to the right 1 pozition
crc ^ = 0xa001; // crc XOR with 0xa001
}
else
{
crc >> =
1; // shift to the right 1 pozition
}
bit_counter++; // increase counter
}
number_byte--;
}
return
(crc);
}
2 Формат команд
2.1 Чтение часового архива данных (67).
Используется
следующий формат для передачи запросов от компьютера и ответов от удаленного
контроллера.
Запрос
устройству. SENT TO DEVICE:
Таблица 3
DEVICE
ADDRESS
|
FUNCTION
CODE (67)
|
DATA
|
CRC
|
HOURS
|
DATE
|
MONTH
|
NUMBER
OF
REGISTERS
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
LB HB
|
ПРИМЕЧАНИЕ: NUMBER OF REGISTERS для ВР-1 при чтении
часового архива всегда равно 20.
Ответ устройства. RETURNED FROM DEVICE.
Таблица 4
CRC
|
2 byte (LB HB)
|
DATA
|
CODE
EVENT
|
2 byte (HB LB)
|
MINUT
|
2 byte (HB LB)
|
CODE
EVENT
|
2 byte (HB LB)
|
MINUT
|
2 byte (HB LB)
|
CODE
EVENT
|
2 byte (HB LB)
|
MINUT
|
2 byte (HB LB)
|
CODE
EVENT
|
2 byte (HB LB)
|
MINUT
|
2 byte (HB LB)
|
YEAR
|
2 byte (HB LB)
|
MONTH
|
2 byte (HB LB)
|
DATE
|
2 byte (HB LB)
|
HOUR
|
2 byte (HB LB)
|
TIME WORK (час)
|
8 byte (HB LB)
|
SUMMARY VOLUME (м3)
|
8 byte (HB LB)
|
NUMBER OF BYTE
|
1 byte
|
FUNCTION
CODE
|
1 byte
|
DEVICE ADDRESS
|
1 byte
|
2.2
Чтение суточного архива данных (68).
Используется
следующий формат для передачи запросов от компьютера и ответов от удаленного
контроллера.
Запрос
устройству. SENT TO DEVICE:
Таблица 5
DEVICE
ADDRESS
|
FUNCTION
CODE (68)
|
DATA
|
CRC
|
DATE
|
MONTH
|
YEAR
|
NUMBER
OF
REGISTERS
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
LB HB
|
ПРИМЕЧАНИЕ: NUMBER OF REGISTERS для ВР-1 при чтении
суточного архива всегда равно 12.
Ответ устройства. RETURNED FROM DEVICE.
Таблица 6
CRC
|
2 byte (LB HB)
|
DATA
|
YEAR
|
2 byte (HB LB)
|
MONTH
|
2 byte (HB LB)
|
DATE
|
2 byte (HB LB)
|
HOUR
|
2 byte (HB LB)
|
TIME WORK (час)
|
8 byte (HB LB)
|
SUMMARY VOLUME (м3)
|
8 byte (HB LB)
|
NUMBER OF BYTE
|
1 byte
|
FUNCTION
CODE
|
1 byte
|
DEVICE ADDRESS
|
1 byte
|
2.3 Чтение месячного архива данных (69).
Используется
следующий формат для передачи запросов от компьютера и ответов от удаленного
контроллера.
Запрос
устройству. SENT TO DEVICE:
Таблица 7
DEVICE
ADDRESS
|
FUNCTION
CODE (68)
|
DATA
|
CRC
|
MONTH
|
YEAR
|
0x00
|
NUMBER OF REGISTERS
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
1 byte
|
LB HB
|
ПРИМЕЧАНИЕ: для
ВР-1 при чтении месячного архива NUMBER OF REGISTERS всегда равно 12.
Ответ
устройства (RETURNED FROM DEVICE)
соответствует таблице 6.
2.4 Чтение текущих данных (70).
Используется
следующий формат для передачи запросов от компьютера и ответов от удаленного
контроллера.
Запрос
устройству. SENT TO DEVICE:
Таблица 8
DEVICE
ADDRESS
|
FUNCTION
CODE (70)
|
DATA
|
CRC
|
STARTING REGISTERS
|
NUMBER OF REGISTERS
|
1 BYTE
|
1 BYTE
|
HB LB
|
HB LB
|
LB HB
|
ПРИМЕЧАНИЕ: для
ВР-1 при чтении текущих данных STARTING REGISTERS
равно 10, а NUMBER OF REGISTERS равно 20.
Ответ устройства. RETURNED FROM DEVICE.
Таблица 9
CRC
|
2 byte (LB HB)
|
DATA
|
DOZE TASK (м3)
|
8 byte (HB LB)
|
DOZE CURRENT (м3)
|
8 byte (HB LB)
|
EXPENDITURE (м3/час)
|
8 byte (HB LB)
|
TIME WORK (час)
|
8 byte (HB LB)
|
SUMMARY VOLUME (м3)
|
8 byte (HB LB)
|
NUMBER OF BYTE
|
1 byte
|
FUNCTION
CODE
|
1 byte
|
DEVICE ADDRESS
|
1 byte
|
ПРИМЕЧАНИЕ:
1 Тайм-аут ожидания ответа устройства не менее 600 мС.
2 Точность представления значений параметров - см. п.1.2.3 Руководство по эксплуатации ВР-1.
3. Частота
запроса текущих и архивных данных задается пользователем.