Здравствуйте, коллеги. Я считаю, что для хорошей работы требуется хорошо знать свой инструмент. И если создания функций, функциональных блоков и блоков данных плюс минус одинаковое, то в некоторых моментах, в различных средах программирования ПЛК разный инструментарий. Так что сегодня у нас Codesys и очень нужный инструмент Pragma.
Хочется отметить, что это обзорная статья, чтобы просто ознакомить читателей с возможностями. Почта для обратной связи - info@engcore.ru, также свои вопросы можете оставлять в комментариях.
Pragma в Codesys
Pragma — это специальный оператор в исходном коде приложения, который влияет на свойства переменных при предварительной компиляции или компиляции (генерации кода).
Существуют разные Pragma-выражения для разных целей (например: инициализация переменной, мониторинг переменной, добавление переменной в конфигурацию символа, принудительное отображение сообщений в процессе компиляции и поведение переменной при определенных условиях).
Синтаксис и применение
Оператор прагмы указывается в фигурных скобках. Атрибуты и тексты, используемые в операторе, заключаются в одинарные прямые кавычки. Открывающая скобка может следовать сразу после имени переменной. Открывающая и закрывающая фигурные скобки должны располагаться на одной линии.
ПРИМЕРЫ:
В зависимости от типа и содержания прагмы это может влиять на следующее:
- на последующие операторы
- только на следующий оператор
- на все последующие операторы, пока они не будут отменены соответствующей прагмой
- на все последующие операторы, пока та же прагма не будет выполнена с другими параметрами или не будет достигнут конец кода.
Прагмы Codesys делятся на следующие категории:
- Прагма атрибутов (влияют на компиляцию и предварительную компиляцию)
- Прагмы сообщений (выводить определенные пользователем сообщения при компиляции)
- Условные прагмы (влияние на генерацию кода)
- Пользовательские прагмы
Прагма атрибутов
Данные выражения влияют на компиляцию и пре-компиляцию.
Codesys поддерживает ряд предопределенных прагм атрибутов. Кроме того, вы можете использовать определяемые пользователем прагмы, которые вы можете запрашивать с помощью условных прагм перед компиляцией проекта.
Атрибуты определяются в части объявления. Исключение: для объектов Action и Transition, которые не имеют собственной части объявления, вы можете определить атрибуты в начале части реализации.
Наверно самый известный из этой серии выражений — ‘qualified_only’
Эффект этой прагмы состоит в том, что к переменным из списка глобальных переменных обращаются только путем указания имени глобальной переменной, например gvl.g_var. Это также относится к переменным типа Enumeration и может помочь избежать ошибки доступа в случае если локальная переменная имеет такое же имя.
Указывается над VAR_GLOBAL в GVL
{attribute 'qualified_only'}
VAR_GLOBAL
iVar:INT;
END_VAR
Условные прагмы
Назначение условных прагм - повлиять на генерацию кода в процессе пре-компиляции или в процессе компиляции. Язык реализации ST поддерживает эти прагмы.
В эту группу мы относим {define}, {undefine}, {IF/ELSE/ELSIF/END_IF} и различные операторы.
И вот тут надо помнить:
Прагмы в CODESYS не являются однозначной реализацией директив препроцессора C. Вы должны позиционировать прагму как обычное утверждение. Его нельзя использовать в выражении.
Использование условных прагм
И вот тут небольшой практический пример не повредит. Очень часто бывает, что нам приходится менять различные значения для тестирования системы, а потом для наладки, что-то другое. Возможно у нас есть типовая установка с модификаторами. Тут нам и помогает минимальная генерация.
Допустим в зависимости от нашей конфигурации нам надо менять значения при инициализации.
VAR
iPragmaI:STRING;
END_VAR ------------------------------------
{IF defined(TEST)} //если определен тестовый режим
iPragmaI:="TEST MODE";
{ELSIF defined(PROD)} //если определен режим производственный iPragmaI:="PROD MODE";
{END_IF}
Как можно заметить без каких-либо изменений, а дальше у нас начинается магия.
Сперва заходим в свойства приложения.
Далее нам потребуется раздел Компиляция
И теперь в директивах компилятора мы пропишем нужный нам режим. Например TEST. Загружаем — запускаем.
Прагмы сообщений
Ну тут вообще все легко. Благодаря данным выражениям мы получим необходимые сообщения.
Позиция вставки: отдельная или уже существующая строка в текстовом редакторе POU.
- {text <‘textstring’>}Выводит в окне сообщений ‘textstring’
- {info <‘textstring’>}Выводит в окне сообщений Info и наше сообщение
- {warning <‘textstring’>}Выводит в окне сообщений предупреждение
- {error <‘textstring’>}Ошибка
ИТОГ
На этом обзорная часть закончена. Жду обратную свзяь.