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

MicroPython — это версия языка программирования Python, специально адаптированная для работы на микроконтроллерах и устройствах с ограниченными ресурсами. Это высокоуровневый, динамический язык, который обеспечивает легкость и удобство разработки для встроенных систем. MicroPython включает в себя набор модулей, позволяющих использовать стандартные функции Python. Для доступа к аппаратным и программным ресурсам контроллера Telematic в MicroPython реализованы специальные модули dev, net и другие.

Официальный сайт https://micropython.org/. Лицензия MIT.

Как устроена программа

Одновременно выполняется один сценарий. Новый запуск останавливает предыдущий.

Текст выполняется сверху вниз. Чтобы программа жила, а не «моргнула и вышла», в конце запускают периодический шаг: контроллер сам вызывает вашу функцию раз в заданное время (в Python период задаётся в секундах, например 0,2 или 1). Так же можно повесить несколько шагов с разным темпом — не больше восьми.

print попадает в консоль на страницах «Управление» и «Сценарии». Буфер небольшой (порядка килобайта): это не файл лога, а «что программа сказала только что».

Отличия от Python

Хотя MicroPython сохраняет большую часть функциональности Python, есть и некоторые отличия, которые обусловлены необходимостью оптимизации для встроенных систем:

  1. Ограниченная стандартная библиотека: Не все модули Python доступны в MicroPython из-за ограниченного объема памяти и процессорных ресурсов. Однако важнейшие модули и функции, такие как коллекции данных, математические операции, поддерживаются.
  2. Отсутствие некоторых средств отладки: Из-за меньших возможностей аппаратного обеспечения инструменты отладки реализованы на уровне программного обеспечения контроллера.
  3. Специализированные модули для аппаратных интерфейсов: MicroPython предлагает специальные модули и методы для работы с аппаратурой, которых нет в стандартной библиотеке Python, такие как управление выводами или работа с протоколами связи.
  4. Упрощённая модель выполнения: MicroPython ограничивает ресурсоёмкие функции Python, чтобы не превышать пределы доступной памяти и ресурсов процессора.

Разработка с использованием MicroPython предоставляет возможность создания эффективных и надёжных алгоритмов благодаря простоте и гибкости, недоступным языкам программирования, которые традиционно используются в среде ПЛК.

  • Нет установки пакетов (pip) и привычных файлов на диске. Сохранённый сценарий можно подключить по имени.
  • Нет отдельных «потоков», как в большом Python: всё в одной программе.
  • Памяти у сценария немного: порядка 60 КБ. Большие таблицы и бесконечное накопление данных не влезут.
  • Текст, который запускают не сохраняя (прямо из редактора), тоже ограничен — примерно 7 КБ. Более длинную программу сначала Сохранить, потом запускать из памяти контроллера.
  • Имя файла — до 32 символа. Все сценарии (Python и C) делят общее хранилище порядка 1 МБ.

Есть время, математика, JSON, сеть, дисплей и функции устройства: регистры, каналы, аварии, события, ПИД, Modbus, вид экрана. Нет «как на компьютере»: произвольных файлов на диске, установки сторонних библиотек, ввода с клавиатуры самого контроллера.

Если программа упала с ошибкой, в режиме Эксплуатация текст попадает в консоль и поднимается системная авария «ошибка в сценарии». Повторяющиеся тяжёлые сбои — аварию «сценарий делает контроллер нестабильным». Пока отлаживаете — режим Разработка.

Зачем Python, если есть LD и ST

Лестничная схема хорошо описывает «контакты и катушки». Слабее она там, где появляются формулы, рецепты, тексты, обмен по сети, ПИД и ветвления «если… то… иначе…».

LD / FBD / STPython на Telematic
Привычно электрику, наглядно для дискретикиПривычно многим инженерам и тем, кто уже писал скрипты
Расчёт и строки — громоздкоОбычные формулы, списки, текст
Несколько сетей и программОдна программа на всё устройство — проще понимать «что сейчас главное»
Панель и ПЛК настраиваются отдельноТа же программа задаёт теги и вид экрана

Python быстрее набросать алгоритм и проверить его в консоли. Для жёсткого цикла «каждые 20 мс, никаких пауз» чаще берут C. Оба языка на контроллере устроены одинаково по смыслу: один сценарий, периодический шаг, те же регистры и каналы.

Если программа ведёт себя странно

  1. Консоль — сообщение об ошибке и ваши print.
  2. Страница Отладка → runtime (или в браузере http://<IP>/txt?runtime):
    • нет цикла шага — программа, скорее всего, не запустила периодическую работу и сразу закончилась;
    • шаг длится дольше периода — логика не успевает, веб и останов «тупят»;
    • память занята почти целиком — уберите большие массивы и бесконечное накопление данных.
  3. Журнал событий — когда программу запускали и останавливали.
  4. Полоса системных аварий — сбой, сторожевой таймер, нехватка служебной памяти.