Концепт программирование. Энтузиасты-разработчики компиляторов и их проекты

Автоматические регуляторы, или программируемые логиче­ские контроллеры (ПЛК), являются широко распространенными средствами автоматизации в составе локальных и распределенных систем контроля и управления.

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

Требования, предъявляемые к ПЛК, разнообразны, так как ПЛК используются для всевозможных видов деятельности (рабо­чими, технологами, инженерами). ПЛК может представлять собой либо целый, неделимый продукт, поставляемый одним производи­телем, либо несколько продуктов – составных частей, поставляе­мых одним или разными производителями. По функциональному назначению в ПЛК можно выделить следующие основные части: процессор, осуществляющий прием, обработку и выдачу инфор­мации; устройство сопряжения процессора с объектом (УСО), уст­ройство сопряжения процессора с человеком-оператором и про­граммное обеспечение (ПО).

Языки программирования ПЛК во многом определяются кон­кретными приложениями, а также требованиями современных сложных распределенных систем управления.

Историческое развитие ПЛК привело к возникновению разных решений, связанных с конкретным производителем и в той или иной степени удовлетворяющих общим стандартам (DIN 19239, 19237, 40719 Part 6 и VDI 2880). Однако элементы языков, несмот­ря на похожесть, у разных производителей отличались, существо­вали машинно-зависимые особенности языков, которые приходи­лось учитывать.

Для решения этой проблемы Международная электротехниче­ская комиссия (МЭК) – всемирная организация, с 1906 года разра­батывающая международные стандарты в области электротехники, электроники, телекоммуникаций и средств информационных тех­нологий – основала в 1975 году рабочий комитет 65А для разра­ботки стандарта для ПЛК, который в 1993 году принял на ПЛК международный стандарт IEC 1131 (в настоящее время действует IЕС 61131-3), третья часть которого имеет дело с языками для ПЛК. В него вошли пять языков:

LD (Ladder Diagram) – вариант класса языков релейно-контактных схем;

FBD (Functional Block Diagram) – аналогичен функциональной схеме электронного устройства с использованием логических эле­ментов;

SFC (Sequential Function Chart) – язык диаграммного типа, ана­логичный блок-схемам алгоритмов;

ST (Structured Text) – текстовый высокоуровневый язык обще­го назначения, по синтаксису напоминает Паскаль;

IL (Instruction List) – текстовый язык низкого уровня, по син­таксису напоминает Ассемблер.

Языки LD и FBD являются данью традициям (т. е. аппаратным аналогам этих языков – релейным схемам и функциональным схе­мам электронных устройств на базе логических элементов типа И, ИЛИ, НЕ и т. д.).

Язык LD – графический язык, основанный на принципах релейно-контактных схем (элементами релейно-контактной логики являются: контакты, обмотки реле, вертикальные и горизонталь­ные перемычки и др.) с возможностью использования большого количества различных функциональных блоков.

Язык релейных схем существует со времен Т. Эдисона и адап­тирован к ПЛК в начале 70-х годов прошлого века. Впервые поя­вился в пакетах программирования ПЛК компаний Allen-Bradly и Modicon. Символика этого языка была заимствована из проек­тирования в области электротехники.

Достоинствами языка LD являются: представление программы в виде электрического потока (близок специалистам по электротехни­ке), наличие простых правил, использование только булевых выра­жений. Язык LD имеет большой круг пользователей, рационален для ручной оптимизации специфических критических мест кода.

Язык FBD – это полностью графический язык высокого уров­ня, обеспечивающий управление потоками данных, включающих все типы. Позволяет использовать очень мощные алгоритмы про­стым вызовом функций и функциональных блоков, имеет большую библиотеку блоков, удовлетворяет непрерывным динамическим процессам, хорош для сложных вещей подобно ПИД-регуляторам (ПИД – пропорционально-интегрально-дифференциальный регуля­тор, PID-регулятор), массивам и т. д.

