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

<< Click to Display Table of Contents >>

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

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

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

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

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

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

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

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

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

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

Выход Running:

Rabota_s_asinhronnymi_FB_1

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

Выход Completed:

Rabota_s_asinhronnymi_FB_2

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

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

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

rabota_s_async_FB_2

Рассмотрим порядок работы программы представленной на рисунке:

1.Вызываем в программе функциональный блок - он начинает работать;

2.В следующей строке мы сбрасываем значение запускающего входа RUN;

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

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