|
<< Click to Display Table of Contents >> Navigation: Программирование в MasterSCADA 4D > Важно знать > Работа с асинхронными ФБ |
Особенность асинхронных функциональных блоков в том, что они исполняются независимо от других задач. У подобных ФБ есть вход Run (или другой, подходящий по смыслу), который запускает его работу и выходы, которые сигнализируют о том, что ФБ завершил свою работу. Возможные специальные выходы асинхронных ФБ:
•Running/Building - принимает значение TRUE, пока выполняется запрошенная операция.
•Completed/Done - принимает значение TRUE на один такт, после того как ФБ завершил свою работу.
•State - меняеn свое значение в зависимости от состояния ФБ
Асинхронные функциональные блоки могут обладать как обоими выходами, так и только одним из них. Если необходимо использовать результат работы блока на том же цикле, на котором и поступили данные на вход или запустить исполнение других программ после исполнения этого блока, нужно использовать в программах эти специальные выходы.
Чаще всего асинхронные ФБ используются в программах FBD, у которых в настройке Способ исполнения установлено значение Периодический. Рассмотрим примеры использования специальных выходов.
Выход Running:

В данном случае программа со всеми ФБ работает периодически (см. Способ исполнения), функциональный блок F_TRIG следит за задним фронтом выхода Running асинхронного блока SysProcessCreateWithResultAsync и после того, как он завершит свою программу будет вызвана другая программа проекта.
Выход Completed:

На схеме видно, что после того, как сообщение будет получено в блоке READ_SMS запустится функциональный блок STRING_TO_OBJECT
Рассмотрим пример, когда функциональный блок необходимо включать в работу по вызову (см. Способ исполнения). Если необходимо получить результат вычисления на том же цикле, на котором был запущен функциональный блок, то можно использовать следующий прием в программе ST:

Рассмотрим порядок работы программы представленной на рисунке:
1.Вызываем в программе функциональный блок - он начинает работать;
2.В следующей строке мы сбрасываем значение запускающего входа RUN;
3.Далее, до тех пор пока выход функционального блока Completed не примет значение TRUE, на 10 миллисекунд система будет приостанавливаться, а затем ФБ будет вызываться снова для обновления его выходов. Если вызывать функциональный блок без задержки, то нагрузка на исполнительную систему будет значительно увеличена, что может привести к нежелательным последствиям.
Недостаток такого подхода в том, что при длительных операциях могут произойти большие задержки в работе программ, но для быстрых операций такой подход оправдан.