Найти тему

Программирование ПЛК в Codesys. Условные прагмы. Часть 2.

Оглавление

Надо до конца разобраться с этими условными прагмами. Если вы все пропустили, то ЗДЕСЬ обзорная статейка, а ТУТ первая часть. Я решил не идти по порядку и кое что буду скипать. Что-то весьма экзотичное, к примеру размер регистров CPU в define при предкомпиляции. Погнали далее.

Операторы для условной компиляции

Оператор hasattribute (pou: <pou name> , ‘attribute’)

Этот оператор приводит к тому, что выражению присваивается значение, TRUE если атрибут указан в первой строке части объявления функционального блока ; в противном случае возвращается.FALSE

Для начала мы сделаем функциональный блок. функционал придумайте сами у меня будет так.

И в программе исполнения указываю следующую конструкцию

{IF hasattribute (pou: fbTestPragma, ‘ENGCORE’)}
mcTestPragma(in=>ResultString);
{END_IF}

mcTestPragma — это инстанс fbtestPragma, ResultString — это строка куда должен быть записан результат выполнения фб, ну или нет.

-2

Пока у нас все чисто. Теперь в наш ФБ добавим атрибут ‘ENGCORE’ — первой строкой в объявлении функции.

-3

Запускаем и смотрим результат выполнения программы.

-4

Вот теперь все норм. Результат есть.

Оператор hasattribute (variable: <variable> , ‘attribute’)

Тут схема такая же как и с оператором выше. но теперь мы проверяем на атрибут переменную, которая находится ниже этого прагма выражения

-5

Загадка… Что же у нас выполнит программа.

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

Оператор hastype (variable:<variable> , <type-spec> )

Принцип тот же. Проверяет переменную на тип данных, который она имеет.

Возможные типы данных для проверки:

  • LREAL
  • REAL
  • LINT
  • DINT
  • INT
  • SINT
  • ULINT
  • UDINT
  • UINT
  • USINT
  • TIME
  • LWORD
  • DWORD
  • WORD
  • BYTE
  • BOOL
  • STRING
  • WSTRING
  • DATE_AND_TIME
  • DATE
  • TIME_OF_DAY

Оператор hasvalue (<define-ident>, ‘char-string’)

А это наша проверка значения идентификатора. которое мы можем задать в прагме {define}

-7

Вот и пример.

-8

А тут можно наблюдать, что конструкция работает по значение в идентификаторе ‘NewPragma’.

Точно такой же принцип есть у оператора

Точно такой же принцип есть у оператора hasconstantvalue

-9

Но он будет проверять по константе.

Логические операторы

Мы можем использовать выражения NOT. OR. AND

ПРИМЕР: {IF <smth1> OR NOT <smth2>}

Заключение

Вот мы и познакомились с условными и текстовыми прагмами. Если вас все еще беспокоит вопрос. а зачем это надо, то я вам отвечу. Для удобства.

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

-10

Во-вторых удобная работа с проектом… Ну конечно это все делает код громоздким, но все же…

-11

Пожалуйста, мой функциональный блок, который должен работать с HTTP запросами. В настройках компиляции проекта у меня стоит идентификатор TEST. Исходя из этого в загрузочное приложение будет скомпилирована только та часть кода, которая отвечает за перебор тестовых входных данных, а инициализации сокета происходить не будет.