Протокол обмена данных со счётчиком
Диалог между управляющим компьютером (в дальнейшем УК) и счетчиком основан на принципе - главный-подчиненный. Роль главного всегда играет УК, а счетчик (счетчики) может быть только подчиненным. Для работы со счетчиком можно использовать два варианта протокола:
1) протокол с адресацией по сетевому адресу (в дальнейшем базовый протокол) может использоваться для любых счетчиков;
2) протокол с адресацией по заводскому номеру (в дальнейшем протокол с расширенной адресацией) может использоваться для счетчиков, начиная с версии 1.15.
Основные положения базового протокола приведены ниже:
1) Протокол предусматривает одно главное и до 254 подчиненных устройств.
2) Сообщения, которыми обмениваются между собой главное и подчиненные устройства, помещаются в пакеты. Структура пакета представлена на рисунке 4.1.
3) Каждое подчиненное устройство, включенное в сеть, имеет свой уникальный адрес.
4) Для широковещательного обмена зарезервированы два адреса 0 и 255. Все подчиненные устройства принявшие пакет с адресом 0 или 255 обязаны его исполнить. Пакет, содержащий 0 адрес, требует ответа от подчиненного устройства, а пакет с адресом 255 ответа не требует.
5) Для повышения надежности передачи используется избыточный циклический код (CRC).
6) Байты, принадлежащие одному пакету должны передаваться непрерывным потоком.
7) Тайм-аут между байтами больший, чем время передачи 7 байт является признаком завершения пакета. Если скорость обмена меньше 150 бод, тайм-аут равен 500 мс.
8) Если в пакет помещается тип данных, состоящий из нескольких байт, то самый младший байт типа данных должен следовать первым.
Рисунок 4.1 – Структура пакета отправляемых данных
Поля «адрес», «функция» и «CRC» составляют обрамление пакета, а поле «сообщение» – содержимое пакета.
Поле «адрес» имеет размерность 1 байт и содержит сетевой адрес счетчика или широковещательный адрес, поле «функция» тоже однобайтное и определяет функцию, выполняемую пакетом. Допустимые значения этого поля будут подробно определены ниже.
Поле «CRC» это 2-х байтное число представляющее собой результат шифрования циклическим кодом полей «адрес», «функция» и «сообщение». Более подробно о контроле циклическим кодом и пример его расчета будут приведены ниже.
Наполнение поля «сообщение» зависит от функции выполняемой пакетом. Инициатива обмена всегда принадлежит УК, он формирует пакет запроса, передает его в линию и ожидает ответ от счетчика. В свою очередь все счетчики «прослушивают» линию и если пакет запроса принят без искажений, проверяют поле «адрес» и если оно равно 0 или 255, или совпадает с собственным адресом, то обнаруживший совпадение счетчик приступает к выполнению команды. После выполнения команды снова анализируется адрес и если он не равен 255, то отправляется ответ в линию. Время выполнения запроса зависит от его типа. Время выполнения запросов при чтении параметров из счетчика, как правило, не превышает 0,2 с. Модификация или обнуление параметров счетчика может составлять от 1 до 2 с.
В ответном пакете поле «адрес» совпадает с соответствующим полем команды. Если счетчик может обработать команду, то поле «функция» не изменяется, в противном случае старший бит этого поля устанавливается в 1. Наполнение поля «сообщение» зависит от команды.
При использовании команд модификации и обнуления необходимо иметь в виду, что не все параметры могут быть изменены, а также то, что выполнение этих команд возможно только при отключении защиты.
Начиная с версии 1.15, появилась возможность адресации по заводскому номеру. Структура пакета отправляемых данных представлена на рисунке 4.2.
Рисунок 4.2 – Структура пакета отправляемых данных
Начиная с версии 1.21, появилась возможность передачи длины, и номера пакета. Структура пакета отправляемых данных представлена на рисунке 4.3.
Рисунок 4.3 – Структура пакета отправляемых данных
При этом полностью сохраняется возможность работы со счетчиком по его сетевому адресу. Основные положения протокола с расширенной адресацией приведены ниже:
1) протокол предусматривает одно главное и любое количество подчиненных устройств (подчиненные устройства должны иметь уникальные заводские номера);
2) сообщения, которыми обмениваются между собой главное и подчиненные устройства, помещаются в пакеты. Структуры пакетов были представлены выше;
3) для повышения надежности передачи используется избыточный циклический код (CRC);
4) байты, принадлежащие одному пакету должны передаваться непрерывным потоком для пакетов типа 1, для пакетов типа 2 и 3 допускаются разрывы в потоке данных длительностью не более 500 мс;
5) тайм-аут между байтами больший, чем время передачи 7 байт является признаком завершения пакета для пакетов типа 1, для пакетов типа 2 и 3 признаком завершения пакета является прием количества байт указанных в длине пакета; если в пакет помещается тип данных, состоящий из нескольких байт, то самый младший байт типа данных должен следовать первым.
Поле «заголовок» всегда постоянно и содержит два байта [0xFF, 0x7F]. Данное поле означает, что будет использоваться расширенная адресация.
Поле «len» содержит байт длины пакета. Длина пакета считается целиком, с учетом заголовка и контрольной суммы.
Поле «num» содержит однобайтный номер пакета. Номер пакета в ответном сообщении счетчика должен совпадать с номером пакета в запросе. Таким образом, можно проверить, что ответ пришел именно на наш запрос.
Поле «адрес» содержит сетевой адрес счетчика, которому предназначен запрос. Нулевое значение адресует счетчики с любым сетевым адресом. Размерность поля составляет один байт.
Маска заводского номера может содержать любые символы заводского номера и символ «?». Размер данного поля 8 байт. Символ «?» означает, что в данной позиции может находиться любой символ. Например, маска «1???????» адресует счетчики с заводскими номерами, начинающимися на «1», а маска «????????» адресует все счетчики (широковещательный запрос).
Размер и содержание полей «функция» и «сообщение» аналогично таковым в базовом протоколе.
Поле «инверсия CRC» это 2-х байтное число, представляющее собой результат шифрования циклическим кодом всего тела пакета. Рассчитывается так же как для базового протокола и инвертируется побитно.
При использовании расширенной адресации можно организовать поиск счетчиков по их заводским номерам. Подробнее про алгоритм поиска счетчиков будет описано ниже.