Найти в Дзене

Программирование ПЛК в Codesys. Pragma.

Оглавление

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

Хочется отметить, что это обзорная статья, чтобы просто ознакомить читателей с возможностями. Почта для обратной связи - info@engcore.ru, также свои вопросы можете оставлять в комментариях.

Pragma в Codesys

Pragma — это специальный оператор в исходном коде приложения, который влияет на свойства переменных при предварительной компиляции или компиляции (генерации кода).

Существуют разные Pragma-выражения для разных целей (например: инициализация переменной, мониторинг переменной, добавление переменной в конфигурацию символа, принудительное отображение сообщений в процессе компиляции и поведение переменной при определенных условиях).

Синтаксис и применение

Оператор прагмы указывается в фигурных скобках. Атрибуты и тексты, используемые в операторе, заключаются в одинарные прямые кавычки. Открывающая скобка может следовать сразу после имени переменной. Открывающая и закрывающая фигурные скобки должны располагаться на одной линии.
ПРИМЕРЫ:

Pragma-выражение, которое позволяет использовать динамическое выделение памяти
Pragma-выражение, которое позволяет использовать динамическое выделение памяти
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}

Результат выполнения
Результат выполнения

Как можно заметить без каких-либо изменений, а дальше у нас начинается магия.

Сперва заходим в свойства приложения.

-4

Далее нам потребуется раздел Компиляция

-5

И теперь в директивах компилятора мы пропишем нужный нам режим. Например TEST. Загружаем — запускаем.

-6

Прагмы сообщений

Ну тут вообще все легко. Благодаря данным выражениям мы получим необходимые сообщения.

Позиция вставки: отдельная или уже существующая строка в текстовом редакторе POU.

  • {text <‘textstring’>}Выводит в окне сообщений ‘textstring’
  • {info <‘textstring’>}Выводит в окне сообщений Info и наше сообщение
  • {warning  <‘textstring’>}Выводит в окне сообщений предупреждение
  • {error <‘textstring’>}Ошибка
-7

ИТОГ

На этом обзорная часть закончена. Жду обратную свзяь.