FBD заимствует символику булевой алгебры и, так как булевы символы имеют входы и выходы, которые могут быть соединены между собой, FBD более эффективен для представления структур­ной информации, чем язык релейно-контактных схем.

FBD удобен для небольших приложений.

Язык IL является языком низкого (машинного) уровня, что су­щественно облегчает, например, условный или безусловный вызов функциональных блоков и функций, выполнение назначений и условных или безусловных переходов внутри секции, похож на Ассемблер. Язык IL позволяет создавать высокоэффективные и оптимизированные функции. Его можно рекомендовать для напи­сания наиболее критических мест в программе.

Ассемблероподобные языки использовались для программиро­вания компьютеров в 50-е годы XX века и все еще предлагаются некоторыми изготовителями ПЛК, особенно программистами, поддерживающими микроРС. Корни языка IL лежат в языке STEP компании Siemens. IL можно программировать с помо­щью любого текстового редактора.

Язык ST является языком высокого уровня (типа Паскаля). Был популярен в середине 70-х годов XX века для сложных компью­терных приложений. Служит для создания процедур со сложной логикой. Может использоваться как в главных программах, так и в теле функции или FBD, а также для описания действий внутри элементов редакторов SFC или Flow Chart. Обладает высокой чи­табельностью исходного кода: ключевые слова, такие, как AND, OR, NOT, IF, THEN, ELSE, WHILE (и т. д.) легко понимаемы; прост в сопровождении, если имена переменных понятны, имеют­ся комментарии, код хорошо структурирован.

Язык SFC предложен в 1979 году (его прототипом является язык Grafcet компании Telemecanique, стандарт IEC 848) как графический язык, предназначенный для описания функций последовательных операций и позволяющий ясное и однозначное определение желае­мого поведения системы управления. Отличается строгим математи­ческим определением, (каждое операционное состояние может быть декодировано с достаточно малым анализом). Удобен для описания как последовательных процессов, так и пакетных или параллельных процессов, легко комбинируется с другими языками (язык специфи­каций). Обеспечивает улучшение понимания оборудования при фор­мировании модели приложения. Обладает развитыми механизмами синхронизации. Использует простые динамические правила.

Диагностика языка SFC позволяет обнаружить ошибки проекта до того, как приложение тестируется в режиме Online. Интерактивно анимируемый язык SFC также служит для облегчения диагностики оборудования и ошибок системы управления и после ввода в дейст­вие. Использование языка SFC как диагностического инструмента может уменьшать среднее время устранения таких неполадок. SFC широко принят как стандарт в Европе.

Языки SFC и ST, в паре составляющие полную и завершенную среду для программирования ПЛК, не всегда удовлетворяют пользователей, например, из-за быстродействия или невозможности дос­тупа к системным ресурсам, что заставляет прибегать к использова­нию языков типа С, который не входит в стандарт IEC 61131-3 (далее – стандарт).

Стандарт определяет языки программирования, синтаксис, вид объектов, структуру ПО, объявление переменных.

Стандарт описывает детально синтаксис языков программиро­вания, поэтому пользователь найдет один и тот же синтаксис во всех пакетах, поддерживающих стандарт, будь то пакет ISaGRAF компании CJ International или пакет Concept компании Schneider Electric. Графическое представление прикладных программ – это типичная особенность программирования ПЛК. Текстовые языки широко используются при программировании компьютеров.

Программирование логики ведется с применением языков SFC, LD, FBD, IL, ST, а также дополнительных интерактивных редакто­ров для описания переменных, определений и конфигурации вво­да/вывода.

Все языки программирования контроллеров взаимоувязаны – для них стандарт определяет единые модели ПО, связных функциональных блоков и модель собственно программирования. Стандартизированы общие элементы этих языков и, прежде всего, используемые символы, типы данных и переменные. Определены функции и функциональные блоки, их декларации, наборы стан­дартных функций и функциональных блоков, понятия программ на этих языках. Стандарт определяет и такие общие элементы, как конфигурации, ресурсы, пути доступа, задачи. Все это дает воз­можность программирования на любом из этих языков с обеспечением генерации кодов единой программы. Языки программирова­ния определены в стандарте таким образом, что допускают разра­ботку приложений на их смеси, которая впоследствии собирается в единую исполняемую программу. Кроме того, стандарт открыт для использования других языков программирования. И, наконец, в стандарте рассмотрена специфика каждого из языков.

