Вызов FC/SFC из катушкиКоманда Вызвать FC/SFC из катушки используется для того, чтобы вызвать функцию (FC) или системную функцию (SFC), не имеющую параметров. В зависимости от предшествующей связи вызов является условным или безусловным. В случае условного вызова нельзя в разделе кода функции (FC) вводить параметры типа BLOCK_FC. Однако в пределах функционального блока (FB), вы можете вводить BLOCK_ FC как тип параметра. Условный вызов выполняется только тогда, когда RLO равен 1. Если условный вызов не выполняется, то RLO после команды вызова равен 0. Если команда выполняется, то она выполняет следующие функции:
После всего этого обработка программы продолжается в вызванном блоке. Информацию о передаче параметров смотрите в Оперативной справке STEP 7.
Вызов FB, FC, SFB, SFC и мультиэкземпляровВы можете вызывать функциональные блоки (FB), функции (FC), системные функциональные блоки (SFB), системные функции (SFC) и мультиэкземпляры, выбирая их из списка "Program Elements [Элементы программы]". Они находятся в конце списка семейств команд под следующими названиями:
Когда вы выбираете один из этих блоков, на вашем экране появляется прямоугольник с номером или символическим именем функции или функционального блока и принадлежащими ему параметрами. Вызываемый вами блок должен быть скомпилирован и уже существовать в вашем программном файле, библиотеке или в CPU.Если команда вызова FB, FC, SFB, SFC и мультиэкземпляров выполняется, то она выполняет следующие функции:
Примечание Когда сохраняются регистры DB и DI, они не могут указывать на блоки данных, которые вы открыли. Из-за механизма передачи входных и выходных параметров, особенно там, где дело касается функциональных блоков, компилятор иногда перезаписывает регистр DB. Подробности сморите в Оперативной справке STEP 7. Разрешающий выход Разрешающий выход (ENO) блока LAD соответствует биту BR слова состояния (см. раздел 2.3). При записи функционального блока или функции, которую вы хотите вызывать из LAD, независимо от того, записываете ли вы FB или FC в форме STL или LAD, вы несете ответственность за управление битом BR. Вы должны использовать команду SAVE (в STL) или катушку --- (SAVE) (в LAD), чтобы сохранить RLO в бите BR в соответствии со следующими критериями:
Вы должны программировать эти команды в конце FB или FC так, чтобы они были последними командами, которые выполняются в блоке.
Влияние вызова на биты слова состояния
ПараметрыПараметры, определенные в разделе VAR блока, будут отображаться в блоке LAD. Снабжение блока параметрами различается в зависимости от типа блока следующим образом:
Структурным параметрам IN/OUT и параметрам типа «Pointer [указатель]» и типа «Array [массив]» вы должны предоставить в распоряжение фактический параметр (по крайней мере, во время первого вызова). Каждый фактический параметр, который вы предоставляете в распоряжение при вызове функционального блока, должен иметь такой же тип данных, как его формальный параметр. Следующая таблица показывает блок для вызова FB, FC, SFB, SFC и мультиэкземпляров и описывает общие для всех этих блоков параметры блока вызова. Когда вы вызываете свой блок из браузера команд, в верхней части блока автоматически появляется номер блока (номер FB, FC, SFB или SFC, например, FC10).
Вызов FB в виде блока KOP
ВозвратКоманда Возврат используется для выхода из блоков. Из блока можно выйти по условию. Возврат сохраняет RLO в бите BR слова состояния. Если выход из блока происходит вследствие условного возврата, то состояние сигнала битов RLO и BR в блоке, которому возвращается управление программой, равно 1.
Важные замечания относительно использования функций MCRБудьте осторожны с блоками, в которых главное управляющее реле было активизировано посредством MCRA:
Программируемый контроллер находится в состоянии STOP или имеют место неопределенные характеристики
во время выполнения! Обращение к формальным параметрам
Передача параметров
KOP/FUP
Исправление:
Команды главного управляющего релеОпределение главного управляющего реле
Активизация/деактивизация главного управляющего
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Блок LAD | Параметры | Тип данных | Область памяти | Описание |
| Нет | - | - | Активизирует функцию MCR |
Деактивизация MCR
При помощи команды Деактивизировать главное управляющее реле вы выключаете
зависимость последующих команд от MCR. После этой команды вы больше не
можете программировать зоны MCR. Когда ваша программа деактивизирует область
MCR, MCR всегда пропускает ток, независимо от записей в стеке MCR.
| Блок LAD | Параметры | Тип данных | Область памяти | Описание |
| Нет | - | - | Деактивизирует функцию MCR |
Стек MCR и бит, управляющий зависимостью от него (бит MA), относятся к соответствующему уровню и должны сохраняться и выбираться каждый раз, когда переключается уровень последовательности команд. Они предварительно устанавливаются в начале каждого уровня последовательности (биты входов MCR с 1 по 8 устанавливаются в 1, указатель вершины стека MCR устанавливается в 0, и бит MA устанавливается в 0). Стек MCR передается от блока к блоку, а бит MA сохраняется и устанавливается в 0, каждый раз, когда блок вызывается. Он извлекается обратно в конце блока. MCR может быть реализован таким способом, что он оптимизирует продолжительность работы CPU, генерирующих код. Причиной этого является то, что зависимость от MCR не передается блоком дальше; она должна явно активизироваться командой MCR. CPU, генерирующий код, распознает эту команду и генерирует дополнительный код, необходимый для оценивания стека MCR до тех пор, пока он не распознает команду MCR или не достигнет конца блока. В случае команд, лежащих вне области MCRA/MCRD, нет увеличения времени выполнения. Команды MCRA и MCRD должны использоваться в пределах вашей программы всегда попарно.

