Отсутствие данных

Просмотр 15 сообщений - с 31 по 45 (из 47 всего)
  • Автор
    Сообщения
  • #20422
    OlegSol
    Участник

    Ну попробуйте. Почитайте всю тему. Не получилось ни у кого.
    И модуль автоуправления позволяет задержки выставить.

    • Этот ответ был изменен 2 года, 8 месяцев назад от OlegSol.
    #20423
    OlegSol
    Участник

    Ну допустим 6-ти каналам

    #20425
    Romiros
    Участник

    Ну попробуйте. Почитайте всю тему. Не получилось ни у кого.

    Не знаю, у меня получилось.

    Ну допустим 6-ти каналам

    Вы хотите универсальную формулу или с фиксированными номерами каналов?

    #20426
    manjey73
    Участник

    Наверное было бы оптимально сделать пару формул в справочнике.
    Например вместо формулы как таковой создать Словарь (Dictionary) в котором прописать номера всех каналов со значением например требуемого статуса.

    И формулу для дорасчетного канала, которым вы контролируете 0 или 1 и вызывать не SetStat а именно эту формулу, которая будет брать номера каналов из словаря и записывать в них статус, противоположный, указанному в словаре… то есть если был 0, то записать 1, если 1 то записать 0.
    Словарь можно в цикле прогнать.
    Ну или Список (List) использовать…

    Тогда формулу можно будет только для одного канала всего сделать.

    Вообще бы увидеть настройки Модуля автоуправления, что у вас там…
    То есть понять сам процесс, как вы добились изменения статуса…

    #20427
    OlegSol
    Участник

    Мне просто нужна формула для канала управления, передающий во входные каналы 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

    Но тут теряется задержка, как в модуле автоуправления

    #20428
    Romiros
    Участник

    Это реализуемо. Уточните зачем нужна задержка и насколько? Может использовать минутный канал?

    #20429
    a80808
    Участник

    Ну вот например для фиксированных каналов (сразу извиняюсь за возможные ошибки — проверить не на чем).
    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)

    Быстро и просто 🙂 прошу сильно не бить 🙂

    #20430
    a80808
    Участник

    Уже вижу, что точку с запятой везде забыл 🙂

    #20431
    a80808
    Участник

    public double SetStat99(stat)
    {
    int i=0;
    for (i = 101; i <= 106; i++)
    {
    SetStat(i,stat);
    }
    SetStat(110,stat);
    }

    #20432
    Romiros
    Участник

    Либо так:

    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

    #20433
    OlegSol
    Участник

    Спасибо, закидали))
    Попробую все, отпишусь

    #20436
    manjey73
    Участник

    @Romiros таким образом можно, если каналов чуть-чуть.
    А если их 3-4 десятка, не говоря уже про тысячу?

    И Михаил в другой теме пишет, что это не функция ядра типа, отслеживать пропажу канала связи как от RapidGate так и от драйвера (отдельно стоящего Коммуникатора). А мне кажется как раз оно самое, функция ядра и шо потом с этим всем делать? 🙂

    • Этот ответ был изменен 2 года, 8 месяцев назад от manjey73.
    #20439
    Romiros
    Участник

    Это решение для текущей задачи.
    По идее достаточно отследить один канал, который точно меняет значения, например текущее время передающего сервера. Его статус не зависит от коммуникатора. Если он в обрыве, то уже из формулы обнулить диапазон каналов.

    #20442
    manjey73
    Участник

    Диапазон тоже не катит, так как он может быть с разрывами например.
    По идее, настраивая тот же RapidGate на принимающем сервере должна быть карта каналов, соответствующая передающим шлюзом, она должна обновляться при изменении.

    Ну и настройка что делать с данными каналами при обрыве связи, при этом задавая исключения.
    То же самое должно быть и для удаленного Коммуникатора, аналогичная настройка с исключениями.

    #20444
    Mikhail
    Модератор

    В общем случае нужно делать модуль. А для частного случая можно поискать упрощённое решение.

Просмотр 15 сообщений - с 31 по 45 (из 47 всего)
  • Вы должны авторизироваться для ответа в этой теме.