Требования к языкам программирования для ПЛК:

Наглядное описание автоматизируемых технологических про­цессов (ТП) и дальнейшая отладка в терминах исходного описания;

Мобильность – способность к переносу на различные аппарат­ные и операционные платформы;

Эффективное исполнение программы в реальном времени (РВ).

Наглядность описания определяется характером объекта и сле­дующими задачами по управлению объектом.

1) Задачи параллельной обработки большого числа логических контуров (сотен и тысяч) с обработкой исполнительных действий при наступлении тех или иных событий. В основе логического контура лежит проверка истинности логической функции от не­скольких переменных, а событие равнозначно истинности этой функции. Задачи такого рода характерны, например, для таких технологических объектов, как электростанции, химические про­изводства и производства по переработке нефти. Задача адекватно и наглядно описывается системой булевых уравнений. Все языки стандарта, за исключением SFC, хорошо подходят для опи­сания подобных задач, поскольку они или содержат в себе средст­во представления булевых функций (языки IL, ST), или являются графической формой их отображения (языки LD, FBD).

2) Задачи управления процессом, проходящим в своем разви­тии через ряд состояний (шагов, стадий). Переход от одного со­стояния к другому происходит по событиям, формируемым по сигналам датчиков процесса. Такие задачи управления возникают, например, при управлении транспортно-складскими системами, агрегатными станками, робототехническими комплексами, харак­терны они и для объектов, перечисленных в п. 1, в частности, при пуске и останове турбины и др. Задачи данного типа наиболее на­глядно представляются автоматными моделями. В стандарте такая модель строится с использованием языка SFC (разметка состоя­ний, логика управления) и любого другого языка (описание дейст­вий, связанных с состоянием, и событий, предписывающих смену состояний). Заметим, что подобные задачи могут быть полностью представлены с помощью других языков стандарта, например языка FBD с использованием элементов памяти – триггеров, но в этом случае автоматная модель будет выражена неявно.

3) Задачи автоматического регулирования (ПИД-законы, не­четкое управление и т. д.) встречаются практически везде. Здесь, как правило, используются библиотеки заранее разработанных компонентов – графических блоков для языков LD и FBD и под­программ для языков ST и IL.

4) Задачи управления распределенными технологическими объектами, оптимизационные, а также задачи, связанные с интел­лектуальным анализом данных. Задачи такого типа решаются в сложных технологических объектах типа химических производств. Здесь в качестве средств адекватного описания могут использо­ваться языки ST, универсальные типа С, С++, Паскаль, сценарные типа Visual Basic, объектно-ориентированные типа Java.

Мобильность языков, т. е. способность к переносу на различ­ные аппаратные и операционные платформы, может поддержи­ваться для языков стандарта в случае использования пакета от од­ного разработчика. Это связано с невозможностью сосуществова­ния в одной разработке программ на одинаковых языках от разных поставщиков, так как требования стандарта IEC 61131-3 носят ре­комендательный характер, а значит, приводят к различиям в реа­лизации языков у разных производителей.

Эффективное исполнение в РВ дает ответ, насколько быстро сможет отреагировать система управления (ПЛК) на происшедшее событие. Обычно используется понятие «временной цикл», т. е. заранее задаваемый интервал времени, например, в диапазоне 10...300 мс, в течение которого ПЛК сможет гарантированно отреа­гировать на входное воздействие. Для обеспечения более быстрой реакции служат так называемые инициативные сигналы, которые об­рабатываются по прерыванию (от десятков до сотен микросекунд).

