Введение
Наверняка у каждого, кто когда — то начинал или только начинает изучать микроконтроллеры STM32, осталась в запасе вот такая отладочная плата китайского производства, метко прозванная интуристами Blue Pill (синяя таблетка).
Такая плата построена на основе чипа STM32F103C8T6, который представляет из себя 32 битный процессор на базе ядра Cortex — M3. Ниже на картинке показана классическая плата и назначение выводов.
Как за 5 минут сделать ПЛК из подручных средств?
Как часто бывает, уроки из интернета научили работать с таймерами, USART — ом, переключать состояния выходов и даже с DMA получилось поработать! И после всех тестов плата благополучно занимает место на полке запасных частей — вещь хорошая, но пока достойного применения не нашлось.
Если вы читаете эту статью — то пришло время достать плату с полки и сдуть с неё пыль, ведь сейчас на её основе мы будем делать программируемый логический контроллер, который будет соответствовать международному стандарту IEC61131-3.
После того, как микропроцессор будет прошит прилагаемой прошивкой (увы, пока публикации исходников в планах не имеется), он сможет работать уже как ПЛК. И самое интересное, что плату можно будет программировать при помощи стандартного программного обеспечения GX Developer FX, предназначенного для программирования контроллеров Mitsubishi FX2N. Данное программное обеспечение (причём русифицированное) я свободно скачал с официального сайта Mitsubishi после регистрации.
Итак- какие же новые функции после прошивки приобрела наша небольшая синяя плата?
Первое — теперь можно её подключить к компьютеру, используя разъём micro-USB. Для того, чтобы обеспечить обмен данными между средой программирования и контроллером, вы должны установить драйвера виртуального СОМ-порта. Их можно скачать по ссылке из документа bluepill_update.pdf во вложении. После установки драйвера и подключения платы к USB у вас в устройствах персонального компьютера появится новое устройство — так, как показано на картинке.
Теперь можно запускать установленный нами GX Developer FX. После запуска программы у вас будет такое окно:
Следующий шаг — создание нового проекта. В меню Проект — Новый проект. У вас откроется вот такое окно:
Здесь можно ничего не менять, и нажать кнопку ОК. Итак — у нас пустой проект, и теперь нам надо настроить онлайн-подключение к плате.
Для этого выбираем в меню Онлайн — Настройка передачи. У вас откроется вот такое окно:
Здесь можно ничего не менять, и нажать кнопку ОК. Итак — у нас пустой проект, и теперь нам надо настроить онлайн-подключение к плате.
Для этого выбираем в меню Онлайн — Настройка передачи. У вас откроется вот такое окно:
В ряде Интерфейс ПК выбираем Порядковый (тут некорректно переведено — должно быть
Последовательный) и у вас откроется вот такое окно:
Тут выбираем номер СОМ- порта, соответствующий тому, который у нас виден в устройствах персонального компьютера. Называется он STMicroelectronics Virtual COM Port (COM2) в нашем случае. Теперь мы можем проверить, есть ли подключение на самом деле. Для этого нажмём кнопку Проверка связи в предыдущем диалоге. Если всё в порядке, то у вас будет сообщение как на рисунке ниже:
И вот теперь мы можем спокойно приступить к самому интересному — программированию контроллера. В данной версии реализована поддержка трёх языков:IL — язык инструкций, строковый тип отображения. LAD — язык лестничной логики, визуальный тип отображения. SFC — язык последовательных блоков, визуальный тип отображения. Причём можно всегда переключиться между отображением языков IL и LAD и наоборот. Ниже показана типичная программа на языке LAD:
А вот так выглядит эта же программа, но на языке IL:
Конечно, это всё хорошо, но хочется ведь заглянуть и в логику программы — понять, что же там происходит. Для этого надо нажать кнопку F3 — и если программа записана в контроллер, то будет переключено отображение в режим онлайн -мониторинга. Для записи программы вам надо выбрать в меню Онлайн — Записать в контроллер.
Будет показано вот такое окно:
В окне выбираем опции для записи (тут выбрана вся программа и параметры контроллера), и нажимаем кнопку Выполнить. Программа вас оповестит, что для записи контроллер будет переведён в режим СТОП (вы это увидите по потуханию светодиода, подключенного к выводу PC13), произведёт запись и переведёт контроллер в режим RUN.
А вот так будет показан в онлайне исходник программы на языке LAD:
И тот же самый кусок программы на языке IL в режиме онлайн:
А вот так выглядит исходник на языке SFC:
Для удобства тестирования я использую старые тестовые разработки аппаратной части контроллера, которые по тем или иным причинам не были использованы. Одна из таких плат показана на рисунке ниже:
Эта плата обеспечивает гальваническую изоляцию для UART1, UART2 и для шины 1-wire. Также гальванически изолированы дискретные входа и выхода. Для программы приняты следующая мнемоника:X1 — это вход с адресом 1, Y2 — выход с адресом 2, M104 — битовый операнд с адресом 104, D1000 — регистр общего назначения с адресом 1000. Версия прошивки, которая находится во вложении, имеет следующие ограничения: Количество шагов программы — 1000 (максимально возможное — 8000).
Количество регистров — 2000 (диапазон D0000-D1999).Количество битовых переменных — 3072 (диапазон М0-М3071).UART1 — поддержка Modbus RTU master/slave, количество слейвов в режиме мастера -2 (максимально возможное — 128 ).UART2 — поддержка Modbus RTU master/slave, количество слейвов в режиме мастера -2 (максимально возможное — 128).
По умолчанию параметры обмена по последовательному порту 57600, 8N1. UART1 — в режиме слейв с адресом 1, UART2 — тоже в режиме слейва с адресом 2.
Для шины 1-wire на данный момент поддержка только датчиков типа DS18B20, количество слейвов -2 (максимально возможное — 128 ).
Также поддерживается выгрузка программы из контроллера и преобразование её в удобный для чтения человеком вид (я предпочитаю LAD).
Программа построена с использованием операционной системы реального времени ChibiOS RT.
Настройка обмена данными по шинам modbus RTU и 1- wire производится при помощи программы, которую вы можете найти во вложении. Для примера сейчас рассмотрим настройку и поиск датчиков с неизвестными нам адресами. После запуска программы у вас будет вот такое окно:
Переходим на закладку 1-wire и выбираем 1-wire master, и обязательно нажимаем кнопку Write to PLC для записи в контроллер:
А теперь после нажатия кнопки Search slave откроется окно, где можно выбрать адрес в области D0000-D2000, начиная с которого будет происходить запись полученных значений температуры с датчиков в виде числа с плавающей запятой.
А ниже показано окно после успешного поиска всех датчиков, подключенных к шине обмена данными.
Тут мы можем добавить найденные датчики к текущей конфигурации или полностью заменить текущую на новую. В нашем случае данные температуры будут передаваться в область регистров контроллера по адресами D1500, D1502 и D1504 в виде числа с плавающей запятой. Остаётся только нажать кнопку Write to PLC и перезапустить плату для активации новой аппаратной конфигурации.
Что ещё примечательного можно добавить про программу конфигурации? Есть один момент — это представление чисел с плавающей запятой в контроллере FX2N. Для упрощения ввода констант в этом формате пришлось использовать запись константы с модификатором H. Как только интерпретатор контроллера встретит такой модификатор, он понимает, что с ним будет передано число в формате с плавающей запятой, но в форме записи IEE754 с одинарной точностью. Ниже показано окно программы на закладке Converter.
Заключение — что же мы получили:
Пришло время для вопроса — а собственно, каково же быстродействие такого вот контроллера? Тут всё просто — при опросе обоих портов обмена данными по modbus RTU (контроллер в режиме слейва — оба порта) на скорости 500 kbps и длине запроса 122 регистра, опросе 17 датчиков температуры и выполнении самой «тяжёлой» (состоящей из бинарных операндов) программы из 7745 шагов цикл исполнения был равен 21 мсек. И конечно же есть и минусы в таком вот контроллере. Первый — это то, что синие платы отличаются невысоким качеством комплектующих, и поэтому я рекомендую подавать внешнее питание на плату до подключения mini-USB. Второй — это конечно же, что тут нет энергонезависимой памяти (точнее, она есть — но всего лишь 9 регистров в области, поддерживаемой батарейкой). И вы сами понимаете, что такое вот устройство лучше не применять для ответственных применений или на производстве. А вот для дома или для обучения — это самое то, дешево, доступно и понятно.
Я постарался сделать обзор обширным — и если у вас будут какие-то проблемы, пишите. Особенно буду рад, если вы найдете ошибки в реализации программы. Надеюсь, статья будет познавательной и вы не зря потратили время на её прочтение.
Загрузки для данной статьи — ниже.
Автор: Ин Михаил