Подстановка значения в переменную

Просмотр 15 сообщений - с 16 по 30 (из 59 всего)
  • Автор
    Сообщения
  • #25367
    fergus2022
    Участник

    » Если значение нужно установить в 105 канал, тогда SetVal(105, Сmd). » — поменял, всё равно в переменную 105 «Znach» ничего не приходит. Я правильно вообще по каналам то сделал ?
    >скриншот раз<
    >скриншот два<

    #25368
    fergus2022
    Участник

    105 заменил на 201 в формуле, все равно не работает

    #25369
    Romiros
    Участник

    Какое значение нужно получить в канале 201 от переключателя? Возможно нужно написать в формуле cmd+1. Лучше делайте каналы в которые нужно отправить значение и каналы управления с одинаковыми номерами, тогда можно использовать CnlNum в формуле.

    #25370
    manjey73
    Участник

    @fergus2022 во входном канале необходимо указывать, какой канал выходной

    #25371
    fergus2022
    Участник

    Есть допустим 3 канала входных. И сегодня:
    1 канал — датчик температуры (значение с него)
    2 канал — датчик давления
    3 канал — датчик расхода.
    Завтра приборы переподключат к примеру и станет вот так:
    1 канал — датчик давления
    2 канал — датчик температуры.
    Соответственно в скаде нужно поменять отображение данных, чтобы если на 1-ом канале стоит датчик температуры, то и в скаде в графе «температура» отбражались данные с 1-го канала. Как это реализовать ?

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

    #25372
    fergus2022
    Участник

    Какое значение нужно получить в канале 201 от переключателя?

    Переключатель должен подставлять цифры от » 101 TEG1 или от 102 TEG2 или от 103 TEG3 » в виртуальную переменную 201 «znach» и эта переменная будет отображаться в скаде. Для каждого тега свой переключатель.
    Выше я описал всю задачу. Можно и не переключателем. Было бы удобнее раскрывающийся список сделать как здесь: >скриншот<

    • Этот ответ был изменен 1 год, 5 месяцев назад от fergus2022.
    #25374
    manjey73
    Участник

    Вы можете в расчетном канале сделать перечисление
    Температура; Давление; Расход — это будут значения 0, 1 и 2
    Соответственно использовать данное перечисление и для команды

    В другом дорасчетном канале использовать формулу, если 0, то вытянуть Температуру, если 1 то давление, если 2 то Расход

    Правда вам придется отключить в этом канале единицы измерения.

    #25375
    fergus2022
    Участник

    Вы можете в расчетном канале сделать перечисление
    Температура; Давление; Расход — это будут значения 0, 1 и 2
    Соответственно использовать данное перечисление и для команды

    как это делается ? Я пока вообще не понимаю что тут зачем и куда в этой скаде..

    • Этот ответ был изменен 1 год, 5 месяцев назад от fergus2022.
    #25379
    fergus2022
    Участник

    selectCnlNum105 — так правильно ? (из формулы на первой странице этой темы)
    или надо вот так selectCnl105 ?

    #25381
    fergus2022
    Участник

    когда в справочник «формулы» добавляю

    public double MyTemp(int selectCnl105)
    {
      int n = (int)Val(selectCnl105);
      if (n == 0)
        return Val(101);
      else if (n == 1)
        return Val(102);
      else if (n == 2)
        return Val(103);
     }

    то сервер и коммуникатор сваливаются в ошибку какую то. Если формулу удалить — всё в норме становится

    #25382
    manjey73
    Участник

    int selectCnl105 — это просто ИМЯ переменной, можете обозвать как угодно и это имя использовать внутри формулы…

    например SelectParameter — переменная номера канала, в котором у вас находится параметр Температуры, Давления или Расхода

    Сваливается из-за некорректности формулы видимо ? Скорее всего что return запихнуты в if, или скорее всего, что вы значение канала превращаете в int в переменной n…

    public double MyTemp(int selectCnl)
    {
      if (Val(selectCnl) == 0)
        return Val(101);
      else if (Val(selectCnl) == 1)
        return Val(102);
      else if (Val(selectCnl) == 2)
        return Val(103);
     }

    Если с return не прокатит, смотрите какую ошибку пишет в логах.. То сделать промежуточную double переменную.

    public double MyTemp(int selectCnl)
    {
    double val;
      if (Val(selectCnl) == 0)
        val = Val(101);
      else if (Val(selectCnl) == 1)
        val =  Val(102);
      else if (Val(selectCnl) == 2)
        val = Val(103);
      return val;
     }
    #25383
    manjey73
    Участник

    Выпадающие списки были бы прикольной штукой иногда. Но тут то 3 параметра можно было и в столбик на каждом объекте сделать. Не тот случай вроде, чтобы извращаться…

    #25384
    fergus2022
    Участник

    имена переменных «perech» — для значений 0,1,2.
    znach — тут должны цифры с датчика выводиться с нужного канала (0,1 или 2 что выберет оператор ).

    public double MyTemp(int selectznach)
    {
       if (Val(selectperech) == 0)
        val = Val(101);
      else if (Val(selectperech) == 1)
        val =  Val(102);
      else if (Val(selectperech) == 2)
        val = Val(103);
      return val;
     }

    сервер и коммуникатор в ошибке при такой формуле.

    public double MyTemp(int selectznach)
    {
    double val;
      if (Val(selectperech) == 0)
        val = Val(101);
      else if (Val(selectperech) == 1)
        val =  Val(102);
      else if (Val(selectperech) == 2)
        val = Val(103);
      return val;
     }

    тоже самое всё в ошибке.

    из лога:

    2022-10-11 14:54:52 <ASUTP3><СИСТЕМА><ERR> Ошибка при компилировании исходного кода формул: 
    Строка 517, колонка 11: error CS0103: Имя "selectznach" отсутствует в текущем контексте
    Строка 519, колонка 16: error CS0103: Имя "selectznach" отсутствует в текущем контексте
    Строка 521, колонка 16: error CS0103: Имя "selectznach" отсутствует в текущем контексте
    Для ознакомления с исходным кодом см. файл C:\SCADA\ScadaServer\Log\CalcEngine.cs
    2022-10-11 14:54:52 <ASUTP3><СИСТЕМА><ERR> Нормальная работа программы невозможна
    • Этот ответ был изменен 1 год, 5 месяцев назад от fergus2022.
    #25386
    fergus2022
    Участник

    Выпадающие списки были бы прикольной штукой иногда. Но тут то 3 параметра можно было и в столбик на каждом объекте сделать. Не тот случай вроде, чтобы извращаться…

    нужна компактность для отображения на смартфоне

    #25387
    fergus2022
    Участник

    При таком коде:

    public double MyTemp(int selectperech)
    {
      int n = (int)Val(selectperech);
      if (n == 0)
        return Val(101);
      else if (n == 1)
        return Val(102);
      else if (n == 2)
        return Val(103);
    }

    в логе ошибка:

    2022-10-11 15:12:21 <ASUTP3><СИСТЕМА><ACT> Формулы считаны из базы конфигурации
    2022-10-11 15:12:21 <ASUTP3><СИСТЕМА><ERR> Ошибка при компилировании исходного кода формул: 
    Строка 514, колонка 15: error CS0161: "Scada.Server.Engine.CalcEngine.MyTemp(int)": не все ветви кода возвращают значение
    Для ознакомления с исходным кодом см. файл C:\SCADA\ScadaServer\Log\CalcEngine.cs

    Что не так опять ?

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