Для широкого круга приложений задача обеспечения требуе­мого временного цикла решается достаточно легко благодаря вы­сокому быстродействию процессоров, используемых в ПЛК. Например, в контроллерах Modicon применяются процессоры компа­нии Intel от Intel 286 до Pentium. Тем не менее, здесь есть одна про­блема: неэффективное использование процессора при управлении объектами, в которых осуществляется в основном обработка логи­ческой информации, при которой используется только один разряд из 32. Если найти решение этой проблемы, то, по крайней мере, можно будет понизить класс применяемого процессора, что вы­годно по экономическим соображениям.

Согласно требованиям стандарта, не предопределенные объек­ты должны иметь имя и тип, объявленные программистом, предо­пределенные объекты распределяются на три зоны: зону памяти (%М), зону входов (%I) и зону выходов (%Q). Объектами могут быть: биты (X), байты (В), слова (W), двойные слова (D), «длин­ные» слова (L) – 64 бита.

Ограничения стандарта: не фиксируется имя задач; размер графического редактора оставляется на выбор пользователя; нет минимального количества функций, готовых к реализации, но если используется имя по стандарту (функциональный блок и т. п.), то оно должно соответствовать стандарту; сервисные утилиты и средства разработки и отладки приложения (редакторы, языки, документирование и т. п.) не определены; нет точных правил вы­полнения программы (например, для функциональных блоков); не описана конвертируемость языков. Сертификат IEC 61131-3 на сегодня не существует, нет определенного «класса соответствия». Каждый разработчик, объявивший свое соответствие норме, дол­жен представить документацию таблиц соответствия, а также спи­сок дополнительных расширений.

Преимущества стандарта для конечных пользователей состоят и том, что уменьшается стоимость обучения, пользовательские приложения однородны, структура программ идентична, исполь­зуются предопределенные объекты и т. п. Разнообразие стандарт­ных языков позволяет каждую функцию приложения запрограм­мировать наиболее подходящим для данной задачи языком.

Следование стандарту позволяет разработчикам ПЛК обеспе­чить соответствие разработки техническим требованиям, предъяв­ляемым потребителями, и даже ввести дополнительные функции, что не могут сделать мелкие поставщики ПО.

Изучение методологии проектирования систем автоматическо­го и автоматизированного управления на основе современных ин­формационных технологий, составной частью которых являются языки программирования ПЛК, - необходимый элемент в подго­товке специалистов по автоматизации.

В данном пособии описывается синтаксис языков программирования ПЛК на примере пакета Concept.

9 сентября 2016 в 14:35

Концепт языка программирования 5-го поколения. Часть 3

  • Программирование
  • Recovery Mode

Всем привет. Предыдущие две публикации сопровождались комментариями «Это все уже было». Я провел некоторые изыскания и предлагаю вашему вниманию еще одно видео. Первые 4 мин. 20 сек. содержат только новое, чего я не нашел в других фреймворках. Остаток видео - то что уже где-то есть, но я сделал это лучше (проще и удобнее).

Данное видео - концепция, это не ПО готовое к употреблению. Это публикуется здесь, чтобы быть улучшенным.

Транскрипт под катом.

