Особенности
Характеристика MicroPython, сравнение с другими языками
В программируемом контроллере Telematic в качестве инструмента для создания пользовательских сценариев используется язык MicroPython.
MicroPython — это версия языка программирования Python, специально адаптированная для работы на микроконтроллерах и устройствах с ограниченными ресурсами. Это высокоуровневый, динамический язык, который обеспечивает легкость и удобство разработки для встроенных систем. MicroPython включает в себя набор модулей, позволяющих использовать стандартные функции Python. Для доступа к аппаратным и программным ресурсам контроллера Telematic в MicroPython реализованы специальные модули dev, net и другие.
Официальный сайт https://micropython.org/. Лицензия MIT.
Как устроена программа
Одновременно выполняется один сценарий. Новый запуск останавливает предыдущий.
Текст выполняется сверху вниз. Чтобы программа жила, а не «моргнула и вышла», в конце запускают периодический шаг: контроллер сам вызывает вашу функцию раз в заданное время (в Python период задаётся в секундах, например 0,2 или 1). Так же можно повесить несколько шагов с разным темпом — не больше восьми.
print попадает в консоль на страницах «Управление» и «Сценарии». Буфер небольшой (порядка килобайта): это не файл лога, а «что программа сказала только что».
Отличия от Python
Хотя MicroPython сохраняет большую часть функциональности Python, есть и некоторые отличия, которые обусловлены необходимостью оптимизации для встроенных систем:
- Ограниченная стандартная библиотека: Не все модули Python доступны в MicroPython из-за ограниченного объема памяти и процессорных ресурсов. Однако важнейшие модули и функции, такие как коллекции данных, математические операции, поддерживаются.
- Отсутствие некоторых средств отладки: Из-за меньших возможностей аппаратного обеспечения инструменты отладки реализованы на уровне программного обеспечения контроллера.
- Специализированные модули для аппаратных интерфейсов: MicroPython предлагает специальные модули и методы для работы с аппаратурой, которых нет в стандартной библиотеке Python, такие как управление выводами или работа с протоколами связи.
- Упрощённая модель выполнения: MicroPython ограничивает ресурсоёмкие функции Python, чтобы не превышать пределы доступной памяти и ресурсов процессора.
Разработка с использованием MicroPython предоставляет возможность создания эффективных и надёжных алгоритмов благодаря простоте и гибкости, недоступным языкам программирования, которые традиционно используются в среде ПЛК.
- Нет установки пакетов (pip) и привычных файлов на диске. Сохранённый сценарий можно подключить по имени.
- Нет отдельных «потоков», как в большом Python: всё в одной программе.
- Памяти у сценария немного: порядка 60 КБ. Большие таблицы и бесконечное накопление данных не влезут.
- Текст, который запускают не сохраняя (прямо из редактора), тоже ограничен — примерно 7 КБ. Более длинную программу сначала Сохранить, потом запускать из памяти контроллера.
- Имя файла — до 32 символа. Все сценарии (Python и C) делят общее хранилище порядка 1 МБ.
Есть время, математика, JSON, сеть, дисплей и функции устройства: регистры, каналы, аварии, события, ПИД, Modbus, вид экрана. Нет «как на компьютере»: произвольных файлов на диске, установки сторонних библиотек, ввода с клавиатуры самого контроллера.
Если программа упала с ошибкой, в режиме Эксплуатация текст попадает в консоль и поднимается системная авария «ошибка в сценарии». Повторяющиеся тяжёлые сбои — аварию «сценарий делает контроллер нестабильным». Пока отлаживаете — режим Разработка.
Зачем Python, если есть LD и ST
Лестничная схема хорошо описывает «контакты и катушки». Слабее она там, где появляются формулы, рецепты, тексты, обмен по сети, ПИД и ветвления «если… то… иначе…».
| LD / FBD / ST | Python на Telematic |
|---|---|
| Привычно электрику, наглядно для дискретики | Привычно многим инженерам и тем, кто уже писал скрипты |
| Расчёт и строки — громоздко | Обычные формулы, списки, текст |
| Несколько сетей и программ | Одна программа на всё устройство — проще понимать «что сейчас главное» |
| Панель и ПЛК настраиваются отдельно | Та же программа задаёт теги и вид экрана |
Python быстрее набросать алгоритм и проверить его в консоли. Для жёсткого цикла «каждые 20 мс, никаких пауз» чаще берут C. Оба языка на контроллере устроены одинаково по смыслу: один сценарий, периодический шаг, те же регистры и каналы.
Если программа ведёт себя странно
- Консоль — сообщение об ошибке и ваши
print. - Страница Отладка → runtime (или в браузере
http://<IP>/txt?runtime):- нет цикла шага — программа, скорее всего, не запустила периодическую работу и сразу закончилась;
- шаг длится дольше периода — логика не успевает, веб и останов «тупят»;
- память занята почти целиком — уберите большие массивы и бесконечное накопление данных.
- Журнал событий — когда программу запускали и останавливали.
- Полоса системных аварий — сбой, сторожевой таймер, нехватка служебной памяти.