8.4. Настройка программ дорасчета
Функционал дорасчета позволяет создавать пользовательские алгоритмы в виде описания отдельных программ, которые запускаются и работают совместно с ПО сервера. Описываются программы на языке ЯРД, javascript.
Для работы и настройки служба дорасчета должна быть обязательно добавлена в структуру сервера ТМ. Максимальное количество программ которые можно создать ограничено количеством в 69 программ.
Для перехода в окно настройки программ дорасчета необходимо необходимо на странице настройки выбрать пункт "Дорасчетчик TMS". Вкладка появляется только после того, как в структуру сервера будет добавлен компонент "Дорасчет".
Окно настройки программ дорасчета
Для добавления новой программы необходимо на уровне главного каталога нажать кнопку
и добавить новый скрипт, предварительно задав ему имя. Все изменения сохраняются после нажатия на кнопку 
Каждый созданный скрипт может быть запущен в режиме отладки
для просмотра выполнения скрипта, проверки ошибок синтаксиса, выполнения скрипта без занесения в базу данных, трассировки.
Проверка синтаксиса программы дорасчета
Тест программы дорасчета
Язык ЯРД — это специализированный скриптовый язык для автоматизации расчетов, обработки телеметрии и создания вторичных (дорасчетных) параметров в режиме реального времени.
1. Основные характеристики
· Назначение: вычисление «виртуальных» датчиков (суммирование мощности, расчет потерь и т.д.).
· Регистр: нечувствителен к регистру (А = а).
· Язык: допустимо использование кириллицы.
· Комментарии: любой текст после точки с запятой (;) игнорируется системой.
· Типы данных: используется только число с плавающей запятой.
o Для Телесигналов (ТС): 0 = ОТКЛ, любое другое значение = ВКЛ (1).
2. Способы применения
А. «Выражение» в описателях ТС и ТИ
Однострочная формула для конкретного параметра.
· максимальная эффективность.
· расчет запускается мгновенно при изменении любой входящей переменной.
Б. Программа в списке дорасчетчика
Многострочный скрипт, выполняющийся последовательно в бесконечном цикле.
· Есть ограничение: не более 60 программ одновременно.
· Расчет начинается автоматически при запуске сервера.
⚠️ ВАЖНО: В версиях ПО до 2026 года программы могут потреблять 100% ресурсов процессора, так как выполняются без пауз. Необходимо использовать специальную функцию паузы для соблюдения баланса между скоростью реакции и загрузкой системы. (В версиях с 2026 г. частота без указания пауз— 1 раз в секунду).
3. Синтаксис обращения к параметрам
Обращение к данным в базе сервера строится по строгому шаблону:
#[Тип][Канал]:[КП]:[Номер]
|
Тип
|
Префикс
|
Пример записи
|
Описание
|
|
Телесигнал
|
#TC
|
#TC0:10:25
|
Канал 0, КП 10, ТС №25
|
|
Телеизмерение
|
#TT
|
#TT0:10:25
|
Канал 0, КП 10, ТИ №25
|
4. Примеры использования
Пример 1. Логика для Телесигналов (ТС)
Используется для создания собирательных сигналов.
· Задача: Включить ТС (0:1:4), если включен хотя бы один из трех (0:1:1, 0:1:2 или 0:1:3).
· Выражение (в ТС 0:1:4): #TC0:1:1 + #TC0:1:2 + #TC0:1:3
· Программа дорасчета: #TC0:1:4 = #TC0:1:1 + #TC0:1:2 + #TC0:1:3
💡 Если поменять операцию плюс на умножить ( #TC0:1:1 * #TC0:1:2 * #TC0:1:3 ) то получим результат «1» будет только если все три сигнала равны «1».
Пример 2. Операции с Телеизмерениями (ТИ)
· Суммирование: #TT0:1:4 = #TT0:1:1 + #TT0:1:2
· Сложные условия: #TT0:1:4 = #TC0:1:1 * (#TT0:1:1 + #TT0:1:2)
(Сумма запишется в результат только если ТС 0:1:1 включен, иначе результат будет 0).
💡 Математика: Поддерживаются операции +, -, *, / и круглые скобки () для задания приоритета.
⚠️ Внимание: Деление на ноль приводит к ошибке расчета!
5. Работа с недостоверными значениями
По умолчанию: если хотя бы один параметр в формуле недостоверен, весь результат помечается как недостоверный.
Для обхода этого правила используются фигурные скобки {} после адреса параметра:
|
Запись
|
Описание действия при недостоверности
|
|
#TT0:1:1{10}
|
Использовать фиксированное число (например, 10)
|
|
#TT0:1:1{#TT0:1:2/2}
|
Использовать вычисляемую формулу (например, половину другого ТИ)
|
|
#TT0:1:1{}
|
Использовать последнее достоверное значение (игнорировать признак ошибки)
|
Совет: Чтобы полностью игнорировать недостоверность в сложных выражениях, добавляйте пустые скобки {} ко всем переменным:
#TT0:1:4 = #TT0:1:1{} + #TT0:1:2{}
Пример для закрепления материала – нужно вычислить среднее значение из трех.
Для вычисления среднего арифметического трех значений с полным игнорированием их недостоверности (использованием последних известных достоверных данных) используйте пустые фигурные скобки {} для каждого параметра.
Формула для «Выражения»:
(#TT0:1:1{}+#TT0:1:2{}+#TT0:1:3{})/3
Формула для «Программы дорасчета»:
#TT0:1:4 = (#TT0:1:1{}+#TT0:1:2{}+#TT0:1:3{})/3
Почему это важно:
1. Скобки (): Обязательны, чтобы деление на 3 применилось к сумме всех элементов, а не только к последнему.
2. Фигурные скобки {}: Гарантируют, что расчет не «упадет» в статус «недостоверно», если один из датчиков временно пропал из связи. Будет взято его последнее сохраненное значение.
6. Приемы и «хитрости» программирования
А. Организация счетчика циклов
Вы можете использовать значение параметра для изменения его же самого. Это полезно, например, для подсчета количества итераций (циклов), которые выполнила программа дорасчета.
· Пример: #TT0:1:4 = #TT0:1:4 + 1
(На каждом шаге значение в ТИ 0:1:4 будет увеличиваться на единицу).
Б. Программная установка признака недостоверности
Иногда требуется принудительно пометить результат расчета как «недостоверный» при определенных условиях. Поскольку в ЯРД нет прямой команды «сделать недостоверным», используется метод «умножения на ошибку».
Алгоритм:
1. Выберите в базе адрес, который не обновляется извне (например, #TT100:1:1).
2. Вручную установите ему значение 1 и включите флаг «Недостоверно».
3. Используйте его в формуле:
1. Пример: #TT0:1:4 = #TT0:1:4 * #TT100:1:1
2. Результат: Значение параметра останется прежним (умножение на 1), но системный признак недостоверности «пробросится» в целевой параметр.
Важное замечание: Помните, что в программах дорасчета (в отличие от «выражений») выполнение происходит циклично и очень быстро. Без использования функции паузы счетчик в примере «А» будет расти со скоростью работы процессора.
7. Управление скоростью выполнения (Пауза)
Для программ дорасчета критически важно использовать функцию SLEEP. Без неё программа будет выполняться максимально быстро, нагружая процессор до 100% (актуально для версий до 2026 года).
· Формат: SLEEP(миллисекунды)
· Синтаксис: записывается в отдельной строке.
· Пример: SLEEP(1000) — пауза в 1 секунду между циклами.
Практический пример: корректный счетчик
Если нужно, чтобы счетчик в параметре #TT0:1:4 увеличивался строго один раз в секунду, программа должна выглядеть так:
#TT0:1:4 = #TT0:1:4 + 1
SLEEP(1000) ; пауза 1000 мс (1 сек) перед следующим циклом
Рекомендация: Всегда добавляйте SLEEP в конец программы дорасчета, чтобы обеспечить баланс между скоростью реакции и загрузкой системы.
Особенности работы дорасчетных программ (версии 2026+)
В актуальных версиях ПО «ОИК Диспетчер НТ» изменены алгоритмы защиты процессора от перегрузки при работе программ дорасчета.
· Автоматическая пауза: Если в тексте программы отсутствует команда SLEEP, система принудительно устанавливает паузу в 1 секунду между циклами. Это предотвращает 100% загрузку ядер процессора некорректно написанными скриптами.
· Высокоскоростной режим: Если логика требует максимально быстрого выполнения (чаще одного раза в секунду), необходимо явно прописать минимально возможную задержку.
o Пример: SLEEP(1) — выполнение программы с паузой в 1 миллисекунду.
💡 Рекомендация: Для большинства технологических задач (расчет суммарной мощности, средних значений и т.д.) стандартной автоматической паузы в 1 секунду достаточно.
8. Математические функции ЯРД
Все функции принимают в качестве аргумента (x) произвольное выражение, число или адрес телепараметра.
Тригонометрические функции
|
Функция
|
Описание
|
Функция
|
Описание
|
|
SIN(x)
|
Синус
|
SINH(x)
|
Синус гиперболический
|
|
COS(x)
|
Косинус
|
COSH(x)
|
Косинус гиперболический
|
|
TAN(x)
|
Тангенс
|
TANH(x)
|
Тангенс гиперболический
|
|
ASIN(x)
|
Арксинус
|
ASINH(x)
|
Арксинус гиперболический
|
|
ACOS(x)
|
Арккосинус
|
ACOSH(x)
|
Арккосинус гиперболический
|
|
ATAN(x)
|
Арктангенс
|
ATANH(x)
|
Арктангенс гиперболический
|
Общие математические функции
· ABS(x) — абсолютное значение (модуль).
· SQRT(x) — корень квадратный.
· SQR(x) — возведение в квадрат (x*x).
· POW10(x) — возведение числа 10 в степень .
· EXP(x) — экспонента (число e в степени x).
· LOG(x) / LOG10(x) — логарифм натуральный / десятичный.
· MOD(x, y) — остаток от деления x на y.
Функции округления
· ROUND(x) — математическое округление до ближайшего целого.
· TRUNC(x) — отбрасывание дробной части (усечение).
Примеры использования функций
1. Округление данных:
#TT0:1:4 = ROUND(#TT0:1:1) — в результат запишется целое число.
2. Расчет модуля разности:
#TT0:1:4 = ABS(#TT0:1:1 - #TT0:1:2)
3. Использование остатка от деления:
#TT0:1:5 = MOD(#TT0:1:1, 10)
Совет: При использовании вложенных функций, например ROUND(SQRT(#TT0:1:1)), следите за парностью закрывающих скобок.
9. Побитовые функции
Эти функции позволяют выполнять логические операции на уровне отдельных битов числа.
Механизм работы:
1. Входящие значения (числа с плавающей точкой) преобразуются в целое число.
2. Выполняется побитовая операция.
3. Результат преобразуется обратно в число с плавающей точкой.
|
Функция
|
Операция
|
Описание
|
|
AND(x, y)
|
Логическое И
|
Результат 1 только если соответствующие биты в обоих числах равны 1.
|
|
OR(x, y)
|
Логическое ИЛИ
|
Результат 1 если хотя бы один соответствующий бит равен 1.
|
|
XOR(x, y)
|
Исключающее ИЛИ
|
Результат 1 только если соответствующие биты в числах разные.
|
Примеры использования:
· Проверка конкретного бита (маскирование):
#TC0:1:4 = AND(#TT0:1:1, 2) — если в параметре 0:1:1 установлен второй бит (значение 2), результат будет отличным от нуля.
· Объединение состояний:
#TT0:1:5 = OR(#TT0:1:1, #TT0:1:2) — объединяет битовые флаги двух разных параметров в один.
Совет: Побитовые функции особенно полезны в программах дорасчета для анализа сложных сигналов, приходящих от микропроцессорных защит (МП РЗА).
10. Функции телемеханики (Прямая адресация)
Эти функции являются альтернативой записи через решетку (#) и позволяют более гибко работать с базой данных, включая доступ к архивным значениям.
|
Функция
|
Аналог
|
Описание
|
|
STATUS(к, кп, о)
|
#TCк:кп:о
|
Чтение текущего значения телесигнала.
|
|
ANALOG(к, кп, о)
|
#TTк:кп:о
|
Чтение текущего значения телеизмерения.
|
|
ANALOG(к, кп, о, T)
|
—
|
Чтение значения ТИ из ретроспективы (архива) на момент времени T.
|
Особенности использования:
1. Динамика: Использование функций вместо статических адресов (например, в будущих версиях ПО) может позволить вычислять адреса параметров внутри формул.
2. Ретроспектива: Функция ANALOG с четырьмя аргументами — единственный способ в ЯРД получить значение параметра, которое было в прошлом. Это критично для расчетов приращений (например, расход за час).
Примеры:
· Текущее значение:
#TT0:1:10 = ANALOG(0, 1, 5) — скопирует значение из ТИ 0:1:5 в ТИ 0:1:10.
· Работа с архивом (схематично):
#TT0:1:20 = ANALOG(0, 1, 5) - ANALOG(0, 1, 5, T_PAST) — расчет разности между текущим и архивным значением.
11. Работа с временем (Unix-time)
Для доступа к архивным данным через функцию ANALOG(к, кп, о, время) используется формат Unix-time (количество секунд с 1 января 1970 года).
Системная переменная UTIME
В языке ЯРД зарезервировано специальное имя UTIME, которое автоматически обновляется и содержит текущее время сервера. Это позволяет легко вычислять интервалы для ретроспективы.
|
Переменная
|
Описание
|
|
UTIME
|
Текущее время в секундах (Unix-формат).
|
Примеры расчетов с ретроспективой:
1. Значение параметра 1 час назад:
#TT0:1:10 = ANALOG(0, 1, 5, UTIME - 3600)
(3600 — это 60 минут х 60 секунд).
2. Значение параметра 24 часа назад:
#TT0:1:10 = ANALOG(0, 1, 5, UTIME - 86400)
(86400 — количество секунд в сутках).
3. Расчет приращения за последние 15 минут:
#TT0:1:10 = ANALOG(0, 1, 5) - ANALOG(0, 1, 5, UTIME - 900)
(Текущее значение минус значение 900 секунд назад).
12. Функции разбора времени (Декомпозиция)
Эти функции принимают на вход время в формате Unix (например, системную переменную UTIME) и возвращают отдельные числовые составляющие даты и времени.
|
Функция
|
Возвращаемое значение
|
Диапазон
|
|
UT_YEAR(x)
|
Год
|
Например, 2024
|
|
UT_MONTH(x)
|
Месяц
|
1 — 12
|
|
UT_DAY(x)
|
День месяца
|
1 — 31
|
|
UT_HOUR(x)
|
Час
|
0 — 23
|
|
UT_MINUTE(x)
|
Минуты
|
0 — 59
|
|
UT_SECOND(x)
|
Секунды
|
0 — 59
|
Практический пример: запись текущего времени в телеизмерения
Если необходимо разложить текущее серверное время по отдельным ТИ:
#TT1:1:1 = UT_YEAR(UTIME) ; Текущий год
#TT1:1:2 = UT_MONTH(UTIME) ; Текущий месяц
#TT1:1:3 = UT_DAY(UTIME) ; Число
#TT1:1:4 = UT_HOUR(UTIME) ; Час
#TT1:1:5 = UT_MINUTE(UTIME) ; Минуты
#TT1:1:6 = UT_SECOND(UTIME) ; Секунды
13. Логические функции и операторы сравнения
Язык ЯРД позволяет вычислять логические условия. Результатом такой функции всегда является 1 (Истина) или 0 (Ложь).
А. Функции сравнения с нулем
Эти функции проверяют результат выражения x относительно нуля:
|
Функция
|
Условие истинности (1)
|
Описание
|
|
_EQ(x)
|
X = 0
|
Равно нулю
|
|
_GT(x)
|
|
Строго больше нуля
|
|
_GE(x)
|
|
Больше или равно нулю
|
|
_LT(x)
|
|
Строго меньше нуля
|
|
_LE(x)
|
|
Меньше или равно нулю
|
Б. Операторы сравнения двух величин
Имеют более высокий приоритет, чем функции выше. Используются для прямого сравнения двух выражений или параметров:
· A > B — больше
· A < B — меньше
· A >= B — больше или равно
· A <= B — меньше или равно
· A = B — равно
· A <> B — не равно
Примеры логических схем:
1. Проверка диапазона:
#TC0:1:10 = (#TT0:1:1 > 10) * (#TT0:1:1 < 20)
(Сигнал станет «1», если значение ТИ находится в интервале от 10 до 20).
2. Сработка по порогу:
#TC0:1:11 = _GT(#TT0:1:5 - 100)
(Сигнал станет «1», если значение ТИ 0:1:5 превысит 100).
14. Условные выражения (Ветвление)
В языке ЯРД реализованы два типа сокращенных условий, которые позволяют выбирать результат вычисления в зависимости от значения контрольного параметра.
А. Полное ветвление (Трехпозиционное)
Используется для проверки знака числа (положительное, ноль или отрицательное).
Синтаксис: ?x1; x2; x3; x4
|
Условие на x1
|
Результат вычисления выражения
|
x1>0
|
x2
|
x1=0
|
x3
|
x1<0
|
x4
|
Пример: #TT0:1:5 = ?#TT0:1:1; 100; 0; -100
(Если параметр 0:1:1 положителен, запишем 100; если равен нулю — 0; если отрицателен — -100).
Б. Сокращенное ветвление (Двухпозиционное)
Аналог классического тернарного оператора (Истина/Ложь).
Синтаксис: x1? x2: x3
|
Условие на x1
|
Результат вычисления выражения
|
 x1>0
|
x2
|
 x1=0
|
x3
|
Пример: #TC0:1:10 = (#TT0:1:1 > 50)? 1: 0
(Если значение больше 50, взводим телесигнал в 1, иначе в 0).
Примечание
Рекомендуется использовать скобки для наглядности.
15. Переменные и идентификаторы
В программах дорасчета вы можете использовать собственные переменные для хранения промежуточных результатов.
Правила именования (Идентификаторы):
· Символы: Русские и латинские буквы, цифры.
· Начало имени: Только с буквы.
· Длина: Не более 16 символов.
· Регистр: Не имеет значения (переменная Ток и ТОК — это одно и то же).
· Ограничение: Не рекомендуется использовать имена из двух латинских букв (например, AA) или комбинации «буква + цифра» (например, A1), чтобы избежать конфликтов с внутренними командами системы.
· Примеры имен: Частота, Приращение_1, ErrorCount.
Системные (предопределенные) переменные:
Эти переменные зарезервированы системой и содержат актуальную информацию о времени и состоянии комплекса:
|
Переменная
|
Описание
|
Формат / Значение
|
|
UTIME
|
Текущее время сервера
|
Секунды с 01.01.1970 (Unix-time)
|
|
ДАТА
|
Текущая дата
|
Количество дней с 01.01.1970
|
|
ВРЕМЯ
|
Текущее время суток
|
Количество минут от 00:00 текущего дня
|
|
RSRV
|
Роль сервера в кластере
|
0 — основной, 1 — резервный
|
|
RSSCON
|
Статус связи серверов
|
1 — связь есть, 0 — связи нет
|
Пример использования переменных:
Delta = #TT0:1:5 - #TT0:1:6 ; Сохраняем разность в переменную Delta
#TT1:1:1 = Delta * 0.5 ; Используем переменную в расчете
#TC1:1:2 = RSRV ; Передаем статус сервера в телесигнал
17. Условный оператор IF...THEN (для программ дорасчета)
В отличие от условного выражения ?x1; x2; x3; x4, которая возвращает значение, оператор IF...THEN управляет выполнением целого выражения в теле программы.
Синтаксис:
IF условие THEN действие
· Условие: выражение, результат которого проверяется.
· Действие: команда (обычно присваивание), которая будет выполнена, только если условие > 0.
Допустимые знаки отношений в условии:
· > (больше)
· < (меньше)
· >= (больше или равно)
· <= (меньше или равно)
· = (равно)
· <> (не равно)
· ⚠️ ВНИМАНИЕ! В языке ЯРД недопустимы вложенные операторы условного перехода. Конструкции вида IF ... THEN IF ... THEN ... работать не будут. Если требуется проверить несколько условий подряд, используйте последовательные строки или логическое умножение условий в одной строке.
Примеры использования:
1. Сработка защиты или сигнализации:
IF #TT0:1:1 > 100 THEN #TC0:1:10 = 1
(Если значение превысило 100, принудительно включаем телесигнал. Если значение
, команда после THEN просто игнорируется, и состояние ТС не изменится).
2. Сброс счетчика по времени:
IF UT_HOUR(UTIME) = 0 THEN #TT1:1:1 = 0
(Обнулить параметр, когда наступит полночь).
3. Безопасное деление:
IF #TT0:1:2 <> 0 THEN #TT0:1:3 = #TT0:1:1 / #TT0:1:2
(Выполнить расчет только если делитель не равен нулю, чтобы избежать ошибки).
Сравнение с функцией IF:
· Функция ?x1; x2; x3; x4 — всегда возвращает одно из значений. Удобна для формул в одну строку («Выражений»).
· Оператор IF...THEN — либо выполняет действие, либо не делает ничего. Удобен для сложных алгоритмов в программах дорасчета.
18. Метки и оператор перехода GOTO
Для управления порядком выполнения программы в дорасчетчике используются метки и команда безусловного перехода.
Синтаксис:
1. Объявление метки: Имя идентификатора, заканчивающееся двоеточием (:), в отдельной строке.
2. Команда перехода: Оператор GOTO и имя метки (без двоеточия).
Пример программы:
IF #TT0:1:1 > 100 THEN GOTO ALARM ; Переход, если значение превышено
#TC0:1:2 = 0 ; Обычный режим
GOTO FINISH ; Пропуск блока тревоги
ALARM: ; Объявление метки (двоеточие в конце)
#TC0:1:2 = 1 ; Режим тревоги
FINISH: ; Метка завершения цикла
SLEEP(1000)
⚠️ ВНИМАНИЕ! Имена меток подчиняются тем же правилам, что и идентификаторы переменных (не более 16 символов, начинаются с буквы).
19. Функции работы с флагами телемеханики
Помимо числового значения, каждый телепараметр имеет набор системных флагов. Для работы с ними используются специальные функции и константы.
Доступные константы типов (tm_type):
· TM_STATUS — для телесигналов (ТС).
· TM_ANALOG — для телеизмерений текущих (ТИТ).
· TM_ACCUM — для телеизмерений интегральных (ТИИ/счетчики).
Список основных масок флагов (flag_mask):
|
Константа
|
Описание
|
|
UNRELIABLE_HDW
|
Недостоверность аппаратная
|
|
UNRELIABLE_MANU
|
Недостоверность ручная
|
|
MANUALLY_SET
|
Значение установлено вручную
|
|
LEVEL_A, B, C, D
|
Сработала уставка 1, 2, 3 или 4 (для ТИТ)
|
|
F_ABNORMAL
|
Отличие от нормальной схемы
|
|
INVERTED
|
Сигнал инвертирован (для ТС)
|
|
TMCTRL_PRESENT
|
Наличие возможности телеуправления (для ТС)
|
А. Чтение и проверка флагов
1. GETFLAGS(tm_type, к, кп, о, flag_mask)
Возвращает сумму (маску) всех взведенных флагов из перечисленных в flag_mask.
2. GETFLAG(tm_type, к, кп, о, flag_mask)
Возвращает 1, если взведен хотя бы один из указанных флагов, иначе 0.
Пример: Проверка, является ли измерение недостоверным (аппаратно или вручную):
Error = GETFLAG(TM_ANALOG, 0, 1, 5, UNRELIABLE_HDW + UNRELIABLE_MANU)
Б. Установка и сброс флагов
SETFLAGS(tm_type, к, кп, о, set_mask, clr_mask)
Устанавливает флаги из set_mask и сбрасывает флаги из clr_mask. При успехе возвращает 1.
⚠️ ВАЖНО! Функция SETFLAGS работает только в программах дорасчета. В однострочных «выражениях» она игнорируется.
Пример: Принудительная установка флага «Аппаратная недостоверность» для ТС:
RES = SETFLAGS(TM_STATUS, 0, 1, 10, UNRELIABLE_HDW, 0)
20. Телеуправление из программ дорасчета
ЯРД позволяет регистрировать входящие команды ТУ, ожидать их поступления и инициировать выполнение новых команд (в том числе групповых).
А. Регистрация и ожидание команд
1. reg_telecontrol(id, cmd, ch, rtu, pt) — резервирует номер действия (id) для конкретной команды (1 — вкл, 0 — откл) по адресу ТС. Возвращает 1 при успехе. Максимум — 256 регистраций.
2. wait_telecontrol(ms) — приостанавливает программу до прихода зарегистрированной команды или истечения таймаута (ms).
1. Возвращает id действия, если команда пришла.
2. Возвращает большое число (больше 256), если вышел таймаут или произошла ошибка.
Б. Исполнение команд (Выдача ТУ)
exec_telecontrol(cmd, ch, rtu, pt, [wait_type]) — инициирует отправку команды на КП.
· Условие: в конфигурации ТС должно быть разрешено «неинтерактивное ТУ».
· Параметр wait_type (режимы ожидания):
o TC_NO_WAIT — не ждать результата.
o TC_WAIT_RESP_AND_LOG — ждать только подтверждения от железа (по умолчанию).
o TC_WAIT_STATUS_CHANGE — ждать реального изменения состояния ТС.
В. Пример программы группового ТУ
Программа перехватывает команду на один объект и транслирует её на группу других:
reg_telecontrol(1, 1, 1, 1, 1) ; Регистрация ВКЛ для ТС 1:1:1 (ID=1)
reg_telecontrol(2, 0, 1, 1, 1) ; Регистрация ОТКЛ для ТС 1:1:1 (ID=2)
START:
ПРИНЯТО = wait_telecontrol(10000); Ждем команду 10 секунд
IF ПРИНЯТО = 1 THEN GOTO ВКЛЮЧИТЬ; Если пришло ВКЛ
IF ПРИНЯТО = 2 THEN GOTO ОТКЛЮЧИТЬ; Если пришло ОТКЛ
GOTO START; Повтор цикла если команды не было
ВКЛЮЧИТЬ:
exec_telecontrol(1, 1, 2, 1); Включаем объект 1
exec_telecontrol(1, 1, 2, 2); Включаем объект 2
GOTO START
ОТКЛЮЧИТЬ:
exec_telecontrol(0, 1, 2, 1); Отключаем объект 1
exec_telecontrol(0, 1, 2, 2); Отключаем объект 2
GOTO START