Вызов FC/SFC из катушки
Команда Вызвать FC/SFC из катушки используется для того, чтобы вызвать функцию (FC) или системную функцию (SFC), не имеющую параметров. В зависимости от предшествующей связи вызов является условным или безусловным.
В случае условного вызова нельзя в разделе кода функции (FC) вводить параметры типа BLOCK_FC. Однако в пределах функционального блока (FB), вы можете вводить BLOCK_ FC как тип параметра.
Условный вызов выполняется только тогда, когда RLO равен 1. Если условный вызов не выполняется, то RLO после команды вызова равен 0. Если команда выполняется, то она выполняет следующие функции:
- Сохраняет адрес, в котором нуждается, чтобы возвратиться в вызывающий блок
- Сохраняет селекторы обоих текущих блоков данных (DB и DI)
- Заменяет текущую область локальных данных на предыдущую область локальных данных
- Помещает бит MA (MCR Active bit [бит MCR активно]) в стек блоков (BSTACK)
- Создает новую область локальных данных для вызываемой FC или SFС
После всего этого обработка программы продолжается в вызванном блоке. Информацию о передаче параметров смотрите в Оперативной справке STEP 7.
Блок LAD | Параметры | Тип данных | Область памяти | Описание |
![]() |
номер | BLOCK_FC | - | Номер FC или SFC (например, FC10 или SFC59). Набор доступных SFC зависит от вашего CPU. В случае условного вызова вы не можете внутри функции (FC) вводить параметры типа BLOCK_FC. Однако внутри функционального блока вы можете вводить BLOCK_FC как тип параметра. |
Пример и биты слова состояния вызова FC/SFC из катушки
Вызов FB, FC, SFB, SFC и мультиэкземпляров
Вы можете вызывать функциональные блоки (FB), функции (FC), системные функциональные блоки (SFB), системные функции (SFC) и мультиэкземпляры, выбирая их из списка "Program Elements [Элементы программы]". Они находятся в конце списка семейств команд под следующими названиями:
- FB Blocks [Блоки FB]
- FC Blocks [Блоки FC]
- SFB Blocks [Блоки SFB]
- SFC Blocks [Блоки SFC]
- Multiple Instances [Мультиэкземпляры]
- Libraries [Библиотеки]
Когда вы выбираете один из этих блоков, на вашем экране появляется прямоугольник с номером или символическим именем функции или функционального блока и принадлежащими ему параметрами. Вызываемый вами блок должен быть скомпилирован и уже существовать в вашем программном файле, библиотеке или в CPU.Если команда вызова FB, FC, SFB, SFC и мультиэкземпляров выполняется, то она выполняет следующие функции:
- Сохраняет адрес, в котором нуждается, чтобы возвратиться в вызывающий блок
- Сохраняет селекторы обоих текущих блоков данных (DB и DI)
- Заменяет предыдущую область локальных данных на текущую область локальных данных
- Помещает бит MA (MCR Active bit [бит MCR активно]) в стек блоков (BSTACK)
- Создает новую область локальных данных для вызываемой FC или SFC
Когда сохраняются регистры DB и DI, они не могут указывать на блоки данных, которые вы открыли. Из-за механизма передачи входных и выходных параметров, особенно там, где дело касается функциональных блоков, компилятор иногда перезаписывает регистр DB. Подробности сморите в Оперативной справке STEP 7.
Разрешающий выход
Разрешающий выход (ENO) блока LAD соответствует биту BR слова состояния (см. раздел 2.3). При записи функционального блока или функции, которую вы хотите вызывать из LAD, независимо от того, записываете ли вы FB или FC в форме STL или LAD, вы несете ответственность за управление битом BR. Вы должны использовать команду SAVE (в STL) или катушку --- (SAVE) (в LAD), чтобы сохранить RLO в бите BR в соответствии со следующими критериями:
- Сохранить RLO со значением 1 в бите BR для случая, когда FB или FC выполняется без ошибки.
- Сохранить RLO со значением 0 в бите BR для случая, когда FB или FC выполняется с ошибкой.
Вы должны программировать эти команды в конце FB или FC так, чтобы они были последними командами, которые выполняются в блоке.
Возможен непреднамеренный сброс бита BR в 0. Если при записи FB и FC в форме KOP вы обрабатываете бит BR не так, как описано выше, то один FB или FC может перезаписать бит BR другого FB или FC. Чтобы избежать этой проблемы, сохраняйте RLO в конце каждого FB или FC так, как описано выше.
Влияние вызова на биты слова состояния
Биты слова состояния
|
|||||||||
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | FC | |
Условный вызов | x |
- | - | - | 0 | 0 | 1 | 1 | x |
Безусловный вызов | - | - | - | - | 0 | 0 | 1 | - | x |
Параметры
Параметры, определенные в разделе VAR блока, будут отображаться в блоке LAD. Снабжение блока параметрами различается в зависимости от типа блока следующим образом:
- В случае функции (FC) вы должны предоставить фактические параметры для всех формальных параметров
- В случае функциональных блоков (FB) ввод фактических параметров необязателен. Однако вы должны закрепить за FB экземплярный блок данных (экземплярный DB). Если формальному параметру не поставлен в соответствие фактический параметр, то FB работает со значениями, существующими в его экземплярном DB.
- В случае мультиэкземпляров вам не нужно указывать экземплярный DB, так как вызываемому блоку уже назначен номер DB (за дополнительной информацией об описании мультиэкземпляров обращайтесь к Оперативной справке STEP 7).
Структурным параметрам IN/OUT и параметрам типа «Pointer [указатель]» и типа «Array [массив]» вы должны предоставить в распоряжение фактический параметр (по крайней мере, во время первого вызова). Каждый фактический параметр, который вы предоставляете в распоряжение при вызове функционального блока, должен иметь такой же тип данных, как его формальный параметр.
Следующая таблица показывает блок для вызова FB, FC, SFB, SFC и мультиэкземпляров и описывает общие для всех этих блоков параметры блока вызова. Когда вы вызываете свой блок из браузера команд, в верхней части блока автоматически появляется номер блока (номер FB, FC, SFB или SFC, например, FC10).
Блок LAD | Параметры | Тип данных | Область памяти | Описание |
![]() |
DB No. | BLOCK_DB | - | Номер экземплярного блока данных. Вам нужно вводить эту информацию только для вызова FB. |
EN | BOOL | I, Q, M, D, L | Разрешающий вход | |
ENO | BOOL | I, Q, M, D, L | Разрешающий выход |
Вызов FB в виде блока KOP
Возврат
Команда Возврат используется для выхода из блоков. Из блока можно выйти по условию. Возврат сохраняет RLO в бите BR слова состояния. Если выход из блока происходит вследствие условного возврата, то состояние сигнала битов RLO и BR в блоке, которому возвращается управление программой, равно 1.
Блок LAD | Параметры | Тип данных | Область памяти | Описание |
![]() |
Нет | - | - | - |
Пример и биты слова состояния функции возврата
Важные замечания относительно использования функций MCR
Будьте осторожны с блоками, в которых главное управляющее реле было активизировано посредством MCRA:
- Если MCR деактивизировано, то всеми присваиваниями в сегментах программы между (MCR<) и (MCR>) записывается значение 0.
- MCR деактивизируется, если RLO был =0 перед командой (MCR<).
Для вычисления адресов компилятор использует также доступ на запись к локальным данным, которые скрываются за временными переменными, определенными в VAR_TEM.
Обращение к формальным параметрам
- Обращение к компонентам сложных параметров FC типа STRUCT, UDT, ARRAY, STRING.
- Обращение к компонентам сложных параметров FB типа STRUCT, UDT, ARRAY, STRING из области IN_OUT в блоке версии 2.
- Обращение к параметрам функционального блока версии 2, если его адрес больше, чем 8180.0.
- Обращение в функциональном блоке версии 2 к параметру типа BLOCK_DB открывает DB0. Любой последующий доступ к данным переводит CPU в режим STOP. T 0, C 0, FC0 или FB0 всегда используются для TIMER, COUNTER, BLOCK_FC и BLOCK_FB.
Передача параметров
- Вызовы, в которых передаются параметры.
KOP/FUP
- T-ветви и промежуточные выходы (коннекторы) в KOP или FUP, запускаемые с RLO=0.
Исправление:
Устраните зависимость вышеупомянутых команд от MCR:
- Деактивизируйте главное управляющее реле при помощи команды Деактивизировать главное управляющее реле перед рассматриваемым оператором или сегментом.
- Активизируйте снова главное управляющее реле при помощи команды Активизировать главное управляющее реле после рассматриваемого оператора или сегмента.
Команды главного управляющего реле
Определение главного управляющего реле
Главное управляющее реле (Master Control Relay, MCR, см. также ющий раздел) – это главный выключатель Американской системы электроавтоматики (контактного плана, LAD) для подачи питания и прерывания потока энергии (пути тока). Прерванный путь тока соответствует последовательности команд, которая записывает нулевое значение вместо расчетного значения, или последовательности команд, которая оставляет существующее значение в памяти неизменным. Операции, запускаемые командами, показанными в таблице 15–4, зависят от MCR. Команды Выходная катушка и Промежуточный выход (коннектор) записывают в память 0, если MCR равен 0. Команды Установить выход и Сбросить выход оставляют существующее значение неизменным
Таблица 16–4.
Элемент или имя в блоке
|
Имя команды
|
Раздел в этом руководстве
|
![]() |
Промежуточный выход (коннектор) | |
![]() |
Выходная катушка | |
——( S)
|
Установка выхода | |
——( R)
|
Сброс выхода | |
![]() |
Установка-сброс триггера | |
![]() |
Сброс-установка триггера | |
![]() |
Присвоить значение |
Таблица 16–5. Операции, зависящие от MCR, и их реакция на его состояние сигнала | |||
Состояние сигнала MCR |
Иcходная катушка или промежуточный выход
![]() |
Установка или сброс выхода![]() |
Присвоить значение
MOVE |
0 | Записывает 0 (Имитирует реле, которое при снятии напряжения переходит в свое состояние покоя) |
Не записывает (Имитирует реле с механической блокировкой, которое при снятии напряжения остается в своем текущем состоянии) |
Записывает 0 (Имитирует компонент, который при потере напряжения, выдает значение 0) |
1 | Нормальное выполнение | Нормальное выполнение | Нормальное выполнение |
Активизация/деактивизация главного управляющего реле
Активизация MCR
При помощи команды Активизировать главное управляющее реле вы включаете зависимость последующих команд от MCR. После ввода этой команды вы можете программировать зоны MCR с этими командами (см. раздел 15.5). Когда ваша программа активизирует область MCR, все действия MCR зависят от содержимого стека MCR (см. рис. 15.5).
Блок 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 не является заменой аппаратного главного управляющего реле.
Включение/выключение главного управляющего реле
Включение 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 из следующего более высокого уровня.
Пример и биты слова состояния включения и выключения главного управляющего реле
<--Предыдущая статья |