Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Отсутствие данных
Помечено: Быстрый шлюз, Формулы
- В этой теме 46 ответов, 5 участников, последнее обновление 2 года, 8 месяцев назад сделано Mikhail.
-
АвторСообщения
-
28.07.2021 в 14:06 #20422OlegSolУчастник
Ну попробуйте. Почитайте всю тему. Не получилось ни у кого.
И модуль автоуправления позволяет задержки выставить.- Этот ответ был изменен 2 года, 8 месяцев назад от OlegSol.
28.07.2021 в 14:07 #20423OlegSolУчастникНу допустим 6-ти каналам
28.07.2021 в 14:30 #20425RomirosУчастникНу попробуйте. Почитайте всю тему. Не получилось ни у кого.
Не знаю, у меня получилось.
Ну допустим 6-ти каналам
Вы хотите универсальную формулу или с фиксированными номерами каналов?
28.07.2021 в 14:34 #20426manjey73УчастникНаверное было бы оптимально сделать пару формул в справочнике.
Например вместо формулы как таковой создать Словарь (Dictionary) в котором прописать номера всех каналов со значением например требуемого статуса.И формулу для дорасчетного канала, которым вы контролируете 0 или 1 и вызывать не SetStat а именно эту формулу, которая будет брать номера каналов из словаря и записывать в них статус, противоположный, указанному в словаре… то есть если был 0, то записать 1, если 1 то записать 0.
Словарь можно в цикле прогнать.
Ну или Список (List) использовать…Тогда формулу можно будет только для одного канала всего сделать.
Вообще бы увидеть настройки Модуля автоуправления, что у вас там…
То есть понять сам процесс, как вы добились изменения статуса…28.07.2021 в 14:55 #20427OlegSolУчастникМне просто нужна формула для канала управления, передающий во входные каналы 101,102,103,104,105,106,110 статус 0
Пока смог сделать только для 1-го вх. канала
Cnl==0? SetStat(101,0):SetStat(101,1)Либо, если исключить модуль автоуправления , при значении «0» входного канала 111 ,передать во входные каналы 101,102,103,104,105,106,110 статус 0
Но тут теряется задержка, как в модуле автоуправления
28.07.2021 в 15:04 #20428RomirosУчастникЭто реализуемо. Уточните зачем нужна задержка и насколько? Может использовать минутный канал?
28.07.2021 в 15:20 #20429a80808УчастникНу вот например для фиксированных каналов (сразу извиняюсь за возможные ошибки — проверить не на чем).
1. В таблицу «Формулы» добавляем что то типа:
1.1 Первая формула статус в ноль:
public double SetStat990()
{
int i=0;
for (i = 101; i <= 106; i++)
{
SetStat(i,0)
}
SetStat(110,0)
}1.2 Вторая формула статус в один:
public double SetStat991()
{
int i=0;
for (i = 101; i <= 106; i++)
{
SetStat(i,1)
}
SetStat(110,1)
}2. В формуле канала 111 пишем:
Cnl==0? SetStat990():SetStat991()Ясно что не оптимально и при желании можно все сделать одной формулой, например:
public double SetStat99(stat)
{
int i=0;
for (i = 101; i <= 106; i++)
{
SetStat(i,stat)
}
SetStat(110,stat)
}А в канале 111 написать
Cnl==0? SetStat99(0):SetStat99(1)Быстро и просто 🙂 прошу сильно не бить 🙂
28.07.2021 в 15:21 #20430a80808УчастникУже вижу, что точку с запятой везде забыл 🙂
28.07.2021 в 15:22 #20431a80808Участникpublic double SetStat99(stat)
{
int i=0;
for (i = 101; i <= 106; i++)
{
SetStat(i,stat);
}
SetStat(110,stat);
}28.07.2021 в 15:31 #20432RomirosУчастникЛибо так:
1. В таблицу «Формулы» добавляем
public double SetUndef(params int[] cnlNums)
{
foreach(int cnlNum in cnlNums)
{
if(Stat(cnlNum)==5)
{
SetStat(cnlNum,0);
}
}
return 1;
}В дорасчетном канале в формуле пишем:
SetUndef(101,102,103,104,105,106,110)каждый канал будет проверяться на статус 5 и ставится в 0
28.07.2021 в 15:38 #20433OlegSolУчастникСпасибо, закидали))
Попробую все, отпишусь28.07.2021 в 17:17 #20436manjey73Участник@Romiros таким образом можно, если каналов чуть-чуть.
А если их 3-4 десятка, не говоря уже про тысячу?И Михаил в другой теме пишет, что это не функция ядра типа, отслеживать пропажу канала связи как от RapidGate так и от драйвера (отдельно стоящего Коммуникатора). А мне кажется как раз оно самое, функция ядра и шо потом с этим всем делать? 🙂
- Этот ответ был изменен 2 года, 8 месяцев назад от manjey73.
28.07.2021 в 17:39 #20439RomirosУчастникЭто решение для текущей задачи.
По идее достаточно отследить один канал, который точно меняет значения, например текущее время передающего сервера. Его статус не зависит от коммуникатора. Если он в обрыве, то уже из формулы обнулить диапазон каналов.28.07.2021 в 17:58 #20442manjey73УчастникДиапазон тоже не катит, так как он может быть с разрывами например.
По идее, настраивая тот же RapidGate на принимающем сервере должна быть карта каналов, соответствующая передающим шлюзом, она должна обновляться при изменении.Ну и настройка что делать с данными каналами при обрыве связи, при этом задавая исключения.
То же самое должно быть и для удаленного Коммуникатора, аналогичная настройка с исключениями.29.07.2021 в 15:55 #20444MikhailМодераторВ общем случае нужно делать модуль. А для частного случая можно поискать упрощённое решение.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.