- PVSM.RU - https://www.pvsm.ru -

Angry Birds на PLC?

imageВ предыдущем топике [1] я обещал подробнее описать особенности программирования промышленных PLC, и почему такое программирование все больше напоминает разработку обычного софта. О языке IEC61131-3 (промышленном диалекте Паскаля) я уже писал [2], также хорошим вступлением можно считать вот этот хабратопик [3]. Этот пост — о компиляторах PLC, средах разработки, особенностях программирования и эволюции языка и экосистемы.

Есть всего три основных производителя компиляторов IEC61131 — CoDeSys, KW и Siemens. Компилятор от Siemens используется в продуктах Siemens, а почти все остальные вендоры лицензируют компилятор CoDeSys [4] или KW [5]. Таким образом, 3 самых известных компилятора разрабатываются в небольших немецких городках.

У компиляторов малораспространенных языков есть общая проблема — у их производителей нет таких ресурсов, как, например у коммьюнити gcc или команды icc. Поэтому не получается оптимизировать backend под постоянно меняющиеся архитектуры, и использовать новейшие наборы инструкций. Код, скомпилированные таким не очень оптимизирующим компилятором, «спотыкается» сразу же — на фронт енде/декодере процессора. Многочисленные front end stalls хорошо видны в результатах анализа Vtune, вызванные промахами по I-cache (префетчер не справляется, особенно на Nehalem и более ранних) и другими причинами. Также многие экзотические или «молодые» бэкенды компиляторов спотыкаются на известной особенности [6] процессоров Atom. Конечно, наиболее trueъ решением было бы использовать LLVM. Странно, что никто еще до этого не додумался. Однако, похожая по духу идея пришла в голову инженерам KW — они просто компилируют IEC61131 в CLR. Ну а исполнение CLR уже вполне адекватно оптимизировано Microsoft. Ну а где CLR, там и C#. Еще одна фишка KW — возможность смешивать IEC61131 и C#. И разрабатывать все это в Microsoft Visual Studio.

Как еще можно получить производительность программы PLC, сравнимую с производительностью той же программы, написанной на C? Например, можно написать транслятор IEC61131-3 в C, и потом воспользоваться компилятором C. Так делает небольшая канадская команда Geb Automation [7]. С интересом слежу за их прогрессом. Также можно писать критичные по производительности модули на C, и вызывать их из PLC кода. Сделать аналог JNI для IEC61131. Этот подход поддерживают уже почти все — например Siemens, B&R, Beckhoff (остальные, наверное, тоже, но лично я не сталкивался, т.к. фича пока не очень стандартная).

Производителей IDE, приспособленных для разработки PLC, гораздо больше, чем производителей компиляторов. Их список практически совпадает со списком популярных вендоров железа PLC (+ KW и CoDeSys, которые своего железа почти не делают). Свои среды разработки производят Siemens, Rockwell, Phoenix, Omron, Beckhoff, B&R, CoDeSys, KW. Почти все они пишут свои собственные среды с уникальным драг энд дропом, но, как я писал выше, KW использует MS Visual Studio. Beckhoff недавно заменила свою среду, целиком базирующуюся на CoDeSys, на свой собственный плагин к MS Visual Studio. Он позволяет разрабатывать и отлаживать PLC в популярной и развитой среде разработки, но внутри у него компилятор от CoDeSys (который, в отличие от компилятора KW, производит сразу машинный код, а не код CLR).

Одной из интересных особенностей разработки PLC является то, что один и тот же код можно писать и рассматривать с разных сторон — «недоассемблер» IL, «странный паскаль» ST, «блок схемы» FBD, «электрическая логика» LD. Одна из важных возможностей (и вообще raison d'être) IDE для PLC — переход и трансляция между этими формами. Это немного роднит эти IDE с основоположником жанра рисования картинок, которые генерят код, и кода, который перерисовывает картинку прямо в IDE — Delphi. Интересно, что при разработке PLC можно подняться еще на один уровень абстракции, и воспользоваться MathWorks Simulink [8]. У известного производителя Matlab'a есть специальный продукт для разработчиков PLC, который позволяет генерить IEC61131-3 ST код из Matlab функций, моделей Simulink и flow диаграм. Вот так примерно выглядит.

image

Нажимаешь на кнопочку «Generate PLC Code» и графическая модель с картинки преобразуется в «почти Паскаль».

C Angry Birds в названии поста я, конечно, погорячился. Хотя написать ее на PLC можно, и даже с настоящими актуаторами, я пока видел только Mahjong, реализованный на IEC61131-3 ST, который можно запустить на промышленном контроллере с HMI.

image

Собственно, кроме HMI он ничего не трогает, но это можно исправить. Заглавная картинка — тоже программа на IEC61131, она управляет роботом, который играет против человека в крестики-нолики. Я снял эту картинку в прошлом ноябре у стенда CoDeSys на выставке SPS Drives. С Angry Birds у многих ассоциируются апп сторы — основной канал распространения, сделавший эту игру знаменитой. Недавно появился первый App Store [9] дла программ PLC! Так что появилась уникальная возможность забацать популярную игрушку для еще одного магазина. Я не знаю, насколько модель app store'a применима в этой области — пока я в нем насчитал всего 50 приложений трех производителей. Таким образом, в разработку PLC на экзотическом языке пробираются следующие общеайтишные технологии — Visual Studio, Matlab, линковка с кодом на C, CLR/C#, и даже app store.

Конечно, излишним было бы упоминание того, что все описанные выше компиляторы и среды позволяют генерировать код для многих процессорных архитектур, использующихся в автоматизации, в том числе и X86. Как сотрудника Intel меня очень радует, что платформы x86 используются в этой области все чаще и чаще.

Автор: izard

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/pascal/34323

Ссылки в тексте:

[1] предыдущем топике: http://habrahabr.ru/company/intel/blog/176313/

[2] писал: http://habrahabr.ru/company/intel/blog/148090/

[3] этот хабратопик: http://habrahabr.ru/post/139425/

[4] CoDeSys: http://www.codesys.com/products/codesys-engineering/development-system.html

[5] KW: https://www.kw-software.com/en/iec-61131-control/programming-systems/multiprog-pro

[6] особенности: http://software.intel.com/en-us/blogs/2010/10/12/avoid-short-functions-on-atom

[7] Geb Automation: http://gebautomation.com/pub/learn_details

[8] MathWorks Simulink: http://www.mathworks.de/products/sl-plc-coder/

[9] App Store: http://store.codesys.com/?___store=en&___from_store=default

[10] Источник: http://habrahabr.ru/post/177153/