Вызов FC/SFC без параметров
С помощью такой команды вы можете вызвать FC или SFC которые не имеют параметров. Вызов может быть условным или безусловным.
В кодовом разделе функции (FC) нельзя задавать никаких параметров типа
BLOCK_FC в качестве адреса для условного вызова. Но можно задать
параметр типа BLOCK_FC в качестве адреса в функциональном блоке (FB).
Условный вызов
Условный вызов выполняется только в том случае, если RLO равен 1. Если условный
вызов не выполняется, то RLO после команды вызова равен 0. Если команда
выполняется, то реализуются следующие функции:
- Сохраняеться адрес, необходимый для возврата в вызывающий блок
- Сохраняются регистры блоков данных (блоки данных и экземпляры блоков данных)
- Предыдущая область локальных данных заменяеться текущей областью локальных данных
- Бит MA (бит активизации MCR) записывается в стек блоков (BSTACK).
- Для вызываемой FC или SFC создаеться новая область локальных данных
Затем исполнение программы продалжаеться в ызванном блоке.
Блок FBD
|
параметры
|
тип данных
|
область памяти
|
описание
|
![]() |
номер
|
BLOCK_FC
|
-
|
номер вашей функции (FC10 или SFC58*) Условный вызов с параметром типа BLOCK_FC в качестве адреса возможен только в FB, но не в FC.
|
Безусловный вызов
Безусловный вызов для FC10*, то команда CALL выполняет следующие действия
- Сохраняет адрес, необходимый для возврата в текущий FB
- Сохраняет переключатели для DB10 и экземпляра блока данных FB
- Помещает в стек блоков (BSTACK) бит MA, установленный в 1 в команде MCRA , и сбрасывет этот бит в 0 для вызванного FC10
Пример исполнение программы продолжается в FC10. Если Вы хотите использовать функцию MCR в FC10, нужно ее там повторно ативизировать. Когда FC10 завершается, исполнение программы возвращается в вызывающий FB. Бит MA восстанавливается. DB10 и экземпляр блока данных определенного пользователем FB снова являются текущими DB независимо от того, какие DB были использованы в FC10. После возврата из FC10 состояние сигнала входа I0.0 присваивается выходу Q4.0. Вызов FC11 является условным. Он выполняется только тогда, когда состояние входа I0.1 равно 1. Если вызов исполняется, то происходит то же самое,
что и при вызове FC10. Биты слова состояния
Вызов FB, FC, SFB, SFC и мультиэкземпляров
Эти блоки, функции и мультиэкземпляры можно вызвать выбирая их из списка ”Program Elements” (“Элементы программы”)*. Когда вы выбираете один из этих блоков, на экране появляется элемент с номером или символическим именем функции или функционального блока и принадлежащими ему параметрами.
Помните, что блок который вы вызываете уже должен быть скомпилирован и должен уже существовать в вашей программе, библиотеке или в CPU.
Если команда выполняется то она реализует следующие функции:
- Сохраняет адрес, необходимый для возврата в вызывающий блок
- Сохраняет оба регистра блоков данных (блока данных и экземпляра блока данных)
- Заменяет предыдыщую область локальных данных текущей областью локальных данных
- Помещает в стек блоков (BSTACK) бит MA (бит активизации MCR)
- Создает новую область локальных данных для вызванной FC или SFC.
Когда сохраняются регистры DB и DI, возможно, что они не указывают на блоки данных, которые Вы открыли. Из-за механизма копирования для передачи параметров, особенно, когда это касается функциональных блоков, компилятор иногда переписывает регистр DB.
Затем исполнение программы продолжается в вызванном блоке.
Выход ENO блока FBD соответствует биту BR слова состояния. Когда вы пишете функциональный блок или функцию (не завивимо на каком языке вы ее пишете) которую хотите вызвать в FBD помните о бите BR. В бите BR сохраняется RLO с помощью команды SAVE в соответствии со следующими критериями:
- Сохранить RLO равным 1 в бите BR, если FB или FC исполняется без ошибок.
- Сохранить RLO равным 0 в бите BR, если при исполнении FB или FC происходит
ошибка.
Эти команды необходимо запрограммировать в конце FB или FC так, чтобы они были последними командами, исполняемыми в блоке.
При записи FB и FC в FBD, если Вы не обрабатываете бит BR так, как описано выше, один FB или FC может переписать бит BR другого FB или FC. Во избежание этой проблемы сохраняйте RLO в конце каждого FB или FC, как описано выше.
Воздействие вызова на биты слова состояния
Параметры
Параметры определенные в разделе переменных* блока будут отражены в элементе FBD. Параметры зависят от типа блока следующим образом:
- Для FC вы должны поставить в соответствие всем формальным параметрам фактические параметры.
- Ввод фактических параметров для FB не обязателен.Однако, необходимо закрепить за FB блок данных (экземпляр DB). Если какому-то формальному параметру не поставлен в соответствие фактический параметр, то FB работает со значениями, существующими в экземпляре DB.
- В случае мультиэкземпляров Вам нет необходимости указывать экземпляр DB, так
как вызываемый блок уже поставлен в соответствие номеру DB
Для структурных параметров IN/OUT и параметров типов ”Pointer” (“Указатель”) и ”Array” (“Массив”) нужно сделать доступным фактический параметр (по крайней мере при первом вызове).
Каждый фактический параметр, который Вы делаете доступным при вызове
функционального блока должен иметь тот же тип данных, что и соответствующий
формальный параметр.
В таблице показан элемент FUP для вызова FB, FC, SFB, SFC и описаны параметры,
общие в элементе для всех этих блоков. Номер блока появляется автоматически в
верхней части элемента (номер FB, FC, SFB или SFC, например, FC10).
Элемент FBD
|
параметры
|
тип данных
|
область памяти
|
описание
|
![]() |
DB no. | BLOCK_DB | - | Номер блока данных. Эта информация необходима только для вызова FB. |
EN | BOOL | I, Q, M, D, L, T, C | Деблокировка входа | |
ENO | BOOL | I, Q, M, D, L | Деблокировка выхода |
Команду возврат используют для выхода из блока по условию
У данной команды отсутствуют параметры, тип данных и область памяти
![]() |
|||||||||
Биты слова состояния |
|||||||||
условный возврат (возврат, если RLO=1) |
BR
|
СС1
|
СС0
|
OV
|
OS
|
OR
|
STA
|
RLO
|
FC
|
записывает
|
x | - | - | 0 | 0 | 1 | x | x |
Master Control Relay
Master Control Relay (MCR см.также следующий раздел)- главное управляющее реле используется для активизации и деактивизации потока сигнала.Деактивированный поток сигнала соответствует последовательности команд, которая записывает нулевое значение вместо рассчитанного значения, или последовательности команд, которая оставляет неизменным существующее значение памяти. Операции, запускаемые командами, описанными в следующей таблице, зависят от MCR.
Команды Присвоить и Коннектор
Команды Присвоить и Коннектор записывают в память 0, если MCR равно 0. Команды Установить выход и Сбросить выход оставляют существующее значение неизменным
Элемент FBD | Описание | Раздел FBD |
![]() |
Коннектор (промежуточный выход) | 8,9 |
![]() |
Присваение | 8.8 |
![]() |
Установка выхода | 8.11 |
![]() |
Сброс выхода | 8.12 |
![]() |
SR-триггер | 8.25 |
![]() |
RS-триггер | 8.26 |
![]() |
Передача значения | 14 |
Команды, зависящие от MCR, и их реакция на его состояние
состояние сигнала MCR | присвоение, коннектор![]() ![]() |
установка или сброс выхода![]() ![]() ![]() ![]() |
передача значения ![]() |
0 | записывает 0 (имитирует реле, которое отпадает при отключении питания | ничего не записывает ( имитирует реле с защелкой, которое остается в текущем состоянии при отключении питания | записывает 0 (имитирует элемент, который выдает значение 0 при отключении питания) |
1 | Нормальное исполнение | Нормальное исполнение | Нормальное исполнение |
Активизация/деактивизация Master Control Relay
Команда Активизировать Master Control Relay
Командой Активизировать Master Control Relay (MCR) вы создаете последовательность команд зависящих от MCR. После ввода этой команды вы можете запрограммировать с помощью этих команд зоны MCR ( см. следующий раздел). Когда Ваша программа активизирует область MCR, все действия MCR зависят от содержимого стека MCR (см. рис.1).
Команда Деактивизировать MCR
Команда Деактивизировать MCR последовательность команд более не зависит от MCR. После этой команды вы не можете больше программировать зоны MCR. Если Ваша программа деактивизирует область MCR, то MCR всегда пропускает поток сигнала независимо от записей в стеке MCR.
Элемент FBD | параметры | тип данных | область памяти | описание |
![]() |
Отсутствуют | - | - | Активизирует MCR |
![]() |
Отсутствуют | - | - | Деактивизирует MCR |
Стек MCR и бит, контролирующий его зависимость (бит МА), относятся к отдельным уровням и должны быть сохранены и извлечены всякий раз, когда Вы изменяете уровень последовательности. Они предварительно устанавливаются в начале каждого уровня последовательности (входные биты MCR с 1 по 8 устанавливаются 1, указатель стека MCR устанавливается в 0, и бит МА устанавливается в 0).
Стек MCR передается из блока в блок, а бит МА сохраняется и устанавливается в всякий раз, как блок вызывается. Он извлекается обратно в конце блока.
MCR может быть реализован таким образом, что он оптимизирует время выполнения CPU, генерирующего код. Причина этого состоит в том, что последовательность команд, зависящая от MCR, не выполняется блоком; она должна быть явно активизирована командой MCR. CPU, генерирующий код, распознает эту команду и генерирует дополнительный код, необходимый для оценки стека MCR, пока он не распознает команду MCR или не достигнет конца блока. Для команд вне диапазона MCRА/ MCRD время исполнения не увеличивается.
Команды MCRА и MCRD всегда должны использоваться парами внутри Вашей программы.
Рис 1. Активизация и деактивизация области MCR
Операции, запрограммированные между MCRA и MCRD, зависят от состояния бита
MCR. Операции, запрограммированные вне последовательности MCRA–MCRD, не
зависят от состояния бита MCR. Если команда MCRD отсутствует, то команды,
запрограммированные между командами MCRA и BEU, зависят от бита MCR.
![]() |
Команда MCRA активизирует функцию MCR до следующего MCRD. Команды между MCR< и MCR> обрабатываются в зависимости от бита MA (здесь I0.0): Если состояние сигнала на входе I0.0 равно 1:
|
Зависимость FC и FB вы должны запрограммировать в блоке сами. Если эта функция или функциональный блок вызывается из последовательности MCRA/MCRD, то не все команды внутри этой последовательности автоматически зависят от бита MCR. Чтобы достичь этого, используйте команду MCRА вызванного блока.
Риск травмирования людей и повреждения оборудования. Никогда не используйте команду MCR для АВАРИЙНОГО ВЫКЛЮЧЕНИЯ или в качестве предохранительного приспособления для персонала.MCR не является заменой для аппаратного главного управляющего реле. !
Включение/выключение Master Control Relay
Команда Включить Master Control Relay
Команда Включить Master Control Relay (MCR<) запускает операцию, которая сохраняет RLO в стеке MCR и открывает зону действия MCR. На команды, показанные в следующей таблице, оказывает влияние RLO, сохраненное в стеке MCR, когда зона действия MCR открыта. Стек MCR работает по принципу буфера LIFO (Last In, First Out - последний вошел, первый вышел). Возможны только восемь записей. Если стек уже полон, команда Включить Master Control Relay генерирует ошибку стека MCR (MCRF).
Команда Выключить Master Control Relay
Команда Выключить Master Control Relay (MCR>) закрывает зону действия MCR, открытую последней. Эта команда делает это путем удаления записи RLO из стека MCR. RLO было сохранено командой Включить Master Control Relay. Запись, освобождаемая на другом конце LIFO-стека MCR, устанавливается в 0. Если стек уже пуст, команда Выключить Master Control Relay генерирует ошибку стека MCR (MCRF).
Элемент FBD | параметры | тип данных | область памяти | описание |
![]() |
Отсутствуют | - | - | Открывает зону MCR |
![]() |
Отсутствуют | - | - | Закрывает зону MCR, которая была открыта последней |
MCR управляется стеком шириной в один бит и глубиной восемь записей (см. рис. 2). MCR активизировано, пока все восемь записей в стеке равны 1. Команда MCR< копирует RLO в стек MCR. Команда MCR> удаляет последнюю запись из стека и устанавливает освобожденный адрес стека в 1. Если происходит ошибка, например, если в последовательности имеется более восьми команд MCR> или Вы пытаетесь выполнить команду MCR>, когда стек пуст, активизируется сообщение об ошибке MCRF. Контроль стека MCR основан на указателе стека (MSP: 0 = пуст, 1 = одна запись, 2 = две записи, ..., 8 = восемь записей).
Рис.2 Стек Master Control Relay
Команды MCR< и MCR> внутри Вашей программы всегда должны использоваться парами. Команда MCR< принимает состояние RLO и копирует его в бит MCR. Команда MCR> устанавливает бит MCR в 1 безусловно. Вследствие этого все остальные команды между командами MCRА и MCRD выполняются независимо от бита MCR (сведения о MCRА и MCRD см. выше).
Вложение команд MCR< и MCR>
Данные команды могут быть вложенными, глубина вложения может достигать 8, иначе говоря можно написать MCR< 8 раз прежде чем поставить MCR>. Соблюдайте парность вложения (должно быть одинаковое количество MCR< и MCR>).
Если производится вложение команд MCR<, то формируется бит MCR более низкого
уровня вложенности. Затем команда MCR< комбинирует текущее RLO с текущим
битом MCR в соответствии с таблицей истинности для И.
Когда команда MCR> завершает уровень вложения, она извлекает бит MCR из
следующего более высокого уровня.
![]() |
Когда команда MCRA активизирует функцию MCR, Вы можете создать до 8 вложенных зон MCR. В данном примере имеется две зоны MCR. Первая команда MCR> действует совместно с второй командой MCR<. Все команды внутри второго набора скобок MCR (MCR) принадлежат второй зоне MCR. Операции выполняются следующим образом:
|
<--Предыдущая статья |