Перехват команды сервером

Стартовая страница Форумы Разработка и интеграция Перехват команды сервером

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Записи
  • #38265
    akofor@mail.ru
    Участник

    Разрабатываю логический модуль, идея, чтобы он перехватывал команды, поступающие на сервер, и умножал значение команды на 200 до того, как она поступит на канал.
    Сделал вот так:
    public override void OnCommand(TeleCommand command, CommandResult commandResult)
    {
    int cn = command.CnlNum;
    double cv = command.CmdVal;

    if (cn == _config.SetFreqChannel)
    {
    command.CmdVal = cv * 200;
    }
    }

    Однако значение самой команды, приходящей на канал, не меняется (что было ожидаемо). Можно, конечно, отправить вторую команду следом за первой, но тогда хотелось бы отменить отправку первой. Возможно ли как то реализовать подобное?

    #38266
    manjey73
    Участник

    Зачем для этого логический модуль ? Это делается выходной формулой

    #38267
    akofor@mail.ru
    Участник

    Не могли бы вы привести пример формулы? Было бы хорошо найти актуальную документацию по формулам, потому что я находил только какую-то старую…

    #38268
    akofor@mail.ru
    Участник

    Зачем для этого логический модуль ? Это делается выходной формулой

    А вообще, решил сделать так, чтобы при настройке новых проектов использовать старый модуль и не настраивать отдельно каналы

    #38269
    manjey73
    Участник

    Я сделал такие формулы в таблицу скриптов

    public double CheckComm(double min, double max, double mult, string str = "" )
    {
    if (Cmd < min || Cmd > max) throw new Exception($"Значение должно быть в пределах {min} - {max} {str}");
    return Cmd*mult;
    }
    
    public double CheckComm1(double min, double max, string str = "" )
    {
    if (Cmd < min || Cmd > max) throw new Exception($"Значение должно быть в пределах {min} - {max} {str}");
    return Cmd;
    }

    Если требуется с множителем или без
    В канале указываю в таком виде
    входная Cnl/10
    выходная CheckComm(16, 32, 10, «градусов»)

    Если без контроля то просто Cmd*10 или Cmd*200

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

    Актуальная документация по формулам https://rapidscada.net/docs/ru/latest/configuration/scripts

    Выходная формула очень простая и написана в предыдущем сообщении.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Для ответа в этой теме необходимо авторизоваться.