Программируемые логические контроллеры (ПЛК) используются практически во всех сферах человеческой деятельности для автоматизации технологических процессов, в системах противоаварийной защиты и сигнализации, в станках с числовым программным управлением, для управления дорожным движением, в системах жизнеобеспечения зданий, для сбора и архивирования данных, в системах охраны, в медицинском оборудовании, в системах связи, при постановке физического эксперимента, для автоматизации испытаний продукции и т. д.
В настоящие время для разработки программ для ПЛК используются (в основном) языки стандарта МЭК 61131-3 (МЭК-языки). В состав стандарта МЭК 61131-3 входит 5 независимых языков[3,5]:
- Instruction List (Список Инструкций) - Текстовый язык. Аппаратно¬независимый низкоуровневый ассемблероподобный язык;
- Ladder Diagram (Релейно-Контактные Схемы) - Графический язык. Представляет собой программную реализацию электрических схем на базе электромагнитных реле;
- Function Block Diagram (Функциональные Блоковые Диаграммы) - Графический язык. Программа образуется из списка цепей, выполняемых последовательно сверху вниз;
- Sequential Function Chart (Последовательные Функциональные Диаграммы) - Графический язык. Создан на базе математического аппарата сетей Петри. Описывает последовательность состояний и условий переходов;
- Structured Text (Структурированный текст) - Текстовый язык. По структуре и синтаксису ближе всего к языку программирования Паскаль.
В большинстве комплексов программирования для трансляции МЭК- языков используется принцип статической компиляции [1,7]. В некоторых случаях это неприемлемо, т.к. статический компилятор генерирует машинный код только для конкретной архитектуры. Такой машинный код является архитектурно-зависимым и поэтому его использование на других платформах невозможно. Это значит, что для каждой используемой архитектуры необходимо разрабатывать отдельный компилятор, что является достаточно дорогим решением, если необходимо поддерживать несколько архитектур.
JIT-компиляция построена на использовании принципов динамической компиляции и так называемого промежуточного представления (байт-кода). JIT-система транслирует исходный код программы в байт-код, который затем используется для генерации машинного кода во время исполнения исходной программы.
Байт-код является архитектурно-независимым, что обеспечивает его переносимость на платформы с различными архитектурами, где есть соответствующий JIT-компилятор. Разработка JIT-компилятора для байт¬кода требует меньших затрат, по сравнению с реализацией статического компилятора для исходного программного кода, поскольку байт-код имеет низкоуровневую структуру.
Более того, использование байт-кода значительно упрощает процесс построения перенастраиваемого JIT-компилятора, т.е. такого компилятора, который позволяет генерировать код для нескольких целевых архитектур, а процесс генерации машинного кода из байт-кода гораздо быстрее, чем из исходного.
В настоящее время отсутствуют инструменты трансляции МЭК- языков, использующие принципы интерпретации и JIT-компиляции. Это связано с тем, что отсутствует научно-обоснованная модель процессов интерпретации и JIT-компиляции МЭК-языков.
Целью данной работы является создание такой модели и программная реализация на ее основе работающего прототипа транслятора МЭК-языков.
Для достижения целей были сформулированы следующие задачи:
1) Анализ стандарта МЭК 61131-3;
2) Анализ моделей компиляции МЭК-языков;
3) Проектирование модели транслятора МЭК-языков с учетом особенностей интерпретации и JIT-компиляции;
4) Программная реализация прототипа транслятора МЭК-языка Instruction List;
5) Функциональное тестирование прототипа транслятора МЭК-языков.
Основные положения и результаты работы докладывались и обсуждались на научно-исследовательском семинаре преподавателей, аспирантов и магистрантов кафедры «Информатика» Института космических и информационных технологий СФУ в г. Красноярске в 2017-2018 гг.
В ходе данной работы был произведен обзор существующих средств трансляции языков стандарта МЭК 61131-3. Проведен анализ предметной области, архитектуры программируемых логических контроллеров и программной архитектуры стандарта МЭК 61131-3.
Спроектирована модель транслятора МЭК-языков с учетом особенностей интерпретации и JIT-КОМПИЛЯЦИИ. На основе данной модели разработан прототип транслятора МЭК-языка Instruction List, с использованием компиляторной инфраструктуры LLVM.
Для функционального тестирования прототипа транслятора разработан эмулятор среды выполнения МЭК-языков, учитывающий разделы 1, 2, 3 и 5 международного стандарта МЭК 61131 и программной архитектуры МЭК- языков.
На основании полученных результатов можно сформулировать следующий вывод:
Использование модели ЛТ-компиляции и интерпретации при трансляции МЭК-языков с применением универсального промежуточного представления, позволяет разрабатывать перенастраиваемые JIT- компиляторы, которые поддерживают широкий диапазон архитектур ПЛК, а процесс их реализации требует гораздо меньше усилий, чем разработка статических компиляторов такого же типа.
1. Петров, И.В. Программируемые контроллеры. Стандартные языки и примеры прикладного проектирования / Под ред. проф. В.П. Дьяконова. - М.: СОЛОН-Пресс, 2004. - 256 с.
2. Минаев, И.Г. Программируемые логические контроллеры в автоматизированных системах управления / И.Г. Минаев, В.М. Шарапов,
B. В. Самойленко, Д.Г. Ушкур. - 2-е изд., перераб. и доп. - Ставрополь: АРГУС, 2010. - 128 с.
3. IEC 61131-3, 2 ed. Programmable Controllers - Programming Languages. - Введ. 2001 International Electrotechnical Commission, 2001. - 156 с.
4. Introduction into IEC 61131-3 Programming Languages [Электронный ресурс]. - Режим доступа: https://plcopen.org/pages/tc1_standards/iec_61131_3/.
5. John, Karl-Heinz. IEC 61131-3: Programming Industrial Automation Systems / Karl-Heinz John, M. Tiegelkamp. - Springer Science & Business Media, 2010. - 390 с.
6. Руководство пользователя по программированию ПЛК в CODESYS / Пер. ПК Пролог. - 3S Smart Software Solutions GmbH. - 453 с.
7. Баранов, И.А. Разработка прикладных программ для вычислительных комплексов на базе отечественных микропроцессоров с архитектурой SPARC с использованием языков стандарта IEC 61131-3 [Текст] / И.А. Баранов. - Всероссийская молодежная научно-техническая конференция ОАО «Концерн «Вега». - 2013.
8. Ахо, А.В. Компиляторы. Принципы, технологии и инструментарий: учебное пособие / А.В. Ахо, М.С. Лам, Р. Сети. - Вильямс, 2008. - 1184 с.
9. Свердлов, С.З. Конструирование компиляторов: Учебное пособие /
C. З. Свердлов. - LAP LAMBERT Academic Publishing, 2015. - 571 c.
10. Хантер, P. Проектирование и конструирование компиляторов / Пер. с англ. С.М. Круговой. - М: Финансы и статистика, 1984. - 232 с.
11. Parr, T. Language Implementation Patterns / T. Parr. - Pragmatic Bookshelf, 2010. - 374 с.
12. Croce, L. Just in Time Compilation [Электронный ресурс]. - Режим доступа: http://www.cs.columbia.edu/~aho/cs6998/Lectures/14-09-22_Croce_JIT. pdf/.
13. lark-parser Documentation Wiki [Электронный ресурс]. - Режим доступа: https: //github. com/lark-parser/lark/wiki/.
14. Shinan, E. Create a stand-alone LALR(1) parser in Python [Электронный ресурс]. - Режим доступа: http://blog.erezsh.com/create-a-stand- alone-lalr1-parser-in-python/.
15. Лопес, Б.К. LLVM. Инфраструктура для разработки компиляторов / Б.К. Лопес, Р. Аулер. - ДМК Пресс, 2015. - 342 с.
16. Боровский, A. LLVM: Генератор быстрого кода / Linux Format. - Выл. 2010. - № 2 (128). - с. 76-79.
17. LLVM Documentation [Электронный ресурс]. - Режим доступа: http://llvm.org/docs/.
18. llvmlite documentation [Электронный ресурс]. - Режим доступа: https://llvmlite.readthedocs.io/.
19. Bendersky, E. Building and using llvmlite [Электронный ресурс]. - Режим доступа: https://eli.thegreenplace.net/2015/building-and-using-llvmlite-a- basic-example/.
20. Python 3 Documentation. Process-based parallelism [Электронный
ресурс]. - Режим доступа: https://docs.python.org/3.4/library/multiprocessing.
html/.