Программируемые логические контроллеры (ПЛК) используются практически во всех сферах человеческой деятельности для автоматизации технологических процессов, в системах противоаварийной защиты и сигнализации, в станках с числовым программным управлением, для управления дорожным движением, в системах жизнеобеспечения зданий, для сбора и архивирования данных, в системах охраны, в медицинском оборудовании, в системах связи, при постановке физического эксперимента, для автоматизации испытаний продукции и т. д.
В настоящие время для разработки программ для ПЛК используются (в основном) языки стандарта МЭК 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- компиляторы, которые поддерживают широкий диапазон архитектур ПЛК, а процесс их реализации требует гораздо меньше усилий, чем разработка статических компиляторов такого же типа.