Аппаратная реализация.
На рисунке показана схема двухканального дистанционного выключателя. В его состав входят:

- Модуль с микроконтроллером STM32F103;
- Радиомодуль JDY-40;
- Два реле для коммутации нагрузки;
- AC-DC преобразователь на 5 В (на схеме не показан).
Со стороны ПК также используется модуль JDY-40 и USB-UART адаптер. Оба радиомодуля JDY-40 настраиваются идентично, скорость передачи данных по UART 19200 бод. Как настроить модули JDY-40 представлено здесь.
Программная реализация устройства.
Проект программы для реализации работы дистанционного выключателя создан в среде STM32 Cube MX для IDE Kiel. При желании файлы можно использовать и для другой среды разработки. Проект сделан под 1 MCT-протокол, с описанием протокола можно познакомиться здесь. В проекте кроме файлов, добавленных самим Cube MX после настройки периферии, есть файлы добавленные мной:
- Для реализации MCT-протокола: conf_init.h, mk_conf_tree.h, mk_conf_tree.c;
- Основные рабочие файлы реализации алгоритма управления: system.c и control.c. В этих файлах добавлены функции поддержки MCT-протокола: System_prop, System_get, System_set в файл system.c и Control_prop, Control_get, Control_set в файл control.c. В файл uart.c добавлены функции поддержки обмена данными это MKBUS_rx и MKBUS_send .
- Также добавлен файл setup.c в котором даны функции чтения и записи flash-памяти микроконтроллера. В функции SETUP_Load этого файла задаются начальные значения основных параметров (таких как серийный номер устройства и т.д.). Значения этих параметров можно изменить через дерево конфигурации на ПК и пересохранить во flash-памяти микроконтроллера.
Более подробно файловая структура поддержки MCT-протокола описана в статье.
Управление выключателем при помощи дерева конфигурации на ПК.
После того, как программа скомпилирована и загружена в память микроконтроллера, можно попробовать управлять устройством при помощи MCT-конфигуратора. Со стороны ПК должен быть подключен USB-UART адаптер с модулем JDY-40. На скриншоте показан вид дерева конфигурации (ДК), выгруженного из памяти микроконтроллера Дистанционного Выключателя.

Для того, чтобы начать работу с ДК, нужно скачать архив MCT-конфигуратора, распаковать его и запустить файл MkConfTree_base.exe на ПК. Далее после того, как COM-порт будет выбран, можно приступить к загрузке ДК из устройства. Если ДК устройства загружается первый раз, то загрузка производится из вкладки «Load configuration from device» (Загрузить конфигурацию из устройства). Если загрузка ДК прошла успешно, можно сохранить его в файл, после чего ДК будет загружаться при запуске конфигуратора автоматически. Далее необходимо открыть выбранные узлы дерева. При нажатии на вкладку «Start receiving» (Запустить опрос) программа конфигуратора начинает отправлять запросы на получение значений параметров из устройства, при повторном нажатии запрос останавливается. Если связь устойчива, в колонке «Value» появятся и постоянно будут обновляться значения параметров.
ДК нашего устройства имеет корень «RF_103_RELE_2» и два узла «System» и «Control«. В каждом узле находятся несколько параметров, в колонках, слева от значения, отображаются свойства параметров:
- ID узлов и параметров (колонка «ID»).
- Тип значений параметра (колонка «Type»), возможные типы указаны в таблице ниже.
- Атрибут чтения, записи и управления (колонка «Atrib»). Основные атрибуты это: «R» — только чтение; «WR» — запись и чтение. Возможны другие атрибуты, назначенные при разработке программы устройства, например, вызов модального окна для расширения функционала работы с устройством.
- Атрибут количества байт в значении параметра (колонка «Bytes»). Для различных типов данных может быть различное количество байт в слове значения параметра (см. таблицу).
Если атрибут параметра — «WR», то значение параметра можно изменять с учетом типа параметра и его длины в байтах. Для начала редактирования значения надо «кликнуть» кнопкой мыши по выбранному параметру, при этом периодический опрос останавливается. Работают левая и правая кнопки мыши. После изменения значения надо нажать «Ввод» на клавиатуре, для отмены нажимается «Esc». Если был нажат «Ввод», то ДК отправляет измененное значение параметра в устройство (по команде 5).
Таблица.
| Наименование (колонка «Type») | Описание типа данных | Минимальная длина в байтах | Максимальная длина в байтах |
| Int | Натуральное число с знаком | 1 | 4 |
| Uint | Натуральное число без знака | 1 | 4 |
| Bool | Булево значение: «y», «n» или «yes», «no» или «да», «нет» или «1», «0». Написание в колонке «Value» | 1 | 1 |
| Float | Число с плавающей точкой | 4 | 4 |
| Hex | Число в шестнадцатеричном формате например: 0x012ab550 | 1 | 4 |
| Time | Формат времени: hh:mm:ss | 4 | 4 |
| Char | Текстовая строка | 1 | 32 |
Использование MCT-протокола для взаимодействия между различными периферийными устройствами на примере дистанционного выключателя.
Как написано в документации на MCT-протокол, для того чтобы прочитать значение параметра нужно использовать команду 4, а для того чтобы изменить значение нужно применить команду 5. В качестве примера мы можем прочитать значение параметра «Status» (ID = 0), который находится в узле «Control» (ID = 2). Для этого нужно, чтобы устройство, которое хочет прочитать этот параметр из нашего выключателя, отправило пакет с командой 4, если пакет сформирован правильно, в ответ придет пакет с значением этого параметра. Подобным образом можно воспользоваться командой 5 для перезаписи параметра.
Таким образом, MCT-протокол позволяет удаленно получить доступ к параметру «Status», который находится на нашем устройстве. При этом нет необходимости изучать документацию на устройство, просто достаточно загрузить дерево конфигурации (ДК) и прочитать ID узла и ID параметра.
Если устройство поддерживает MCT-протокол, чтобы загрузить ДК достаточно знать серийный номер устройства или общий широковещательный серийный номер, если устройство одно в сети.
Информацию на MCT-протокол можно найти в рубрике.
- Microcontroller Configuration Tree ↩︎
