|
<< 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 миллисекунд система будет приостанавливаться, а затем ФБ будет вызываться снова для обновления его выходов. Если вызывать функциональный блок без задержки, то нагрузка на исполнительную систему будет значительно увеличена, что может привести к нежелательным последствиям.
Недостаток такого подхода в том, что при длительных операциях могут произойти большие задержки в работе программ, но для быстрых операций такой подход оправдан.