В последнее время протокол DLMS/COSEM стал активно применяться в приборах учета (счетчики электрической энергии, тепла, воды, газа) отечественного производства. Почти у каждой компании, специализирующейся на выпуске микроконтроллеров, имеется, сертифицированный стек DLMS/COSEM, используя который можно сократить стоимость и время разработки прибора учета, поддерживающий данный протокол. В этой статье речь пойдет о стеке DLMS/COSEM для микроконтроллеров семейства MSP430 компании Texas Instruments.

Стек DLMS/COSEM от компании TI имеет следующие особенности:

  • Поддерживаются все интерфейсные классы COSEM.
  • Поддерживаются три уровня ассоциации: открытый доступ (no security), низкий уровень секретности (low security) и высокий уровень секретности (high security). Доступ к прибору учета в режиме высокого уровня секретности осуществляется с применением 4-стадийной аутентификацией, основанной на алгоритме AES128.
  • Поддерживается только LN (long name) адресация.
  • Поддерживается одна, двух и четырех байтовая адресация.
  • Поддерживаются сервисы GET, SET, GET WITH BLOCK, SET WITH BLOCK, ACTION, а также селективный доступ для объектов класса Profile Generic.
  • Требуемый размер памяти для хранения стека – 24 кБ.
  • Требуемый размер оперативной памяти – 1,8кБ.

Для того чтобы «пощупать» стек нам понадобятся:

  1. Среда разработки IAR Embedded Workbench for MSP430;
  2. DLMS/COSEM клиент, возьмем бесплатный с открытым исходным кодом DLMSDirector от компании Gurux;
  3. Оценочная плата EVM430-F6779;
  4. Отладчик/программатор MSP-FET430UIF.

Загрузка и распаковка


