Знайомство зі стеком DLMS/COSEM для мікроконтролерів сімейства MSP430 компанії Texas Instruments



Останнім часом протокол 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).
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.