Hi everyone!
Today I will show you a short presentation about G5. The first step is aspect-oriented programming.
It"s not classical in G5, let"s have a look at it.
Here is a simple method with some business logic. It’s short and understandable.
But programs usually contain other aspects
For example, business restrictions.
Another aspect is checking for system errors.
Don’t forget about error handlers.
Sometimes you need logger for debugging.
Aspect of documentation is very important too.
Aspect of the optimization, it can make your source code disgusting, but you really need it.
Let’s also add aspect of business errors and some metadata for unit tests.
And now, you can do at least two things with the aspects.
First, you can hide the aspects from the screen using this buttons.
Secondly, you can disable compilation of any aspects, for example debug and optimization.
You can define your own aspect, for example aspect of the security.
You can use annotations for one or several methods or special constructions with the template of the source code.
Specification language: it’s designed for distributed applications.
The first part of it is “entities”. They are like data contracts, but better.
You can define business structures with them, and then use it in the source code of several applications.
Thera are no data types of G5, so you can use it with any programming languages.
Specification language is not a part of the source code; it’s only metadata for the compiler, and I’m using annotations instead of inheritance.
You can define any public or private fields and methods in your classes.
You can change types for the main fields, but they must be compatible with the types of the entity.
You can set the main fields as public or private, as you wish.
You can even rename fields.
You can’t delete the main field, but you can ignore it.
And of course you can’t change business restrictions.
Well, Entities help you to control data structures in distributed applications without common base classes.
Your applications are not related anymore, and this is more reliable way to create enterprise solutions.
Specification language is an aspect of the design; you can hide it and disable compilation for it.
The second part of the specification language is API.
You can describe your API using WSDL or any other languages. Here is an example for USDS.
I defined two structures and a function and now I will create a server for this API.
In this case the compiler will use annotations to create additional methods for the class “MyServer”.
This is very fast and simple way to create a server application.
The next part is library specifications.
I will show you an example of how to create a plugin for the application using specification language.
I defined description of the library, two classes.
Now, I can create realization of this specification.
The compiler will use annotation to store function names in the library file.
Any methods without the annotations won’t be visible in the library.
I will import my plugin dynamically.
The compiler will again use the annotation to create additional methods - fabrics of the Business class and first class.
You can use the same way to import standard Windows or Linux dynamic libraries.
Chapter three - Declarative programming using widgets.
There are many widgets in G5, I will show you four of them.
The first one is a text widget.
You can use any symbols inside it.
You can define this text field as translatable and set any text encode.
The next one is a source code widget.
It’s very similar to the text widget, but it has syntax highlighting and macros.
You can use the macros to change the source code in the widget, and then you can compile the code in runtime and execute it.
The third example is a widget for user interfaces.
Just draw a window as you wish and then you can use it’s elements in the source code.
G5 contains many other widgets: for databases, for regular expressions etc. You can also create a new widget for G5.
The last example is a widget “Report”.
This widget can contain the source code.
It’s also a part of the file “main.code”, so the widget can use the local variables and functions of the file.
The widget can request data for itself and change report formatting.
You can save the report in PDF, HTML or any other format.
And here is the result.
Chapter four, Language oriented programming.
You can create your own domain-specific programming language using G5.
Thera are at least two possibilities for DSL in G5.
The firs one is you can define new language semantics. Let’s have a look at it.
Here is a class with an array inside. You can set the element’s value using this method.
But it looks not good. The batter way is using an access operator.
I will define this constriction using the keyword “Semantics”.
The first part is the code template, and the second part is realization.
I wrote only for lines and it works now.
What about more complex constructions?
For example, a cycle in this style.
And again, I’m defining the template and it’s realization. Seven lines and it works too.
Another useful thing is physical variables.
You can define it and use in your functions and methods.
You can also define several variables and relations between them.
The values will be converted correctly after that.
Conversions between physical variables and G5 types are possible too.
The compiler controls all wrong conversions.
Well, create new semantics and widgets, use physical variables and you will get a powerful domain-specific language.
That"s all for today.
If you like this presentation, please share the video with your friends.
I’m ready to answer any questions, please contact me at this email address.
Thank you for your attention.


Всем привет. Предыдущие две публикации сопровождались комментариями «Это все уже было». Я провел некоторые изыскания и предлагаю вашему вниманию еще одно видео. Первые 4 мин. 20 сек. содержат только новое, чего я не нашел в других фреймворках. Остаток видео - то что уже где-то есть, но я сделал это лучше (проще и удобнее).

Данное видео - концепция, это не ПО готовое к употреблению. Это публикуется здесь, чтобы быть улучшенным.

Транскрипт под катом.