Стек DLMS/COSEM доступен по адресу (http://www.ti.com/tool/dlmsobj-eval), для его загрузки необходимо иметь учетную запись TI. Сам стек упакован в дистрибутив под названием DLMS-4.0.6-windows-installer. После его установки, в папке установки будет лежать zip-папка «DLMS_Object» в которой находятся файлы стека.

Библиотека состоит из следующих файлов:

  • iec62056_demo.c: В этом файле инициализируется вся периферия микроконтроллера и конечный автомат HDLC;
  • uart_comms.c: Файл конфигурации для модуля UART;
  • iec62056_link.r43: В этом файле реализованы HDLC и MAC уровни;
  • server_msgs.r43: В этом файле реализован прикладной уровень COSEM;
  • config.c: Основной конфигурационный файл. В этом файле можно удалять или добавлять параметры для списка объектов (object list);
  • app_server_msgs.c: В этом файле пишутся функции для извлечения данных из памяти и предоставления их библиотеке DLMS;
  • config.h: Макроопределения и прототипы функций для файла config.c;
  • cosem.h: Определения всех констант, используемых в прикладном уровне COSEM;
  • iec_62056_link.h: Макроопределения и прототипы функций для HDLC уровня;

Все эти файлы уже собраны в проект под название dlms_obj.eww.

Запуск проекта


В этой части мы запустим демонстрационный проект и посмотрим, как представляются объекты COSEM. Для этого, открываем файл dlms_obj.eww в IAR for MSP430 и выбираем требуемый микроконтроллер, в нашем случае это MSP430F67791.



Собираем проект и программируем контроллер. Открываем программу DLMSDirector и добавляем новое устройство со следующими параметрами:



Нажимаем кнопку «ОК». Затем в дереве «Devices» выбираем наше устройство, нажимаем кнопку «Connect» и … получаем вот такую ошибку:



Исправляется она легко, открываем файл uart_comms.c проекта dlms_obj.eww и в строке 132 видим, что при конфигурировании UART была допущена «опечатка»:



Правильная строка должна иметь вид:

P3SEL0 |=(BIT0|BIT1);

После исправления, связь с прибором учета успешно устанавливается, в результате чего становится доступной кнопка «Read», а в статусной строке мы видим «Ready»:



Для загрузки информации с прибора учета нажимаем кнопку «Read». Процесс этот не быстрый, поэтому придется чуть-чуть подождать. В результате получаем дерево из объектов COSEM:



В данном стеке, в открытом доступе, по умолчанию, отображается пять объектов:

  • 0.0.1.0.0.255 – отображает текущее время в приборе учета;
  • 0.0.40.0.0.255 – отображает информацию о текущей ассоциации;
  • 0.0.40.0.1.255 – отображает информации об ассоциации №1;
  • 0.0.41.0.0.255 – отображает так называемое SAP назначение;
  • 0.0.42.0.0.255 – отображает логическое имя устройства, по сути – серийный номер счетчика.

Например, информация о текущем времени в приборе учета представляется следующим образом:



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

Для доступа к прибору учета в режиме низкой секретности необходимо использовать следующие настройки (Пароль по умолчанию — 00000000):



В этом режиме доступно гораздо больше объектов COSEM:



Добавление нового объекта COSEM


Для добавления нового объекта открываем файл config.c проекта dlms_obj.eww, находим структуру:

const struct object_desc_s object_list[]

и добавляем в нее следующую строку:

{ASSOC_PC_MR_US, CLASS_ID_DATA, 0, {  0,   0,  96,   1,   0, 255}, 2,  Obj_Meter_Sr_No, 0, NULL}

Где:

  • ASSOC_PC_MR_US – определяет видимость объекта, в данном случае объект будет виден и в режиме открытого доступа, и в режиме доступа с низким уровнем секретности и в режиме доступа с высоким уровнем секретности;
  • CLASS_ID_DATA – идентификатор интерфейсного класса, в данном случае объект относится к классу Data;
  • 0 – версия класса (0);
  • { 0, 0, 96, 1, 0, 255} – логическое имя объекта;
  • 2 – количество атрибутов (2);
  • Obj_Meter_Sr_No – указатель на список атрибутов;
  • 0 – количество методов (0);
  • NULL – указатель на список методов (методы отсутствуют).

Затем создаем структуру со списком атрибутов в том же файле:

static const struct attribute_desc_s Obj_Meter_Sr_No[] =
{
    {1, ACCESS_PCR__MRR__USR_, TAG_OCTET_STRING,    (void *) object_list[11].instance_id, NULL},
    {2, ACCESS_PCR__MRR__USR_, TAG_OCTET_STRING,    (void *) Meter_Sr_No, NULL},
};

Где:

  • Первый параметр – номер атрибута;
  • Второй параметр – права доступа;
  • Третий параметр – тип данных атрибута;
  • Четвертый параметр – указатель на данные;
  • Пятый параметр – функция обратного вызова. Это функция вызывается, когда данные необходимо взять, например, из EEPROM памяти. Более подробную информацию можно получить из руководства пользователя.

В нашем случае объект не имеет функции обратного вызова, а в качестве типа данных используется строка байтов.

Meter_Sr_No указывает на следующую структуру:

const uint8_t Meter_Sr_No[] =
{
    8, 'A','B','C','D','1','2','3','4'
};

Вот и все процедуры по созданию нового объекта. Результат:



Заключение


В данной статье не приводится полного описания библиотеки DLMS/COSEM для микроконтроллеров семейства MSP430, так как без освещения основных моментов самого протокола это сделать трудно. Однако тем, кому такое описания необходимо могут ознакомиться с ним загрузив его с сайта компании TI (http://www.ti.com/tool/dlmsobj-eval).
Поделиться с друзьями
-->

Комментарии (10)


  1. leocat33
    30.05.2016 22:31
    +2

    Этот протокол еще та кака… Имел с ним дело.


    1. AlexFTF
      31.05.2016 05:50

      Действительно, протокол не идеален. Тем не менее альтернативы ему пока нет, а сам протокол позволяет обеспечить единую среду для структурного моделирования и обмена данными с приборами учета.


  1. ajratr
    31.05.2016 13:28

    Скажите пожалуйста, есть ли возможность получить, с помощью этого протокола, архивные данные из приборов учета? А то из той информации, что доступна для первого знакомства с протоколом неясен этот функционал. И если да то как это примерно выглядит на практике?


    1. AlexFTF
      31.05.2016 13:37

      Такая возможность есть. Архивные данные хранятся в объектах типа Profile Generic, а представляются в виде таблиц. Причем есть возможность осуществлять селективный доступ к архивным данным (например делать выборку по дате и времени, по диапазону номеров записей и пр.).


      1. leocat33
        31.05.2016 18:31

        Ну… Как бы не совсем таблиц. Протокол все же объектно ориентирован. На сей момент наиболее активно его используют французы, в частности Sagem. Физика — по заказу французов TI делает модемы на базе Piccolo.
        Все вместе кривое, как турецкая сабля… Для сравнения: Тот же UART можно спокойно «запулить» в провода со скоростью 20 кбит/сек. Протокол — напр. MODBUS. Все намного проще и устойчивее в работе.
        Ну… сейчас «балуюсь» CAN over PLC. Те же 20 кбит, но множественный доступ.


        1. AlexFTF
          31.05.2016 18:46

          Я имел ввиду что архивные данные представляют в виде таблиц на стороне клиента. А в приборе учета они доступны через объекты типа Profile Generic которые имеют более сложную структуру. Не совсем понял про Modbus и UART, а также в чем заключается простота и устойчивость, поясните пожалуйста.


          1. leocat33
            31.05.2016 20:17
            +1

            Наверное я не совсем понятно выразился. В свое время пользовался четырьмя книгами 7-1 редакции (зеленой/желтой/белой, голубой). Много раз, при чтении сих опусов возникал вопрос: а нафига все это?! Стандарт DLMS описывает много чего. Начиная с физического уровня ( кодирование FSK ) и заканчивая уровнем описания объектов. Так вот, начиная с кодирования FSK — намного проще реализация UART модуляцией CW. Для увеличения надежности можно использовать кодирование хемминга. «Пробиваемость» сигнала поболее, чем у FSK. Для реализации IP поверх UART есть готовые, проверенные десятилетиями решения типа SLIP ( serial IP ). Для обменf информацией намного проще MODBUS. Если брать протокол CAN, то еще проще. В общем мне до сих пор так и не понятно, зачем весь этот огород с DLMS… Ну и как результат: не получили 100% опроса приборов учета. Т.е. некоторые счетчики не отдают информацию в течении месяца. Хотя физически они в сети. Кстати, в Штатах, Англии, Германии более популярен протокол HomePlug AV с пакетами MODBUS TCP. Скорость для приборов учета 10 мбит. А вообще модемы до 1 гбит. Т.е. реализация проще и универсальнее по всем статьям…


            1. AlexFTF
              01.06.2016 08:11

              Правильно ли я вас понял, что при использовании S-FSK профиля DLMS/COSEM, информация передаваемая от счетчика к устройству сбора данных, по силовым линиям, искажалась настолько, что устройством сбора данных она не воспринималась? Какие PLC модемы вы использовали?

              По поводу CW модуляции, вы хотите по PLC передавать данные «морзянкой»? Не уверен что 100% амплитудная модуляция обеспечит более надежную передачу данных в условиях нестабильности параметров канала связи, чем FSK или S-FSK. Ведь помеха, как правило, вносит искажение амплитуды, а не частоты сигнала.

              SLIP это устаревший протокол, вместо него сейчас используют более совершенный протокол PPP, который кстати прописан в профиле TCP-UDP/IP стека DLMS/COSEM.


              1. leocat33
                05.06.2016 09:47

                Да, Были случаи сильного искажения информации на сетях в населенных пунктах с одноэтажной застройкой.
                «Морзянка» это не амплитудная модуляция. Это… «морзянка»:) Модуляции в классическом понимании там нет. Алгоритм: есть максимальная несущая — нет несущей. И да, это устойчивее, чем S-FSK. Даже на примере открытой частоты 160 м ( примерно 2 мГц ): при скорости передачи данных 20 кбит имеем 100 периодов несущей на один бит информации. При детекторе рассчитанном на частоту 20 кГц шумов практически не видно. ( всплески — режектируем, до 20-40 периодов подряд фильтрует детектор ). Изменения амплитуды несущей ( затухание ) компенсируем компаратором. Вот и получается, что «морзянка» надежнее передает сигнал…

                SLIP привел как пример. PPP это Point-to-Point Protocol ( не канальный ). В Prime реализован именно канальный уровень. По сути Ethernet, с классическими MAC адресами. Использовал PLC модемы G3 на основе TI Piccolo. Точно не помню какие, давно это было, но что то из TMS320.

                Если вы сами разрабатываете модемы, то я бы рекомендовал QCA700 от Qualcomm / Atheros.Скорость до 10 мбит. HomePlug, Метод модуляции CDMA+Q-FSK.DSP и усилитель все в одном корпусе. Питание 3.3 V На основе ARM Cortex M3. Одновременно используется 100+ частот в диапазоне от 2 мГц до 68 мГц.


                1. AlexFTF
                  09.06.2016 12:48

                  Понятно, но ведь DLMS поддерживает передачу данных не только по PLC. Если так получилось что в данных условиях передача по PLC не обеспечивает требуемого уровня надежности, можно было бы, как вариант, использовать 485 или радиоканал… Возможно такое решение будет дороже или более «громоздким», но зато сохранилась бы интероперабельность…

                  За модемы спасибо, погляжу.