Подскажите как составить формулу!

Стартовая страница Форумы Понять, как работает ПО Формулы Подскажите как составить формулу!

Просмотр 15 сообщений - с 31 по 45 (из 51 всего)
  • Автор
    Сообщения
  • #30328
    Mikhail
    Модератор

    А управление хотелось бы сделать от 0 до 100.

    В каком смысле?

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

    А управление хотелось бы сделать от 0 до 100.

    В каком смысле?

    #30331
    Colossal
    Участник

    Михаил, здравствуйте! Нет, указанная формула применяется в других каналах — где нужно при нажатии уменьшить мощность или увеличить её.
    https://ru.paste.pics/42cb8aa0e679b80e4dd85945667c0676

    При нуле, если снова нажать на клавишу уменьшение, то выходит 255.
    А мощность максимальная может быть только 100%
    И нужно как-то прописать эти границы, чтобы только от 0 до 100 могли вбивать.
    Свойства каналов:
    https://ru.paste.pics/ba2d42b18c8cb1a8ef0efec66ccdcce4
    https://ru.paste.pics/f087f5958fe3e13abba92826b324693a

    #30332
    Romiros
    Участник

    Можете, например, добавить в скрипты следующую формулу:
    stepCnlNum — номер канала из которого берется размер шага
    cnlNum — номер канала, значение которого нужно увеличить или уменьшить
    increase — true — увеличить false — уменьшить

    public double SetStep(int stepCnlNum, int cnlNum, bool increase)
    {
    double s = (Val(stepCnlNum));
    if(increase)
    {
    double val = Val(cnlNum)<100?Val(cnlNum)+s:100;
    return val>100?100:val;
    }
    else
    {
    double val = Val(cnlNum)>0?Val(cnlNum)-s:0;
    return val<0?0:val;
    }
    }

    Использование в канале:
    SetStep(156,131, true)

    Вместо использования номеров каналов можете сразу вписать значения
    SetStep(1,CnlNum, true)

    #30349
    Colossal
    Участник

    Здравствуйте.
    Спасибо большое за ответ.

    Вместо использования номеров каналов можете сразу вписать значения
    SetStep(1,CnlNum, true)

    На самом деле здесь 1 ведь не просто значение будет, а номер канала.

    #30350
    Romiros
    Участник

    Ну да, так и есть. Можно взять формулу за основу и переделать под себя уже со значениями. Просто хотел идею показать. Это делали для управления диммированием освещения в одном проекте.

    #30351
    manjey73
    Участник

    Делал формулу Scaler, там ограничение по мин и макс для выхода. Если подойдет конечно.

    Можно ли ее применить к каналу управления не пробовал…
    Поищите в теме про формулы, делал еще для 5-й версии правда.

    #30352
    manjey73
    Участник

    Ну и вспомнить опять как показывать ошибку оператору, чтобы другое не вводили 🙂

    #30353
    Romiros
    Участник

    Насколько помню, просто:
    throw new Exception(«Вводите данные нормально»);

    #30354
    manjey73
    Участник

    Ага, вот рабочий пример по ошибке. Больше для дальнейшего вспоминания 🙂

    public double SetEngCommXYE(double cmd)
    {
    if (cmd < 16 || cmd > 32) throw new Exception("Значение должно быть в пределах 16 - 32");
    byte[] m = new byte[] {0x88, 0x01, (byte)DecToBCD((int)cmd) , 0x00, 0x00, 0x00, 0x00, 0x00 };
    double ml = BitConverter.ToDouble(m, 0);
    SetVal(CnlNum, ml);
    return ml;
    }
    #30540
    mr_smit
    Участник
    public double GetAlarm(int channel)
    {
      double alarm = Val(channel);  
      
      return alarm;
    }
    

    RS6. Создаю новый канал №139. Делаю его расчетным. Входную формулу пишу GetAlarm(107). Где 107 номер канала откуда взять данные. Назначаю динамическому тексту входной канал 139. Получаю значение 1.000. Хотя в коммуникаторе совершенно другое число в 107 канале. Никак не могу с формулами разобраться. Что откуда.

    #30541
    mr_smit
    Участник

    На 107 канал у меня назначен свой формат перечисления. Потому что если назначить динамическому тексту входной канал 107, то вместо значения я вижу перечисление. А как получить цифру в 139 канал из 107 до перечисления?

    #30542
    mr_smit
    Участник

    В 107-м у меня ещё входная формула Cnl > 0 ? 1 : 0. Вот откуда 1 берется. А как до этой формулы значение из 107-го канала получить?

    #30543
    mr_smit
    Участник

    del

    #30546
    manjey73
    Участник

    Еще один канал с формулой расчетной.
    107 — чистый канал
    108 — Val(107) > 0 ? 1 : 0 — его для перечисления
    и далее уже 139 ваш с GetAlarm хотя у вас GetAlarm это равен изначальному значению 107 канала из Коммуникатора.

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