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