Выполнение программы в реальном времени

Для выполнения программы в реальном времени в узле должен быть создан канал класса CALL с типом вызова Program, настроенный на вызов шаблона программы. При данном типе вызова атрибуты Параметр, Интервал выборки, а также значение канала CALL не используются (см. Атрибуты канала класса CALL ).

Подобный канал CALL типа INPUT отрабатывается со своим периодом пересчета в соответствующем потоке (см. Период пересчета канала ).

Подобный канал CALL типа OUTPUT отрабатывается при подаче 1 в его атрибут 39, EXEC. В частности, для отработки такого канала из графики можно использовать функцию управления Выполнить (см. Функции управления ГЭ ).

В атрибут 87, CC канала CALL вызова программы записывается время (в миллисекундах) между вызовами программы (см. Атрибуты каналов, отображаемые профайлером ). В атрибут 92, I2 записывается код ошибки (см. Коды диагностируемых ошибок ). Количество аргументов канала вызова программы ограничено; в случае 4-байтовых аргументов: в Windows – 1024, в DOS – 256 (т.е. под все аргументы не может быть выделено памяти больше, чем 4k в Windows и 1k в DOS – см. Определение переменных и констант ).

Если атрибут Параметр (34, FPrint) канала вызова программы (prog) равен n>0, и аргументы программы привязаны к атрибутам 0,R или 9,Q каналов класса CALL (calli), каждый из которых имеет n аргументов:

   если prog.A=0, на каждом такте пересчета монитор выполняет программу n раз, при каждом выполнении передавая в программу значения очередных аргументов argk (k=0,…,n-1) каналов calli;

   если prog.A=m>0, предполагается, что в программе имеются 2 фрагмента, которые альтернативно обрабатывают одни и те же данные, получаемые от каналов calli. Монитор также выполняет программу n раз на каждом такте пересчета, но при каждом выполнении задействует только один из фрагментов в зависимости от prog.R (12-битовое число):

   каждый из 8-ми младших битов (b=0…7) prog.R управляет выполнением с номером b. Если бит равен 0, выполняется фрагмент, связанный с первыми m аргументами, в противном случае – с последними n-m аргументами;

   если n>8, биты 8…11 prog.R циклически управляют выполнениями с номерами, большими или равными 8.

Ниже показан пример двух фрагментов в программе (к ARG_000 и ARG_003 привязан call1, к ARG_001 и ARG_004 привязан call2, к ARG_002 и ARG_005 привязан один и тот же канал-результат):

ARG_002=ARG_001+ARG_000

ARG_005=ARG_004-ARG_003