Надо до конца разобраться с этими условными прагмами. Если вы все пропустили, то ЗДЕСЬ обзорная статейка, а ТУТ первая часть. Я решил не идти по порядку и кое что буду скипать. Что-то весьма экзотичное, к примеру размер регистров CPU в define при предкомпиляции. Погнали далее.
Операторы для условной компиляции
Оператор hasattribute (pou: <pou name> , ‘attribute’)
Этот оператор приводит к тому, что выражению присваивается значение, TRUE если атрибут указан в первой строке части объявления функционального блока ; в противном случае возвращается.FALSE
Для начала мы сделаем функциональный блок. функционал придумайте сами у меня будет так.
И в программе исполнения указываю следующую конструкцию
{IF hasattribute (pou: fbTestPragma, ‘ENGCORE’)}
mcTestPragma(in=>ResultString);
{END_IF}
mcTestPragma — это инстанс fbtestPragma, ResultString — это строка куда должен быть записан результат выполнения фб, ну или нет.
Пока у нас все чисто. Теперь в наш ФБ добавим атрибут ‘ENGCORE’ — первой строкой в объявлении функции.
Запускаем и смотрим результат выполнения программы.
Вот теперь все норм. Результат есть.
Оператор hasattribute (variable: <variable> , ‘attribute’)
Тут схема такая же как и с оператором выше. но теперь мы проверяем на атрибут переменную, которая находится ниже этого прагма выражения
Загадка… Что же у нас выполнит программа.
Оператор 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}
Вот и пример.
А тут можно наблюдать, что конструкция работает по значение в идентификаторе ‘NewPragma’.
Точно такой же принцип есть у оператора
Точно такой же принцип есть у оператора hasconstantvalue
Но он будет проверять по константе.
Логические операторы
Мы можем использовать выражения NOT. OR. AND
ПРИМЕР: {IF <smth1> OR NOT <smth2>}
Заключение
Вот мы и познакомились с условными и текстовыми прагмами. Если вас все еще беспокоит вопрос. а зачем это надо, то я вам отвечу. Для удобства.
Во-первых, приятная навигация по тем местам, в которых надо произвести работу
Во-вторых удобная работа с проектом… Ну конечно это все делает код громоздким, но все же…
Пожалуйста, мой функциональный блок, который должен работать с HTTP запросами. В настройках компиляции проекта у меня стоит идентификатор TEST. Исходя из этого в загрузочное приложение будет скомпилирована только та часть кода, которая отвечает за перебор тестовых входных данных, а инициализации сокета происходить не будет.