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

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.

Подробнее

  • Язык программирования 1С .
    Разработчик: компания "1С".
    Трудно представить успех одноимённой программы с англоязычным языком программирования.
    Статус: развивается, поддерживается .
    да .
  • Язык программирования AL-IV (АЛФОР)
    .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Animo , описание на английском.
    Авторы: Дмитрий Шабанов, Евгений Газдовский
    Статус: в разработке .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Context
    .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Delavar
    .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования DEmbro
    .
    Форто-подобный язык.
    Статус: проект не развивается .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования ELENA
    .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Gentee
    Автор: Алексей Кривоногов
    Последняя версия: 28 октября 2010 г., довольно-таки активен форум.
    Статус: проект не развивается .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Языки программирования Jam и Si
    .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Jancy
    Разработчик: компания Tibbo.
    Статус: развивается, поддерживается .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Jpho (или Jfo)
    Автор: Игорь Томасов
    Прототипом языка Jfo является язык Forth. Это скриптовый язык, интегрированный с Java и оперирующий объектам Java.
    Статус: развивается, поддерживается .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования K++
    Авторы: Дмитрий Кашицын, Дмитрий Роот.
    Работает поверх собственной виртуальной машины, декларируется кроссплатформенность.
    Статус: развивается, поддерживается .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Kotlin
    Разработчики: компания «JetBrains», Андрей Бреслав и коллеги по «JetBrains».
    Единственный из отечественных языков, который в ближайшее время имеет шансы стать «мировым».

    Хотя о том, что Kotlin будет официально использоваться для разработки под Android сообщили только весной 2017 года, на конференции Google I/O 2017, он уже обрел немалую популярность и полюбился разработчикам. Ещё прошлой осенью аналитики компании Realm сообщали, что Kotlin набирает популярность с огромной скоростью. К примеру, в мае 2017 года, до проведения конференции Google I/O, Kotlin использовали 7,4% девелоперов, а к концу сентября 2017 года этот показатель удвоился и составил 14,7%.

    Исследователи Realm полагали, что если темпы роста сохранятся на таком же уровне, то уже к декабрю 2018 года доля Kotlin составит 51% рынка, то есть Java потеряет свое лидерство. В настоящее время Kotlin наиболее популярен в Германии, Японии, Индии, США и Бразилии.

    Статус: развивается, поддерживается .
    Кириллические идентификаторы и/или ключевые слова: нет .

  • Язык программирования LUX
    .
    Кириллические идентификаторы и/или ключевые слова: нет .
  • Язык программирования Lviv (Львов, Украина)
    .
    Кириллические идентификаторы и/или ключевые слова: нет .

    В чём я смогу написать собственный язык программирования?

    Как-то слишком общо поставлен вопрос. Что Вы имели в виду под «в чём»? Разработку языка желательно закончить формальным описанием грамматики и описанием семантики. А дальше - разработка компилятора, на этот есть счёт много литературы. На Ваш вопрос трудно ответить двумя предложениями. Gentee автор бросил в 2010, вчера он это подтвердил (8 мая 2013) на форуме, форум смешанный, англо-русский.

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

    По одной из ссылок нашёл HomeLisp, недавно было обновление, проект жив. Буду смотреть, что это такое.

    Админ, спасибо за страничку (хорошо бы её обновить и даты обязательно проставить, ссылки перепроверить, одна сдохла).

    Разбил список на активные/замороженные проекты. Отметил неактуальные ссылки.

    Здесь перечислены языки отечественных авторов. Список компиляторов/интерпретаторов к готовым языкам можно поискать в других местах, я их уже указывал: Ресурсы, посвящённые созданию языков программирования и компиляторов . Там можно найти и Бейсик, и Паскаль, и Форт... Немало проектов, в том числе международных.

    2013/12/20 16:59 , Alexandre Minoshi (Almin-Soft)

    Http://alminsoft.nx0.ru/ переехал на новую площадку. Теперь его можно найти по ссылке almin-soft.ru

    Но последняя версия Валентины у меня все таки есть, если интересно пишите на almin-soft(собака)yandex(тчк)ru В языке Delavar английские служебные слова. Наверное, стоит его переместить в иной раздел - без кириллицы. еще забыт язык vkACL, у него русский автор и я в нем усматриваю аналогию с шитым кодом.

    Автор Виктор Кон, физик, что-там с линзами по работе с рентгеном, совместный российско-французский проект. Я переписывался с ним одно время как раз по-поводу создания языков программирования. Насколько помню язык прост и не поддерживает рекурсию (автору не требовался). Последнее хранилище Валентины

    2014/08/14 18:31 , Виктор Кон

    Хочу уточнить про язык vkACL. Он не забыт, я его делал для себя, и я постоянно им пользуюсь. У него был сайт vkacl.narod.ru, он до сих пор в строю, хотя и переехал на юкоз. Язык называется ACL (advanced command language), а приставка vk указывает на автора. В многочисленных каталогах программ стоят старые версии, а на сайте есть новые. Язык реально не компилируется, а интерпретируется программой, написанной на Java. Он очень простой по структуре, но из-за наличия огромного количества команд и их параметров все сразу усвоить сложно. На языке можно писать программы любой степени сложности, но в ограниченных областях. В основном это работа с файлами, текстом, расчеты, графики, картинки, постскрипт, можно делать анимации, презентации, работать с pdf файлами. Короче все то, что мне необходимо. Базами данных я не занимаюсь, этого нет (то есть sql, xml). На сайте все написано. Главная цель языка была в том, чтобы писать программы очень быстро и сразу их исполнять. В самой программе есть и среда разработки и набор готовых программ. Среди готовых программ есть в частности программы быстрого создания вэб сайтов из текста и создание электронных книг в формате fb2.

    2014/08/21 11:05 , Эрих Гаузер

    Есть ещё один язык. Создан он мной, называется он «Ellochka» («Эллочка»), его описание находится на этой странице .
    Язык интерпретируемый, на том же сайте есть интерпретатор и есть набор утилит на этом языке. Поскольку создавался он ещё в среде ДОС (последняя версия транслятора - 2001 год) и я так и не собрался перевести его под окна, сейчас, конечно. его применение затруднительно и не так актуально. Однако, я сам до сих пор использую некоторые полезные утилиты на этом языке.
    Кроме того, на Эллочке были написаны интерпретатор и компилятор(!) известного языка "brainfuck". Их тоже можно скачать на указанном сайте.

    2015/03/02 08:52 , Александр

    Привет всем! Сайт классный. Я недавно начал писать собственный интерпретатор скриптового языка, но знаний мало, а книг толковых нет, много воды. Поэтому решил начать что-то сам. Предлагаю энтузиастам-программистам С# объединиться и создать полноценный скриптовый язык, котоорый будет работать как на стороне сервера, так и на строне клиента. Чтобы не было разбиения на языки типа php, javascript, ajax, jquery и тому подобные. Чтобы был один язык, но был двузадачным (для клиента и сервера). Кому это интересно, пишите на почту: [email protected] или skype: avmpapus Понравился этот сайт. Вопрос создания нового языка программирования меня сильно интересует. Но обсуждение на этом сайте носит несколько однобокий характер. Из рассмотрения выпал язык MUMPS. По-моему, незаслуженно. Он, конечно, малопопулярен, но, в отличие от многих других языков, работоспособен. На нем работают с 70-х годов до нашего времени. И здесь есть чем гордится. В 80-90-е годы Игорем Фетисовым была создана MUMPS-система NTSM. Которая использовалась на территории бывшего СССР. У меня на этой системе был разработан бух.учет который работает до сих пор. Сейчас активно разрабатывается и функционирует очень интересная система MUMPS MiniM. Разработчик - Евгений Каратаев. Есть его книги по MUMPS. Вышла книжка про MUMPS: http://www.solon-press.ru/shop.html?id=845. Со временем должна попасть в самые различные книжные магазины.

    обсуждение на этом сайте носит несколько однобокий характер

    Да тут немало языков рассматривалось. Или однобокость заключается в том, что не рассматривался MUMPS?

    в отличие от многих других языков, работоспособен

    Не могли бы привести примеры неработоспособных языков? C/C++? Java? C#? Pascal? PHP? Oberon? Ruby? D? Javascript? 1С, в конце концов? Я тоже в некотором роде энтузиаст программирования на русском языке. Свой компилятор я, правда, не пишу, зато русифицирую систему литературного программирования web, разработанную Д. Кнутом. Русифицированные файлы этой системы позволяют как определять русские имена переменных, так и переопределять стандартные ключевые слова языка Паскаль на русские.

    Jpho может использовать любой язык (language) для определения слов, констант, переменных и т.д. Обычно это кодировка UTF-8.
    Поэтому определения слова:
    : prepare ... ; или: подготовить... ; или: bereiten ... ; Никакой разницы не имеет.

    Если у вас будет поддерживаться 200 языков, то ключевые слова на одном языке могут повторять другие ключевые слова на другом языке. Т.е. возможны противоречия. Или идентификатор на одном языке может быть воспринят как ключевое слово на другом языке. Вопрос интересный. В Jpho, как в FORTH, используются словари. Словарь может быть определен в виде Java-файла (JphoVocabulary, слово extends) или в обычном коде Jpho (слово voc). По второму варианту используется слово import для загрузки Jpho-файла, интерпретация которого может быть осуществлена в соответствующий словарь.

    Например: "RU" voc
    import: ru_voc.jfo Далее компиляция (интерпретация) пойдет в словарь RU, который станет текущим словарем.

    В Jpho в системном словаре JFO более 500 предопределенных слов, но если мы хотим переопределить слова в другом языке, то следует создать файл-словарь, в котором будут определены слова на необходимом языке.

    Например: : дублировать dup ; Это значит, что вместо стандартного слова dup аналогично будет работать слово "дублировать".

    Не вижу никакого смысла вводить название слов по-русски в код, так как это можно реализовать загрузкой словаря (и по-английски короче и традиция). Еще хотел бы добавить. Jpho (как и FORTH) - стековый язык: все параметры приходят из стека и возвращаются в стек. Поэтому в Jpho нет функций, есть только слова или код, который сразу выполняется при интерпретации (в том числе условные переходы и циклы). Большинство слов перегружено, например, слово "+" работает с числами, строками, списками и т.д. Если есть необходимость, то в коде Jpho можно ещё "перегрузить" слово. Как в FORTH, Jpho поддерживает правило - минимальное количество символов для выполнения операции (слова). Поэтому вывод в выходной поток из стека просто точка «.».
    Обратная (польская) запись: 100 300 + На вершину стека положили число 100, потом 300 (100 ушло в позицию 1 стека, в положение 0 попало число 300), слово "+" складывает два объекта в стеке с положением 0 и 1, и возвращает сумму на вершину стека.
    Т.е. на вершине стека будет 400. 100 300 + . А это все сложит и выведет результат в выходной поток.

    Определим слово "возведение_в_квадрат" // n - n2
    : возведение_в_квадрат dup * ; Дублируем число в стеке, а потом перемножаем, результат в стек.

    Т.е. расхождения с Фортом на грани стилистических? Ну и выполнение не на реальной машине, а на JVM. Еще дополнение.
    1. Язык Jpho предназначен не для написания приложений (хотя это возможно), а для интеграции с Java и Java EE технологиями.
    (понятно, что изменения Java-кода требуется перекомпиляцию проекта, в основном это в работающей системе невозможно).
    2. Изменение Jpho-скрипта возможно без переустановки систем (тем более, что коды мы храним в БД).
    3. Jpho может обратиться к любому Bean, менеджеру, к БД или Web-сервису.
    4. Jpho, в отличии от FORTH, использует префиксы и постфиксы, например, создание переменной: 100 Моя_переменная!
    Получить значение из переменной - Моя_переменная@ Получить значение из атрибута (используется префикс): @name Т.е. получить из объекта в стеке значение геттера getName. !name - тоже установить setName. Остальное можно прочитать в документации. Да, скажем идея Чака Мура с Фортом (а он создал язык для управления телескопом), которую я абсолютно не понял (зная Lisp, Fortran, Algol, PL и т.д) в конечном итоге привела к тому, что это все очень логично и лаконично. На FORTH можно было реализовать ОС для компьютера, или включить его в телефонную станцию (менее 6 кБ оперативной памяти), или программировать машинные автоматы.
    Сейчас запросы другие, но остаются в приоритете:
    1. Интеграция с приложениями
    2. Быстрая обучаемость
    3. Замена кода без перекомпиляции проекта
    4. Бесконечное количество отчетов в HTML/Excel/PDF
    5. Работа Web-сервисов и клиентов.

    Плюсы, которыми обладает Форт, появились более 40 лет назад. И до сих пор этот потенциал не раскрыт. Что побудило написать вот такое пессимистическое: Почему обречён язык Форт . Не ответил на вопросы:

    1. Расхождения с Фортом стилистические и не только (например, префиксы, постфиксы).
    Например, в FORTH строка должна начинаться со слова «" »: " Это строка". Слово «"» прочитает из входного потока слово «" » и поймет, что это строка. В Jpho используется префикс " и никаких пробелов не нужно

    2. Да, Jpho работает на JVM. Другие реализации возможны: PHP, JavaScript (который и так используется в Web-технологии), C++. Но язык никому не нужен, если он не дает конечные результаты для пользователей.
    Это мы с Вами можем рассуждать о красивости/некрасивости конструкций в языке программирования. Для Заказчика/Конечного пользователя есть только набор интерфейсов, функционала и отчетов. В данной конкретной ситуации, Jpho мы используем, как скрипт для Java EE технологии, со всеми его возможностями. Теперь есть и ещё один язык программирования на основе кириллицы - Ява, кириллизованная версия Java. Сайт с базовым описанием: http://wiki.elliptica.net/вики/Ява. Код классов взаимодействует с нативным кодом через кириллические сигнатуры методов в бинарных библиотеках (собраны с поддержкой расширенных международных идентификаторов).

    Для поддержки языка (кодирование и сборка) осуществлена адаптация интегрированной среды разработки Netbeans. Основной набор инструментов, доступных для Java, теперь доступен и для нового диалекта Ява.

    Также в рамках поддержки этого проекта осуществлено добавление кириллических аналогов ключевых слов языков C/C++/ObjC/ObjC++ в компиляторе GCC. Получившийся компилятор предполагается назвать RuCC/Ru++.

    В планах есть оборачивание стандартной библиотеки C кириллическими именами и примерно такой же подход для стандартной библиотеки C++. Euphoria - интерпретируемый язык с очень быстрым интерпретатором. Распространяется public domain с середины 90-х, до этого была платная версия, затем был форк.

    Cайт проекта http://www.rapideuphoria.com/news.htm

    Http://openeuphoria.org/wiki/view/DownloadEuphoria.wc - новые версии 4.0, старые legacy, форки

    альтернативный форк с доработками http://phix.x10.mx/ репозиторий https://bitbucket.org/petelomax/phix/src

    Есть *большое* множество библиотек, привязок к библиотекам и примеров кода http://www.rapideuphoria.com/archive.htm

    Встречаются и необычные, например привязки в ассемблеру fasm
    http://www.rapideuphoria.com/fasm4eu.zip http://phix.x10.mx/pmwiki/pmwiki.php?n=Main.TgsFlatAssembler

    В phix встроена инструкция #ilasm, и более продвинутый отладчик и оптимизатор

    Поддерживаются кириллические идентификаторы и unicode в новых версиях, операторы на английском

    Кроме того, старая версия была портирована для одновременной поддержки операторов и идентификаторов на русском языке:

    http://www.private.peterlink.ru/kinz/3.2ru/index.html

    http://phix.x10.mx/pmwiki/pmwiki.php?n=Main.BilingualEuphoria25

    http://www.rapideuphoria.com/lan.htm -> http://www.rapideuphoria.com/ru_eu_11.zip

    Автор порта И. Н. Качан
    http://www.private.peterlink.ru/kinz/ , есть примеры и описание языка. Полиглот: Смоллток на русском языке (портированный Squeak 3.9) + книга А. Голдберг "Смоллток. Язык и его реализация" https://sites.google.com/site/polyglotsqueak/

    Сборка содержит модули OMeta, SmaCC - компиляторы компиляторов (с примерами грамматик готовых языков в SmaCC) которые могут быть использованы для разработки своего транслятора или полуавтоматической трансляции в/из свой язык программирования.

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

    Вот Глагол - русский язык программирования, уникальный? По-моему, нет - это просто Оберон-2 с русским синтаксисом.

    Концептуально Глагол, Оберон-2 и какой-нибудь BlackBox Component Pascal, школьная сборка http://www.inr.ac.ru/~info21/software.htm http://inf.1september.ru/article.php?ID=200800100 - это один и тот же язык, семантически. Небольшие отличия в синтаксисе и переводе - не существенны.

    А например Рапира и Оберон - разные языки, ибо в Рапире кортежи есть, а в Обероне - нет.

    Раз Глагол был назван его автором именно Глаголом, а не русским Обероном, значит у него было какое-то видение самобытности или уникальности собственного творения. Я с ним не спорю и не провожу экспертиз на идентичность, просто верю на слово. Но если разработка компилятора какого-то языка, появившегося за рубежом, проводится какой-то отечественной компанией, то можно подправить другой список: . Почему компаниям «можно» быть упомянутым, а отдельным людям нет? Потому что этот список может помочь кому-то найти работу, совпадающую с хобби. К сожалению, вижу в новостях на сайте КОНЦЕПТа, что проект завершён. Хотя шикарная вещь, ей бы только библиотек побольше - и в школы/вузы.

    Мечтаю увидеть русский LOLCODE:) ПРИВ
    ТУТ П = 0
    ВИРА П ДО 10
    ПОКАЖ П
    ХОРОШ
    ПОКЕД

    2018/03/25 21:14 , Денис Будяк

    Не помешает добавить школьную сборку info21 (aka школьная сборка блэкбокс)

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

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

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

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

Историческое развитие ПЛК привело к возникновению разных решений, связанных с конкретным производителем и в той или иной степени удовлетворяющих общим стандартам (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.



Всем привет. Предыдущие две публикации сопровождались комментариями «Это все уже было». Я провел некоторые изыскания и предлагаю вашему вниманию еще одно видео. Первые 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.