Операции, запрограммированные между MCRA и MCRD, зависят от состояния сигнала бита MCR. Операции, запрограммированные вне последовательности MCRA–MCRD, не зависят от состояния сигнала бита MCR. Если команда MCRD отсутствует, то операции, запрограммированные между командами MCRA и BEU, зависят от бита MCR. (BEU – это команда AWL.)
Вы должны самостоятельно программировать в блоках зависимость функций (FC) и функциональных блоков (FB) от MCR. Если эта функция или этот функциональный блок вызывается из последовательности MCRA/MCRD, то не все команды в пределах этой последовательности автоматически зависят от бита MCR. Чтобы добиться этого, используйте команду MCRA вызываемого блока.
![]() |
Предупреждение |
Включение MCR
Команда Включить главное управляющее реле (MCR<) запускает операцию,
которая помещает RLO в стек MCR и открывает зону MCR. На команды, показанные
в таблице 16-4, влияет RLO, который помещается в стек MCR, когда открывается
зона MCR. Стек MCR работает по принципу LIFO (Last In, First Out [последним
вошел – первым вышел]). Возможны только восемь записей. Если стек уже
заполнен, то команда Включить главное управляющее реле выдает ошибку стека
MCR (MCRF).
| Блок LAD | Параметры | Тип данных | Область памяти | Описание |
| Нет | - | - | Открывает зону MCR |
Выключение MCR
Команда Выключить главное управляющее реле (MCR>) закрывает зону MCR,
которая была открыта последней. Команда делает это, удаляя запись RLO
из стека MCR. RLO был помещен туда командой Включить главное управляющее
реле. Ячейка, освободившаяся на другом конце стека MCR, работающего по
принципу LIFO (Last In, First Out [последним вошел – первым вышел]), устанавливается
в 1. Если стек уже пуст, то команда Выключить главное управляющее реле
выдает ошибку стека MCR (MCRF).
| Блок LAD | Параметры | Тип данных | Область памяти | Описание |
| Нет | - | - | Закрывает зону MCR, которая была открыта последней |
Управление MCR происходит посредством стека шириной в один бит и глубиной восемь записей (см. рис. ниже). MCR активизирован до тех пор, пока все восемь записей в стеке не станут равными 1. Команда --(MCR <) копирует RLO в стек MCR. Команда --(MCR >) удаляет последнюю запись из стека и устанавливает освободившуюся ячейку стека в 1. Если происходит ошибка, например, более восьми команд --(MCR >) следуют за друг другом или вы пытаетесь выполнить команду --(MCR >), когда стек пуст, то такая ошибка активизирует сообщение об ошибке MCRF. Состояние стека MCR контролируется по указателю вершины стека (MSP: 0 = пустой, 1 = одна запись, 2 = две записи, ..., 8 = восемь записей).

Вложение команд (MCR<) и (MCR>)
Вы можете вкладывать пары команд --(MCR<) и --(MCR>) друг в друга.
Максимальная глубина вложения равна восьми, то есть вы можете записать
максимум восемь команд --(MCR<) одну за другой перед тем, как вставить
команду --(MCR>). Вы должны программировать одинаковое количество команд
--(MCR<) и --(MCR>). Если команды --(MCR<) вкладываются друг
в друга, то формируется бит MCR более низкого уровня вложенности. Тогда
команда --(MCR<) связывает текущий RLO с текущим битом MCR в соответствии
с таблицей истинности логической операции И. Когда команда --(MCR>)
завершает уровень вложенности, она извлекает бит MCR из следующего более
высокого уровня.
| <--Предыдущая статья |