ГОСТ Р МЭК 61131-3-2016. Национальный стандарт Российской Федерации. Контроллеры программируемые. Часть 3. Языки программирования
6.8 Элементы конфигурации
6.8.1 Общие положения
Конфигурация состоит из ресурсов, задач (которые определены внутри ресурсов), глобальных переменных, путей доступа и специфичных инициализаций экземпляра. Каждый из этих элементов подробно определен в подразделе 6.8.
Графический пример простой конфигурации приведен на рисунке 27. Скелетные описания для соответствующих функциональных блоков и программ приведены на рисунке 27 b). Объявление примера на рисунке 27 приведено на рисунке 28.
a) Графическое представление
FUNCTION_BLOCK A VAR_OUTPUT y1: UINT; y2: BYTE; END_VAR END_FUNCTION_BLOCK
FUNCTION_BLOCK C VAR_OUTPUT c1: BOOL; END_VAR VAR C2 AT %Q*: BYTE; C3: INT; END_VAR END_FUNCTION_BLOCK | FUNCTION_BLOCK B VAR_INPUT b1: UINT; b2: BYTE; END_VAR END_FUNCTION_BLOCK
FUNCTION_BLOCK D VAR_INPUT d1: BOOL; END_VAR VAR_OUTPUT y2: INT; END_VAR END_FUNCTION_BLOCK |
PROGRAM F VAR_INPUT x1: BOOL; x2: UINT; END_VAR VAR_OUTPUT y1: BYTE; END_VAR VAR COUNT: INT; TIME1: TON; END_VAR END_PROGRAM PROGRAM G VAR_OUTPUT out1: UINT; END_VAR VAR_EXTERNAL z1: BYTE; END_VAR VAR FB1: A; FB2: B; END_VAR FB1(...); out1:= FB1.y1; z1:= FB1.y2; FB2(b1:= FB1.y1, b2:= FB1.y2); END_PROGRAM |
PROGRAM H VAR_OUTPUT HOUT1: INT; END_VAR VAR FB1: C; FB2: D; END_VAR FB1(...); FB2(...); HOUT1:= FB2.y2; END_PROGRAM |
b) Объявления скелетного функционального блока и программы
Рисунок 27 - Конфигурация (пример)
В таблице 62 перечислены свойства языка для объявления конфигураций, ресурсов, глобальных переменных, путей доступа и специфических инициализаций экземпляра.
- Задачи
Рисунок 27 представляет примеры свойств TASK, соответствующих конфигурации экземпляра, приведенной на рисунке 27 a) и поддерживающих описания, приведенные на рисунке 27 b).
- Ресурсы
Классификатор ON в конструкции RESOURCE...ON...END_RESOURCE используется, чтобы указать тип "функции обработки информации" и ее функций "интерфейса человек-машина" и "интерфейса датчика и привода", на основе которых реализуется ресурс и его связанные программы и задачи. Разработчик обеспечивает библиотеку ресурсов таких элементов, как показанные на рисунке 3. С каждым элементом этой библиотеки связан идентификатор (имя типа ресурса) для использования в объявлении ресурса.
Примечание 1 - Конструкция RESOURCE...ON...END_RESOURCE в конфигурации с одним ресурсом не требуется.
- Глобальные переменные
Область действия секции VAR_GLOBAL ограничивается конфигурацией или ресурсом, в котором она описана, за исключением того, что путь доступа может быть объявлен для глобальной переменной в ресурсе с использованием свойства 10d из таблицы 62.
- Пути доступа
Конструкция VAR_ACCESS...END_VAR предоставляет средства задания имен переменных, которые можно использовать для дистанционного доступа некоторыми сервисами связи, определяемыми в МЭК 61131-5. Путь доступа связывает каждое такое имя переменной с глобальной переменной, прямо представленной переменной или любой входной, выходной или внутренней переменной программы или функционального блока.
Связь должна сопровождаться определением имени переменной с полной иерархической конкатенацией имен экземпляра, начиная с имени ресурса (если имеется), за которым следует имя экземпляра программы (если имеется), за которым следует имя (имена) экземпляра (экземпляров) функционального блока (если имеется). Имя переменной связывается в конце цепочки. Все имена в конкатенации должны быть разделены точками. Если такая переменная - это многоэлементная переменная (структура или массив), то путь доступа также может быть задан для элемента переменной.
Не должно быть возможно определить пути доступа к переменным, объявленным в секциях VAR_TEMP, VAR_EXTERNAL или VAR_IN_OUT.
Направление пути доступа задается как READ_WRITE или READ_ONLY, указывая, что сервисы связи могут как считывать, так и изменять значение переменной в первом случае, или только считывать, но не изменять значение во втором случае. Если направление не задано, то направление по умолчанию - READ_ONLY.
Доступ к переменным, объявленным как CONSTANT, и к входам функционального блока, которые внешне соединены с другими переменными, - READ_ONLY.
Примечание 2 - Эффект использования доступа READ_WVRITE для выходных переменных функционального блока определяется разработчиком.
- Конфигурации
Конструкция VAR_CONFIG...END_VAR предоставляет средства для присваивания конкретных расположений, зависящих от экземпляра, символически представленным переменным, которые назначены для соответствующей цели, с использованием отметки звездочки "*", или чтобы присваивания начальных значений, специфических для экземпляра, символически представленным переменным, или и для того и для другого.
Присваивание должно сопровождаться определением имени объекта для расположения или инициализации с полной иерархической конкатенацией имен экземпляров, начиная с имени ресурса (если имеется), за которым следует имя экземпляра программы (если имеется), за которым следует имя (имена) экземпляра (экземпляров) функционального блока (если имеется). Имя переменной для расположения или инициализации присоединяется в конце цепочки, за которой следует имя компонента структуры (если переменная структурирована). Все имена в конкатенации должны быть разделены точками. Присваивание расположения или присваивание начального значения следуют синтаксису и семантике.
Специфические для экземпляра начальные значения, предоставляемые конструкцией VAR_CONFIG...END_VAR, всегда имеют приоритет над специфическими для типа начальными значениями. Нельзя определять специфические для экземпляра инициализации для переменных, которые определены в объявлениях VAR_TEMP, VAR_EXTERNAL, VAR CONSTANT или VAR_IN_OUT.
Таблица 62
Конфигурация и объявление ресурса
Номер | Описание |
1 | CONFIGURATION...END_CONFIGURATION |
2 | VAR_GLOBAL...END_VAR внутри CONFIGURATION |
3 | RESOURCE...ON...END_RESOURCE |
4 | VAR_GLOBAL...END_VAR внутри RESOURCE |
5a | Периодическая TASK |
5b | Непериодическая TASK |
6a | WITH для PROGRAM со связанными задачами TASK |
6b | WITH для FUNCTION_BLOCK со связанными задачами TASK |
6c | PROGRAM без связанных задач TASK |
7 | Прямо представленные переменные в VAR_GLOBAL |
8a | Соединение прямо представленных переменных со входами PROGRAM |
8b | Соединение переменных GLOBAL со входами PROGRAM |
9a | Соединение выходов PROGRAM с прямо представленными переменными |
9b | Соединение выходов PROGRAM с переменными GLOBAL |
10a | VAR_ACCESS...END_VAR |
10b | Пути доступа к прямо представленным переменным |
10c | Пути доступа к входам PROGRAM |
10d | Пути доступа к переменным GLOBAL в RESOURCEs |
10e | Пути доступа к переменным GLOBAL в CONFIGURATIONs |
10f | Пути доступа к выходам PROGRAM |
10g | Пути доступа к внутренним переменным PROGRAM |
10h | Пути доступа к входам функционального блока |
10i | Пути доступа к выходам функционального блока |
11a | VAR_CONFIG...END_VAR к переменным Данное свойство поддерживается, если поддерживается свойство "частичное определение" с символом "*" в таблице 16 |
11b | VAR_CONFIG...END_VAR для компонент структур |
12a | VAR_GLOBAL CONSTANT в RESOURCE |
12b | VAR_GLOBAL CONSTANT в CONFIGURATION |
13a | VAR_EXTERNAL в RESOURCE |
13b | VAR_EXTERNAL CONSTANT в RESOURCE |
На следующем рисунке приведено объявление примера на рисунке 27.
Код программы | использует свойство таблицы 62 |
CONFIGURATION CELL_1 | 1 |
VAR_GLOBAL w: UINT; END_VAR | 2 |
RESOURCE STATION_1 ON PROCESSOR_TYPE_1 | 3 |
VAR_GLOBAL z1: BYTE; END_VAR 4 | 4 |
TASK SLOW_1 (INTERVAL:= t#20ms, PRIORITY:= 2); | 5a |
TASK FAST_1 (INTERVAL:= t#10ms, PRIORITY:= 1); | 5a |
PROGRAM P1 WITH SLOW_1: | 6a |
F(x1:= %IX1.1); | 8a |
PROGRAM P2: G(OUT1 => w, | 9b |
FB1 WITH SLOW_1, | 6b |
FB2 WITH FAST_1); | 6b |
END_RESOURCE | 3 |
RESOURCE STATION_2 ON PROCESSOR_TYPE_2 | 3 |
VAR_GLOBAL z2 : BOOL; | 4 |
AT %QW5: INT; | 7 |
END_VAR | 4 |
TASK PER_2(INTERVAL:= t#50ms, PRIORITY:= 2); | 5a |
TASK INT_2(SINGLE:= z2, PRIORITY:= 1); | 5b |
PROGRAM P1 WITH PER_2: | 6a |
F(x1:= z2, x2:= w); | 8b |
PROGRAM P4 WITH INT_2: | 6a |
H(HOUT1 => %QW5, | 9a |
FB1 WITH PER_2); | 6b |
END_RESOURCE | 3 |
VAR_ACCESS | 10a |
ABLE : STATION_1.%IX1.1 : BOOL READ_ONLY; | 10b |
BAKER : STATION_1.P1.x2 : UINT READ_WRITE; | 10c |
CHARLIE : STATION_1.z1 : BYTE; | 10d |
DOG : w : UINT READ_ONLY; | 10e |
ALPHA : STATION_2.P1.y1 : BYTE READ_ONLY; | 10f |
BETA : STATION_2.P4.HOUT1 : INT READ_ONLY; | 10f |
GAMMA : STATION_2.z2 : BOOL READ_WRITE; | 10d |
S1_COUNT : STATION_1.P1.COUNT : INT; | 10g |
THETA : STATION_2.P4.FB2.d1 : BOOL READ_WRITE; | 10h |
ZETA : STATION_2.P4.FB1.c1 : BOOL READ_ONLY; | 10i |
OMEGA : STATION_2.P4.FB1.C3 : INT READ_WRITE; | 10k |
END_VAR | 10a |
VAR_CONFIG | 11 |
STATION_1.P1.COUNT: INT:= 1; |
|
STATION_2.P1.COUNT: INT:= 100; |
|
STATION_1.P1.TIME1: TON:= (PT:= T#2.5s); |
|
STATION_2.P1.TIME1: TON:= (PT:= T#4.5s); |
|
STATION_2.P4.FB1.C2 AT %QB25: BYTE; |
|
END_VAR |
|
END_CONFIGURATION | 1 |
Примечание 1 - Графическое и полуграфическое представление таких свойств допускается, но не входит в задачу настоящего стандарта.
Примечание 2 - Ошибка, если тип данных, объявленный в операторе VAR_ACCESS отличается от типа данных, объявленного для переменной в другом месте, например, если переменная BAKER объявлена как WORD в приведенных выше примерах.
Рисунок 28 - Описание CONFIGURATION и RESOURCE (пример)
6.8.2 Задачи
Для целей настоящего стандарта задача определяется как элемент управления выполнением, который способен вызывать, как на периодической основе, так и при появлении переднего фронта заданной логической переменной, выполнение набора программных компонентов, которые могут включать программы и функциональные блоки, экземпляры которых заданы в объявлении программ.
Максимальное число задач на ресурс и допустимый интервал между задачами определяются разработчиком.
Задачи и их связь с программными компонентами может быть представлена графически или текстуально с использованием конструкции WITH как показано в таблице 63, в виде части ресурсов внутри конфигураций. Задача неявно разрешается или блокируется связанным с ней ресурсом в соответствии с механизмами. Управление программными компонентами при разрешенных задачах подчиняется следующим правилам:
a) Связанные программные компоненты должны быть спланированы для выполнения при каждом переднем фронте на входного параметра SINGLE задачи;
b) Если входной параметр INTERVAL - ненулевой, то связанные программные компоненты назначаются для периодического выполнения через заданный интервал времени, пока входной параметр SINGLE остается нулевым (0). Если входной параметр INTERVAL равен нулю (значение по умолчанию), периодическое выполнение связанных программных компонентов происходить не будет;
c) Входной параметр PRIORITY задачи устанавливает приоритет планирования связанных программных модулей, где нуль (0) имеет наивысший приоритет, а более низкие приоритеты имеют последовательно большие цифровые значения. Как показано в таблице 63, приоритет программного компонента (т.е. приоритет связанной с ним задачи) может использоваться для планирования с приоритетами или без приоритетов:
- в планировании без приоритетов вычислительные возможности становятся доступными на ресурсе, когда завершается выполнение программного компонента или функции операционной системы. Когда вычислительные возможности доступны, программный компонент с наивысшим плановым приоритетом начинает выполнение. Если в ожидании имеется более одного программного компонента с наивысшим плановым приоритетом, то будет выполняться программный компонент с наибольшим временем ожидания и наивысшим плановым приоритетом;
- в планировании с приоритетом, когда программный компонент назначен, он прерывает выполнение программного компонента с более низким приоритетом на том же ресурсе, то есть выполнение компонента с более низким приоритетом может быть задержано до завершения выполнения компонента с более высоким приоритетом. Программный компонент не прерывает выполнение другого компонента с таким же или более высоким приоритетом. В зависимости от плановых приоритетов, программный компонент может не начать выполнение в спланированный момент. Однако в примерах, приведенных в таблице 63, все программные компоненты завершают работу в срок, то есть они заканчивают выполнение до того, как будут спланированы для повторного выполнения. Разработчик предоставляет информацию, позволяющую пользователю определить, должны ли выдерживаться все сроки выполнения в предлагаемой конфигурации;
d) Программа без связанной задачи будет иметь самый низкий приоритет в системе. Любая такая программа должна быть спланирована для выполнения после "пуска" ее ресурса и должна быть перепланирована для выполнения, как только ее выполнение заканчивается;
e) Когда экземпляр функционального блока связан с задачей, его выполнение должно происходить под исключительным управлением задачи, независимо от правил оценки программного компонента, в котором объявлен связанный с задачей функциональный блок;
f) Экземпляр функционального блока, который не прямо связан с задачей, будет следовать обычным правилам для порядка оценки элементов языка для программного компонента (который сам может находиться под управлением задачи), в котором объявлен экземпляр функционального блока.
Примечание 1 - Экземпляры класса не могут иметь связанной задачи.
Примечание 2 - Методы функционального блока или класса выполняются в программном компоненте, который они вызывают;
g) Выполнение функциональных блоков внутри программы должно быть синхронизировано, чтобы обеспечить достижение параллельности доступа к данным в соответствии со следующими правилами:
- если функциональный блок получает более одного входного параметра от другого функционального блока, то когда первый FB выполняется, все входные параметра последнего должны представлять результаты той же оценки;
- если один или более функциональных блоков получает входные параметры от одного и того же функционального блока, и если все "целевые" блоки явно или неявно связаны с одной и той же задачей, тогда все входы на все такие "целевые" блоки во время их оценки будут представлять результаты одной и той же оценки "исходного" блока.
Необходимо обеспечить меры для сохранения выходных параметров функций или функциональных блоков, которые явно связаны с задачей, или которые используются как входные параметры в программные компоненты, имеющие явные связи с задачей, как необходимые для удовлетворения приведенных выше правил.
Ошибка возникает, если задача не может быть спланирована или удовлетворить заданному сроку ее выполнения вследствие чрезмерных требований к ресурсу или других конфликтов планирования задачи.
Таблица 63
Задача
Номер | Описание | Примеры |
1a | Текстовое объявление периодической задачи TASK | (свойство 5a таблицы 62) |
1b | Текстовое объявление непериодической задачи TASK | (свойство 5b таблицы 62) |
| Графическое представление TASK (общая форма) | |
2a | Графическое представление периодической TASK (с INTERVAL) | |
2b | Графическое представление непериодической TASK (с SINGLE) | |
3a | Текстовая связь с PROGRAMs | (свойство 6a таблицы 62) |
3b | Текстовая связь с функциональными блоками | (свойство 6b таблицы 62) |
4a | Графическое представление с PROGRAM | |
4b | Графическая связь с функциональными блоками внутри PROGRAMs | |
5a | Планирование без приоритетов | См. рисунок 28 |
5b | Планирование с приоритетами | См. рисунок 28 |
Примечание 1 - Подробности объявлений RESOURCE и PROGRAM не показаны. Примечание 2 - Обозначение X@Y указывает, что программный компонент X спланирован или выполняется с приоритетом Y. |
Следующие примеры показывают планирование без приоритетов и с приоритетами, определяемое в таблице 63 свойствами 5a и 5b.
Пример 1 - Планирование без приоритетов и с приоритетами | ||
1 Планирование без приоритетов |
| |
- Ресурс STATION_1 как сконфигурирован на рисунке 28 - Времена исполнения: P1 = 2 мс; P2 = 8 мс - P2.FB1 = P2.FB2 = 2 мс (см. примечание 1) - STATION_1 запускается при t = 0 | ||
Планирование (повторяется каждые 40 мс) | ||
t (мс) | Выполнение | Ожидание |
0 | P2.FB2@1 | P1@2, P2.FB1@2, P2 |
2 | P1@2 | P2.FB1@2, P2 |
4 | P2.FB1@2 | P2 |
6 | P2 | - |
10 | P2 | P2.FB2@1 |
14 | P2.FB2@1 | P2 |
16 | P2 | (перезапуск P2) |
20 | P2 | P2.FB2@1, P1@2, P2.FB1@2 |
24 | P2.FB2@1 | P1@2, P2.FB1@2, P2 |
26 | P1@2 | P2.FB1@2, P2 |
28 | P2.FB1@2 | P2 |
30 | P2.FB2@1 | P2 |
32 | P2 | - |
40 | P2.FB2@1 | P1@2, P2.FB1@2, P2 |
- Ресурс STATION_2 как сконфигурирован на рисунке 28 - Времена исполнения: P1 = 30 мс, P4 = 5 мс, P4.FB1 = 10 мс - INT_2 срабатывает при t = 25, 50, 90,... мс - STATION_2 запускается при t= 0 | ||
План | ||
t (мс) | Исполнение | Ожидание |
0 | P1@2 | P4.FB1@2 |
25 | P1@2 | P4.FB1@2, P4@1 |
30 | P4@1 | P4.FB1@2 |
35 | P4.FB1@2 | - |
50 | P4@1 | P1@2, P4.FB1@2 |
55 | P1@2 | P4.FB1@2 |
85 | P4.FB1@2 | - |
90 | P4.FB1@2 | P4@1 |
95 | P4@1 | - |
100 | P1@2 | P4.FB1@2 |
2 Планирование с приоритетами | См. таблицу 63, 5b | |
- Ресурс STATION_1 как сконфигурирован на рисунке 28 - Времена исполнения: P1 = 2 мс; P2 = 8 мс; P2.FB1 = P2.FB2 = 2 мс - STATION_2 запускается при t= 0 | ||
План | ||
t (мс) | Исполнение | Ожидание |
0 | P2.FB2@1 | P1@2, P2.FB1@2, P2 |
2 | P1@2 | P2.FB1@2, P2 |
4 | P2.FB1@2 | P2 |
6 | P2 | - |
10 | P2.FB2@1 | P2 |
12 | P2 | - |
16 | P2 | (перезапуск P2) |
20 | P2.FB2@1 | P1@2, P2.FB1@2, P2 |
- Ресурс STATION_2 как сконфигурирован на рисунке 28 - Времена исполнения: P1 = 30 мс, P4 = 5 мс, P4.FB1 = 10 мс - INT_2 срабатывает при t = 25, 50, 90,... мс - STATION_2 запускается при t = 0 | ||
План | ||
t (мс) | Исполнение | Ожидание |
0 | P1@2 | P4.FB1@2 |
25 | P4@1 | P1@2, P4.FB1@2 |
30 | P1@2 | P4.FB1@2 |
35 | P4.FB1@2 | - |
50 | P4@1 | P1@2, P4.FB1@2 |
55 | P1@2 | P4.FB1@2 |
85 | P4.FB1@2 | - |
90 | P4@1 | P4.FB1@2 |
95 | P4.FB1@2 | - |
100 | P1@2 | P4.FB1@2 |
Примечание 1 - Времена выполнения P2.FB1 и P2.FB2 не включены во время выполнения P2. Примечание 2 - Время выполнения P4.FB1 не включено во время выполнения P4. |
Пример 2 - Связи задачи с экземплярами функционального блока
RESOURCE R1
PROGRAM X
END_PROGRAM
a) Функциональные блоки с явными связями задачи
P1
PROGRAM X
END_PROGRAM
slow1
b) Функциональные блоки с неявными связями задачи
RESOURCE R1
P1
PROGRAM X
END_PROGRAM
c) Явные связи задачи эквивалентны b)
Примечание 3 - Графические представления в этих примерах являются только иллюстративными, но не нормативными.