Hi everyone!
Today I will show you a short presentation about G5. The first step is aspect-oriented programming.
It"s not classical in G5, let"s have a look at it.
Here is a simple method with some business logic. It’s short and understandable.
But programs usually contain other aspects
For example, business restrictions.
Another aspect is checking for system errors.
Don’t forget about error handlers.
Sometimes you need logger for debugging.
Aspect of documentation is very important too.
Aspect of the optimization, it can make your source code disgusting, but you really need it.
Let’s also add aspect of business errors and some metadata for unit tests.
And now, you can do at least two things with the aspects.
First, you can hide the aspects from the screen using this buttons.
Secondly, you can disable compilation of any aspects, for example debug and optimization.
You can define your own aspect, for example aspect of the security.
You can use annotations for one or several methods or special constructions with the template of the source code.
Specification language: it’s designed for distributed applications.
The first part of it is “entities”. They are like data contracts, but better.
You can define business structures with them, and then use it in the source code of several applications.
Thera are no data types of G5, so you can use it with any programming languages.
Specification language is not a part of the source code; it’s only metadata for the compiler, and I’m using annotations instead of inheritance.
You can define any public or private fields and methods in your classes.
You can change types for the main fields, but they must be compatible with the types of the entity.
You can set the main fields as public or private, as you wish.
You can even rename fields.
You can’t delete the main field, but you can ignore it.
And of course you can’t change business restrictions.
Well, Entities help you to control data structures in distributed applications without common base classes.
Your applications are not related anymore, and this is more reliable way to create enterprise solutions.
Specification language is an aspect of the design; you can hide it and disable compilation for it.
The second part of the specification language is API.
You can describe your API using WSDL or any other languages. Here is an example for USDS.
I defined two structures and a function and now I will create a server for this API.
In this case the compiler will use annotations to create additional methods for the class “MyServer”.
This is very fast and simple way to create a server application.
The next part is library specifications.
I will show you an example of how to create a plugin for the application using specification language.
I defined description of the library, two classes.
Now, I can create realization of this specification.
The compiler will use annotation to store function names in the library file.
Any methods without the annotations won’t be visible in the library.
I will import my plugin dynamically.
The compiler will again use the annotation to create additional methods - fabrics of the Business class and first class.
You can use the same way to import standard Windows or Linux dynamic libraries.
Chapter three - Declarative programming using widgets.
There are many widgets in G5, I will show you four of them.
The first one is a text widget.
You can use any symbols inside it.
You can define this text field as translatable and set any text encode.
The next one is a source code widget.
It’s very similar to the text widget, but it has syntax highlighting and macros.
You can use the macros to change the source code in the widget, and then you can compile the code in runtime and execute it.
The third example is a widget for user interfaces.
Just draw a window as you wish and then you can use it’s elements in the source code.
G5 contains many other widgets: for databases, for regular expressions etc. You can also create a new widget for G5.
The last example is a widget “Report”.
This widget can contain the source code.
It’s also a part of the file “main.code”, so the widget can use the local variables and functions of the file.
The widget can request data for itself and change report formatting.
You can save the report in PDF, HTML or any other format.
And here is the result.
Chapter four, Language oriented programming.
You can create your own domain-specific programming language using G5.
Thera are at least two possibilities for DSL in G5.
The firs one is you can define new language semantics. Let’s have a look at it.
Here is a class with an array inside. You can set the element’s value using this method.
But it looks not good. The batter way is using an access operator.
I will define this constriction using the keyword “Semantics”.
The first part is the code template, and the second part is realization.
I wrote only for lines and it works now.
What about more complex constructions?
For example, a cycle in this style.
And again, I’m defining the template and it’s realization. Seven lines and it works too.
Another useful thing is physical variables.
You can define it and use in your functions and methods.
You can also define several variables and relations between them.
The values will be converted correctly after that.
Conversions between physical variables and G5 types are possible too.
The compiler controls all wrong conversions.
Well, create new semantics and widgets, use physical variables and you will get a powerful domain-specific language.
That"s all for today.
If you like this presentation, please share the video with your friends.
I’m ready to answer any questions, please contact me at this email address.
Thank you for your attention.