- •1 Краткое представление CoDeSys
- •1.1 Что такое CoDeSys
- •1.2 Представление о работе в CoDeSys
- •1.3 Состав базовой пользовательской документации по CoDeSys
- •2 Что есть что в CoDeSys
- •2.1 Компоненты проекта
- •2.2 Языки программирования
- •Список инструкций (IL)
- •Модификаторы и операторы IL
- •Структурированный текст (ST)
- •Язык последовательных функциональных схем (SFC)
- •Язык функциональных блоковых диаграмм (FBD)
- •Непрерывные функциональные схемы (CFC)
- •Язык релейных диаграмм (LD)
- •2.3 Отладка и онлайн функции
- •3 Пишем простой пример
- •3.1 Блок управления светофором
- •3.2 Визуализация примера
- •4 Работа в системе программирования CoDeSys
- •4.1 Главное окно
- •4.2 Опции проекта
- •4.3 Управление проектом
- •4.4 Управление объектами проекта
- •4.5 Основные функции редактирования
- •4.6 Основные функции Онлайн
- •4.7 Работа с окнами
- •4.8 Помощь
- •5 Редакторы CoDeSys
- •5.1 Общие элементы редакторов
- •5.2 Редактор раздела объявлений
- •Работа в редакторе объявлений
- •Редактор раздела объявлений в режиме Онлайн
- •Директивы компилятора
- •5.3 Текстовые редакторы
- •Работа в текстовых редакторах
- •Редактор языка IL
- •Редактор языка ST
- •5.4 Графические редакторы
- •Работа в графических редакторах
- •Редактор FBD
- •Редактор LD
- •Редактор SFC
- •Редактор CFC
- •6 Ресурсы
- •6.1 Обзор ресурсов
- •Глобальные переменные
- •Конфигурационные переменные
- •Файл комментариев переменных
- •6.3 Конфигурация тревог (Alarm Configuration)
- •Обзор
- •Общая информация и терминология
- •Классы тревог
- •Группы тревог
- •Запись тревог
- •'Дополнения' (Extras): 'Настройки' (Settings)
- •6.4 Менеджер библиотек (Library Manager)
- •6.5 Бортжурнал (Log)
- •6.6 Конфигуратор ПЛК (PLC Configuration)
- •Обзор
- •Работа в редакторе конфигуратора ПЛК
- •Общие параметры конфигурации ПЛК
- •Диалог специфической настройки параметров
- •Конфигурация модулей ввода/вывода
- •Конфигурация канала
- •Конфигурирование модулей Profibus
- •Конфигурирование CANopen-модулей
- •Конфигурирование ведомого CANopen-устройства (CANopen Slave)
- •Конфигурирование модулей DeviceNet
- •Конфигурация ПЛК в режиме Онлайн
- •Сканирование аппаратуры/ Состояние/ Диагностика ПЛК
- •6.7 Конфигуратор задач (Task Configuration)
- •Обзор
- •Работа в конфигураторе задач
- •Системные события
- •Конфигуратор задач в режиме онлайн
- •6.8 Менеджер просмотра (Watch and Recipe Manager)
- •Обзор
- •Менеджер просмотра в режиме оффлайн
- •Менеджер просмотра в режиме Онлайн
- •6.9 Цифровая трассировка (Sampling Trace)
- •Обзор
- •Конфигурация трассировки
- •Управление процессом трассировки
- •Отображение данных
- •‘Дополнения’ ‘Запись значений трассировки’ ('Extras' 'Save trace values')
- •6.10 Рабочая область (Workspace)
- •6.11 Менеджер параметров (Parameter Manager)
- •Обзор и подключение
- •Редактор менеджера параметров. Обзор
- •Типы списков параметров и их атрибуты
- •Управление списками параметров
- •Редактирование списка параметров
- •Менеджер параметров в режиме онлайн
- •Экспорт/импорт списков параметров
- •6.12 Настройки целевой платформы (Target Settings)
- •6.13 ПЛК-Браузер (PLC-Browser)
- •Общие сведения
- •Набор команд ПЛК-Браузера
- •Макрорасширения команд ПЛК-Браузера
- •Вспомогательные команды ПЛК-Браузера
- •6.14 Инструменты (Tools)
- •Свойства доступных инструментов (Object Properties)
- •Настройка команд инструментов
- •Часто задаваемые вопросы по инструментам
- •7.1 Что такое ENI?
- •7.2 Условия работы с ENI базой данных в проекте
- •7.3 Работа с ENI базой данных в проекте CoDeSys
- •7.4 Категории объектов в базе данных проекта
- •8 DDE интерфейс
- •8.1 DDE интерфейс CoDeSys
- •8.2 DDE обмен посредством GatewayDDE Server
- •9 Менеджер лицензирования CoDeSys
- •9.1 Обзор
- •9.2 Создание лицензированных библиотек в CoDeSys
- •10.1 Арифметические операторы
- •10.2 Битовые операторы
- •10.3 Операторы сдвига
- •10.4 Операторы выборки
- •10.5 Операторы сравнения
- •10.6 Адресные операторы
- •Вспомогательные функции
- •10.8 Оператор вызова
- •10.9 Явное преобразование типов
- •10.10 Математические функции
- •Приложение В: Операнды в CoDeSys
- •Константы
- •Переменные
- •Адреса
- •Функции в роли операндов
- •Приложение С: Типы данных CoDeSys
- •Элементарные типы данных
- •Пользовательские типы данных
- •Приложение D: Библиотеки CoDeSys
- •Стандартная библиотека Standard.lib
- •Строковые функции
- •Переключатели
- •Детекторы импульсов
- •Счетчики
- •Таймеры
- •Библиотека UTIL.LIB
- •BCD преобразования
- •Бит/байт функции
- •Дополнительные математические функции
- •Регуляторы
- •Генераторы сигналов
- •Преобразования аналоговых сигналов
- •Аналоговые компараторы
- •Библиотека AnalyzationNew.lib
- •Системные библиотеки CoDeSys
- •Приложение E: Краткий справочник по операторам и компонентам библиотек
- •Операторы CoDeSys:
- •Компоненты Standard.lib:
- •Компоненты Util.lib:
- •Приложение F: Командная строка / командный файл
- •Командная строка
- •Командный файл (cmdfile)
- •Приложение G: Сименс импорт.
- •Импорт из символьных файлов SEQ
- •Импорт из файла проекта S5
- •Конвертирование языка S5 в МЭК C 61131-3
- •Приложение H: Опции целевых систем
- •Системные опции целевых платформ (Target Platform)
- •Intel 386 совместимые
- •Motorola 68K
- •Infineon C16x
- •ARM и Power PC
- •MIPS
- •'Hitachi SH'
- •8051 совместимые
- •Infineon 'TriCore’
- •Опции распределения памяти (Memory Layout).
- •Опции общей категории (General)
- •Опции категории Сетевая функциональность
- •Опции категории Визуализация
- •Приложение I: Использование клавиатуры
- •Приложение J: Рекомендации по наименованию
- •Наименование идентификаторов
- •Идентификаторы переменных
- •Идентификаторы пользовательских типов (DUT)
- •Идентификаторы визуализаций
- •Приложение K: Ошибки и предупреждения компилятора
- •Предупреждения
- •Ошибки
Редакторы CoDeSys
Вы должны поменять значение этих полей на те, которые вам нужны. Имя и тип переменной – это все, что необходимо для объявления переменной.
Редактор раздела объявлений в режиме Онлайн
В режиме Онлайн редактор раздела объявлений превращается в окно монитора. В каждой строке находится переменная и ее значение после знака “=”. Если значение переменной не определено, то после знака “=” находятся 3 знака вопроса. Для функциональных блоков изображаются значения только его открытых экземпляров (команда "Проект" "Просмотр экземпляра" - "Project" "View instance").
Перед каждой составной переменной находится знак плюс. Если нажать <Enter> или дважды щелкнуть мышкой на такой переменной, то она раскроется, и вы увидите значения полей этой переменной. Переменная закрывается аналогичным образом.
Нажмите <Enter> или дважды щелкните мышкой на простой переменной. Появится диалоговое окно, в котором вы сможете назначить новое значение для переменной. Если вы изменяете значение логической переменной, то диалоговое окно не появляется, а значение переменной изменяется на противоположное.
Новое значение переменной обозначается красным цветом. Записать измененные значения переменных в контроллер можно, выбрав команду меню “Онлайн” “Записать значения” (“Online” ”Write values”). После этого переменная вновь будет обозначаться черным.
После использования команды “Онлайн” “Фиксировать значения” (“Online” “Force values”) все выбранные переменные получат установленные значения и будут сохранять их вплоть до вызова команды “Освободить фиксацию” (Release force). Фиксированные значения отображаются красным.
Директивы компилятора
Директивы используются для установки свойств переменных, касающихся компиляции. Их можно использовать в текстах программ и в разделе объявлений переменных.
Директива записывается в фигурных скобках, причем регистр букв здесь не важен:{<Директива >}
Если компилятор не понимает эту директиву, то она интерпретируется как обычный комментарий.
Однако появляется предупреждение: „Ignore compiler directive ‚<Instruction text>’!“
В зависимости от типа и параметров директивы она действует на строке, на которой она написана, или на всех последующих строках до директивы, ее отменяющей. Если отменяющей директивы нет, то она действует во всем разделе.
Директива может следовать сразу за именем переменной, причем открывающие и закрывающие скобки должны находиться на одной строке.
В настоящее время CoDeSys принимает следующие директивы:
−{flag} инициализация, мониторинг и управление символьным файлом
−{bitaccess...} битовый доступ
−{link} принудительная линковка POU или DUT
CoDeSys V2.3 |
5-11 |
Редакторы CoDeSys
−{parameter..}, {template...}, {instance...} создание вхождений для Менеджера параметров
−{library ...} управление отображением объявлений в библиотеках
−{nonpersistent} исключение данных из PERSISTENT
Директивы инициализации, мониторинга и управления символьным файлом
Синтаксис директивы:
{flag [<flags>] [off|on]}
<flag> - комбинация следующих флагов:
noinit |
Переменная не инициализируется |
nowatch |
Не производится мониторинг переменной |
noread |
Переменная экспортируется в символьный файл без разрешения чтения |
nowrite |
Переменная экспортируется в символьный файл без разрешения записи |
noread, nowrite |
Переменная не экспортируется в символьный файл |
С помощью модификатора “on”директива включается и действует на все последующие объявления до ее отключения другой директивой или с помощью ”off” {flag off}. Без этих модификаторов директива действует только на текущей строке.
Примеры:
Инициализация и мониторинг:
Переменная a не инициализируется и не просматривается. Переменная b не инициализируется:
VAR
a : INT {flag noinit, nowatch}; b : INT {flag noinit };
END_VAR
VAR
{flag noinit, nowatch on} a : INT;
{flag noinit on} b : INT;
{flag off} END_VAR
Ни одна из переменных не инициализируется:
{flag noinit on} VAR
a : INT; b : INT;
END_VAR {flag off} VAR
{flag noinit on} a : INT;
b : INT; {flag off} END_VAR
Размещение переменных в символьном файле:
Флаги “noread” и ”nowrite” используются для ограничения прав доступа к переменным. По умолчанию переменная обладает теми свойствами доступа, которые определены для POU, в котором она
CoDeSys V2.3 |
5-12 |
Редакторы CoDeSys
объявлена. Если переменная не доступна ни для чтения, ни для записи, то в символьный файл она не экспортируется.
Пример:
Если для POU установлено разрешение записи и чтения переменных, то переменная a экспортируется с разрешением записи, а переменная b не экспортируется вообще:
VAR
a : INT {flag noread};
b : INT {flag noread, nowrite}; END_VAR
VAR
{flag noread on} a : INT;
{flag noread, nowrite on}
b : INT; {flag off} END_VAR
Ни переменная a, ни переменная b не экспортируются в символьный файл:
{ flag noread, nowrite on } VAR
a : INT; b : INT;
END_VAR
{flag off} VAR
{ flag noread, nowrite on} a : INT;
b : INT; {flag off} END_VAR
Действие одной директивы накладывается на действие другой:
Пример: (Для всех POU установлено разрешение записи и чтения переменных)
a : afb;
...
FUNCTION_BLOCK afB VAR
b : bfb {flag nowrite}; c : INT;
END_VAR
...
FUNCTION_BLOCK bfB VAR
d : INT {flag noread}; e : INT {flag nowrite};
END_VAR
Переменные a, c экспортируются с разрешением чтения и записи.
Переменные b, e экспортируются без разрешения записи.
Переменная d экспортируется без разрешения чтения.
Директива битового доступа {bitaccess...}
Используется для корректного отображения переменной, осуществляющей битовый доступ посредством глобальной константы. Она применяется в ассистенте ввода, в функции интеллектуального ввода и разделах объявлений. Директива влияет на мониторинг переменной в
CoDeSys V2.3 |
5-13 |
Редакторы CoDeSys
ввода и разделах объявлений. Директива влияет на мониторинг переменной в окне объявления соответствующего POU. Используемая глобальная константа показывается под соответствующей структурной переменной.
Данную директиву нужно вводить в отдельной строке объявления структуры. Точка с запятой в конце этой строки не нужна.
Синтаксис:
{bitaccess <Global Constant> <Bitnumber> '<comment>'}
<Global |
Идентификатор глобальной константы, которая должна быть определена в спи- |
Constant>: |
ске глобальных переменных. |
<Bitnumber>: |
Значение глобальной константы. |
<comment> |
Комментарий |
Обратите внимание: опция 'Замена констант' - 'Replace constants' (категория ‘Генератор кода’ (Build)) должна быть активна!
Пример применения данной директивы см. «Приложение В: Операнды в CoDeSys» раздел «Переменные», «Доступ к битам в переменных».
Директива управления линковкой компонентов
По умолчанию программный компонент POU (программа, функция, функциональный блок) или компонент определения типа данных (DUT) которые не использованы в проекте, исключаются при линковке кода проекта. Однако, может потребоваться чтобы некая функция (возможно из библиотеки) должна загружаться в контроллер даже если она не вызывается в проекте явно (например, функция контроля, вызываемая системой исполнения). В этом случае в любом месте раздела объявлений POU или в DUT нужно поместить директиву {link} которая вынудит линковщик включить компонент в код проекта.
Директивы управления отображением объявлений в библиотеках
В процессе создания библиотеки в CoDeSys, вы можете управлять тем, какие части раздела объявлений должны быть видны или не видны в Менеджере Библиотек при включении данной библиотеки в проект. Данные директивы не влияют на отображение при редактировании библиотеки. Их цель – скрыть от пользователя определенные детали реализации. Директивы {library private} и {library public} действуют на все строки ниже и взаимно отменяют одна другую.
Синтаксис директив:
{library public} :отображать нижеследующие элементы в Менеджере Библиотек.
{library private} :не отображать нижеследующие элементы.
Пример: ниже дан фрагмент раздела объявлений библиотеки. Комментарий "(* видно всем*)" будет виден в Менеджере Библиотек, а комментарий "(* это не для всех*)" не будет отображаться. Переменные local и in3 также не будут отображаться:
{library public}(*видно всем *) {library private} (*это не для всех*)
{library public}
FUNCTION afun : BOOL VAR_INPUT
in: BOOL; END_VAR
{library private}
CoDeSys V2.3 |
5-14 |
Редакторы CoDeSys
VAR
local: BOOL; END_VAR {library public}
VAR_INPUT in2: BOOL;
{library private} in3: BOOL; {library public}
END_VAR
Директивы создания вхождений для Менеджера параметров
Включение таких директив в объявление переменных позволяет добавлять элементы списка управляемого Менеджером параметров (Parameter Manager). Наличие Менеджера параметров в среде программирования CoDeSys определяется целевой платформой. Поддержка Менеджера параметров включается специальным флагом на страничке “Сетевая функциональность” (Networkfunctionality) в настройках целевой платформы.
Синтаксис:
∙Директива заключена в фигурные скобки, регистр ввода не учитывается: { <Инструкция>}. Если она включена в «нормальное» объявление переменной, то должна стоять до заверщающей точки с запятой.
∙Директивы, использующие интерфейс VAR_CONFIG, должны вводиться отдельной строкой, без точки с запятой.
∙Описание ключей записывается через пробел, внутри фигурных скобок.
∙<name>: имя списка параметров. Если указанный список отсутствует, он будет создан.
∙<key>: ключ или имя атрибута, т.е. название столбца в списке параметров ("Name", "Value", "Accesslevel" и т.д.). Ключи зависят от типа списка. Определение ключей записывается через пробелы, все вместе заключенные в прямоугольные скобки. Аналогичный синтаксис используется для включения элементов массивов, структур или функциональных блоков (см. 3, ниже).
∙<value>: значение атрибута, заданное <key>. Если значение <value> имеет пробелы, то его необходимо заключить в двойные кавычки. Например: accessright="read only".
Обратите внимание: директивы компиляции «срабатывают» только при предварительном анализе текста, который выполняется после изменения фокуса ввода, то есть при выходе из окна редактора. Ошибки ввода сообщаются только при полной компиляции.
Директивы определяют следующие вхождения:
1.Вхождения в списки типа 'Variables'
(a)из раздела объявлений программ и списков глобальных переменных:
Вхождение в список типа 'Variables' для переменной из объявлений PROGRAM или VAR_GLOBAL задается следующим образом:
{parameter list=<name> [ <key>=<value> <key>=<value> ...прочие ключи ] }
Пример: Переменная bvar объявлена в программе. Она должна входить в список параметров parlist1 (типа 'Variables') с именем bvar1, значением 102, индексом 16#1200 и подиндексом 16#2l.
VAR
CoDeSys V2.3 |
5-15 |
Редакторы CoDeSys
bvar:INT{parameter list=parlist1 [name=bvar1 value=102 index=16#1200
subindex=16#1 ] }; END_VAR
(б) из объявления интерфейса VAR_CONFIG:
Вхождение в список типа 'Variables' для переменной из окна VAR_CONFIG (вне зависимости от определения конфигурационной переменной) задается следующим образом:
{parameter list=<name> path=<path> [ <key>=<value> <key>=<value> ... прочие ключи ] }
<path> путь к переменной, например, "PLC_PRG.act1.var_x"
Пример: Для переменной var_x an создается вхождение в список "varlist1", символьное имя –
"xvar".
VAR_CONFIG
{parameter list=varlist1 path=PLC_PRG.act1.var_x [ name=xvar ] } END_VAR
2. Вхождения в списки типа 'Template' через функциональные блоки и структуры
Директива в объявлениях функциональных блоков или структур позволяет создавать вхождения в списки типа: 'Template':
{template list=<name> [ <key>=<value> <key>=<value> ... прочие ключи ] }
Пример: переменная strvar, являющаяся элементом структуры "stru1", должна входить в список
"templ1" типа 'Template'; символьное имя "struvar1", уровень доступа "low":
TYPE stru : STRUCT
ivar:INT;
strvar:STRING{template list=vorl1 [member=struvar1 accesslevel=low]
}; END_STRUCT END_TYPE
3. Вхождения в списки типа ' Instance' (для массивов переменных структуры или функционального блока)
(a) из раздела объявлений программ и списков глобальных переменных:
При объявлении массивов, функциональных блоков или элементов структуры можно задать вхождение в список типа 'Instance':
{instance list=<name> template=<template> baseindex=<index> |
basesubindex=<subindex> |
[ |
|
<key>=<значение первого элемента> <key>=< значение первого элемента> |
...прочие |
ключи |
|
первого элемента ] | [ <key>=<значение второго элемента> <key>=< значение второго элемента > .. прочие ключи второго элемента ] | [ключи последующих элементов]}<key>=<value> <key>=<value>
...следующие ключи ] }
Для массивов ключ "template" будет определен автоматически с помощью неявного шаблона "ARRAY". Для структур и функциональных блоков соответствующий шаблон должен быть создан в Менеджере параметров и должен быть частью заданного здесь определения.
Для каждого отдельного элемента структуры, массива или функционального блока может быть предопределено собственное индивидуальное вхождение в список параметров. Например: вместо единого определения "name" можно указать собственное определение [name=<имя_элемента>] для каждого элемента.
Определение ключей для каждого отдельного элемента (заключается в квадратные скобки) выполняется в строке, разделенной пробелами. Элементы такого пакета определений автоматически получат индексы в возрастающем порядке. Если нет достаточного числа определений ключей для всех
CoDeSys V2.3 |
5-16 |
Редакторы CoDeSys
элементов массива, структуры или функционального блока, то оставшиеся элементы получат значения от последнего описанного индивидуального элемента (исключение для ключа "name" описано выше)! (см. пример 1b).
Автоматизация ключа "name" при включении массивов в список параметров:
−Если вы не определили имя элемента массива в директиве, то этот и все последующие элементы автоматически получат имена:
<Имя POU>_<Имя переменной массива>_<соответствующий числовой индекс массива >.
Пример: Переменная ARRVAR [1..8] типа массив INT в PLC_PRG включается в список директивой pragma. Если ключ "name" не определен в директиве, то элементы массива в списке пара-
метров автоматически получают имена от "PLC_PRG_arrvar_1" до "PLC_PRG_arrvar_8".
−Если вы определяете директивой некоторое имя "<имя>_<первый числовой индекс массива>" для первого элемента, то последующие элементы массива будут автоматически получать имена “<имя>_<соответствующий числовой индекс>”.
Пример: Переменная ARRVAR [1..8] типа массив INT включается в список посредством директивы pragma. Директива указывает [name=xyz_1]“ только для первого элемента массива. Последующие элементы автоматически получают имена от "xyz_2" до "xyz_8".
Внимание: Не нужно задавать значения для ключа "Member"; данная колонка заполняется автоматически, при помощи значений индексов массива.
Примеры:
Пример 1а:
Массив "arr_1" включает список "arrinst" типа 'Instance'; все элементы массива в этом списке получают символическое имя "xname_<index number>" (может быть изменено в Менеджере параметров), подиндекс увеличивается на единицу для каждого элемента, начиная с 0. Accesslevel=low будет применен ко всем элементам.
arr_1: ARRAY [1..8] OF INT{instance list=arrinst template=ARRAY baseindex=16#0
basesubindex=16#0 [name=xname_1 accesslevel=low ] };
Пример 1б:
Для массива arr_1 только имена для элементов с 1 по 4 определяются директивой, элементы с 5 по 8 получают имена автоматически на основе определения для элемента 4, то есть "xname_5" и т.д. до
"xname_8".
Заметьте, что задания последующих определений ключей для отдельных элементов должны быть включены в эти же квадратные скобки, как показано здесь для прав доступа первого и четвертого элементов:
arr_1: ARRAY [1..8] OF INT{instance list=arrinst template=ARRAY baseindex=16#0 basesubindex=16#0 [name=aname accesslevel=high] [name=bname] [name=cname] [name=xname accesslevel=medium]};
Пример 1:Вхождения для массива в списке instance
CoDeSys V2.3 |
5-17 |
Редакторы CoDeSys
Пример 2:
Элементы структуры типа "stru1" (состоящей из переменных a,b,c) входят в список типа 'Instance',базирующийся на шаблоне "strulist_temp"; список включает вхождения a,b,c, символические имена не присваиваются, уровень доступа "high" и значение каждого индекса определяется по шаблону, через 2. Убедитесь, что определенный в директиве шаблон доступен Менеджеру параметров:
struvar:stru1{instance list=strulist template=strulist_templ baseindex=16#2 basesubindex=16#0 [accesslevel=high] };
Пример 2: Вхождения для структуры в Template
(б) из объявления интерфейса VAR_CONFIG:
Вы можете определить вхождения определяемых переменных в список Instance' непосредственно в окне VAR_CONFIG (вне зависимости от других определений конфигурационных переменных).
Убедитесь, что определенный в директиве шаблон доступен Менеджеру параметров:
{instance list=<name> path=<path> template=<template> baseindex=<index>
basesubindex=<subindex>[ <key>=<value> <key>=<value> ...further keys ] }
<path> путь к переменной, например "PLC_PRG. fb1", где fb1 функциональный блок
Пример: Следующая директива в окне VAR_CONFIG будет создавать вхождения для всех переменных для функционального блока "fb1" в списке экземпляров "varinst1" по шаблону "fb1_templ". Для каждого вхождения индекс в соответствии с шаблоном увеличивается на 2 (baseindex), подиндекс не изменяется (basesubindex). Каждое вхождение получает символьное имя "fb1var", которое вы можете изменить в Менеджере параметров:
VAR_CONFIG
{instance list=varinst1 path=PLC_PRG.fb1 template=fb1_templ baseindex=16#2 basesubindex=16#0 [ name=fb1var ]}
END_VAR
CoDeSys V2.3 |
5-18 |
Редакторы CoDeSys
Директива исключения данных из PERSISTENT
По умолчанию даже если только одна локальная переменная функционального блока или структуры объявлена как PERSISTENT, то все данные экземпляры автоматически будут сохраняться системой исполнения в энергонезависимой области persist.dat. С целью ее экономии можно применить директиву: {nonpersistent} в объявлении функционального блока или структуры. В этом случае, объявление PERSISTENT будет влиять только на указанные в нем переменные.
Пример:
Для экземпляров данного функционального блока только значения переменных local и fblevel3 будут записываться в энергонезависимую область.
FUNCTION_BLOCK FB_Level_2 {nonpersistent}
VAR_INPUT bvar_in : BOOL;
END_VAR VAR_OUTPUT
bvar_out : BOOL; END_VAR
VAR
ivar2 : INT; END_VAR
VAR PERSISTENT local : INT := 33;
fblevel3 : FB_Level_3; END_VAR
CoDeSys V2.3 |
5-19 |
