Работа с асинхронными ФБ

<< Click to Display Table of Contents >>

Navigation:  Программирование в MasterSCADA 4D > Важно знать >

Работа с асинхронными ФБ

Особенность асинхронных функциональных блоков в том, что они исполняются независимо от других задач. У подобных ФБ есть вход Run (или другой, подходящий по смыслу), который запускает его работу и выходы, которые сигнализируют о том, что ФБ завершил свою работу. Возможные специальные выходы асинхронных ФБ:

Running/Building - принимает значение TRUE, пока выполняется запрошенная операция.

Completed/Done - принимает значение TRUE на один такт, после того как ФБ завершил свою работу.

State - меняеn свое значение в зависимости от состояния ФБ

Асинхронные функциональные блоки могут обладать как обоими выходами, так и только одним из них. Если необходимо использовать результат работы блока на том же цикле, что и поступили данные на вход или запустить исполнение других программ после исполнения этого блока, нужно в программах использовать эти специальные выходы.

Примеры использования

Рассмотрим несколько примеров.

Способ исполнения - Периодически

Чаще всего асинхронные ФБ используются в программах FBD, у которых в настройке Способ исполнения установлено значение Периодически. Рассмотрим примеры использования специальных выходов.

Выход Running:

rabota_s_async_FB

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

Выход Completed:

rabota_s_async_FB_1

На схеме видно, что после того, как сообщение будет получено в блоке READ_SMS запустится функциональный блок STRING_TO_OBJECT

Способ исполнения - По вызову

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

rabota_s_async_FB_2

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

Недостаток такого подхода в том, что при длительных операциях могут произойти большие задержки в работе программ, но для быстрых операций такой подход оправдан.