Отображение отрицательных значений

Стартовая страница Форумы Понять, как работает ПО Использование формул Отображение отрицательных значений

Просмотр 15 сообщений - с 1 по 15 (из 32 всего)
  • Автор
    Сообщения
  • #10511
    Mykhailo
    Участник

    Имеется проблема, имеем шкалу -50 : 130 грд.С, отображения данных каналов при положительных значениях это Cnl/10, в тоже время отрицательных (Cnl-65535)/10.

    Я можно сказать только знакомлюсь со скада системой, наведите на мысль как можно справиться с этой проблемой. При необходимости задать уставку отрицательной температуры необходимо вводить значения 65435 и т.д., а это не удобно.

    Как заставить канал понимать какую формулу применять.

    За ранее спасибо

    #10518
    manjey73
    Участник

    Вам прибор передает все значения одним регистром в целочисленном формате ?

    При чтении из прибора можно попробовать прогнать через масштабирование. (не пробовал)
    А вот для задания уставки впрочем как и для отображения нужны формулы.

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

    С отображением в Scada проблем нет.

    double Scaler (double input, double in_min, double in_max, double out_min, double out_max)
    
    {
    double out1 = 0;
    double out2 = 0;
    double output = 0;
    double diff = in_max - in_min;
    
    if (diff != 0)
    {
    if (input > in_max) out1 = in_max;
    else out1 = input;
    if (in_min > out1) out2 = in_min;
    else out2 = out1;
    output = (out_max - out_min) / diff * (out2 - in_min) + out_min;
    }
    return output;
    }

    Формула масштабирования, добавить к формулам.
    канал Х — входной, сюда передаете с прибора значение
    канал Х+1 — расчетный, сюда добавляете формулу Scaler((short)Val(Х), -32767, 32767, -30, 150)

    И получаете температуру от -30 до 150. Вот как правильно применить формулу масштабирование в канале управления не подскажу, нужен прибор для тестов.
    Но будет что-то вроде Scaler((short)Cmd, -30, 150, -32767, 32767)
    И далее как-то преобразовывать результат в выходную переменную для прибора. Хотя может новый драйвер Modbus ее правильно передаст…

    #10521
    manjey73
    Участник

    а вообще какая-то лажа, при значении 0 масштабирование дает 60 гр.

    #10522
    manjey73
    Участник

    Вообще очень странно у вас передает температуру прибор…

    Простой вариант Cnl > 32767 ? (Cnl-65535)/10 : Cnl/10

    если 0 это 0 градусов, 1500 это 150,0 градусов
    а -30 градусов это значение 65235

    #10526
    Mykhailo
    Участник

    спс, буду пробовать. В симп лайт скаде таких проблем нет, если поставить int16 все значения удобочитаемы, но в рапид шикарно реализован ВЕБ, а упор именно на ВЕБ идет, посему приходится немного мучиться со значениями, не хочет коммуникатор передать так как хочется мне.
    И еще глупый вопрос, я так понимаю нужно сделать отдельный дорасчетный канал, и туда вставить формулу? Непосредственно в админке поставить галочку «применить формулу» не пройдет?

    Вот тут пример 1 и 2 канал положительная т-ра, 24 — отрицательная
    https://drive.google.com/open?id=1Y6qpX_erR5KQugV6Ihnn2V8DV7uGlnCd

    • Этот ответ был изменен 5 лет, 6 месяцев назад от Mykhailo.
    • Этот ответ был изменен 5 лет, 6 месяцев назад от Mykhailo.
    • Этот ответ был изменен 5 лет, 6 месяцев назад от Mykhailo.
    #10530
    Mykhailo
    Участник

    manjey73, премного благодарен, так потиху и научусь, Все работает как по входным каналам, так и по каналам управления. Уставку задаю как положительную так и отрицательную, выводит все в лучшем виде

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

    Коммуникатор передаёт на Сервер данные с минимальной обработкой. В шаблоне Модбас важно правильно поставить тип данных и порядок байт. А масштабирование и уставки реализуются в Администраторе с помощью каналов и формул для них.

    #10537
    manjey73
    Участник

    Mykhailo так в итоге что применили ?
    Просто у себя тестировал и если использовать (short) то как-то неадекватно работает формула. Но правда я руками все-таки в формате double задавал.

    #10538
    Mykhailo
    Участник

    Применил это для входного канала

    Простой вариант Cnl > 32767 ? (Cnl-65535)/10 : Cnl/10

    А для канала управления переделал выражение.
    Cnl < 32767 ? Cmd*10 : (Cmd*10)+65535)

    На данном этапе получил что хотел

    Теперь есть 4 дискретных сигнала, и нужно при срабатывании любого вывести сигнал.
    Понимаю что легко, но в С# плаваю, но потиху осваиваю пробелы.

    И все же, формулы прописываются в таблице админки, или еще где?

    #10560
    manjey73
    Участник

    Да, формулы в таблицах формул Администратора.
    Простые выражения могут прописываться непосредственно в каналах как вы и сделали.

    Теперь есть 4 дискретных сигнала, и нужно при срабатывании любого вывести сигнал.

    Можно настроить Модуль автоматического управления.
    Можно формулой, типа Val(x1) > 0 || Val(x2) > 0 || Val(x3) > 0 ? true : false

    так должно сработать

    #10598
    Mykhailo
    Участник

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

    #10599
    manjey73
    Участник

    Если больше, пишите формулу в базу данных Формулы а в канале вызывайте.

    #13873
    Naladun
    Участник

    При больших значениях переменных и выводе их на мнемосхеме через компоненты, даже если формат указан как целочисленный без разрядов («D»), появляются разделители в виде «,». Т.е. вместо значения 1234 отображается 1,234. Если с дробной частью, то 1,234.000… Этого можно как-то избежать? Потому что значение 1,234 выглядит как дробное на экране, путаница идет. Разделитель в виде пробела было-бы идеально использовать, или вообше убрать, т.к. его тип не конфигурируется в свойствах элементов, получив
    тип отображения в виде 1 234.000 (много места, но более читаем поразрядно), или 1234.000 / 1234,000

    #13874
    Romiros
    Участник

    Что-то не так с настройками или глючит. Если формат задан как D, то должно быть 1 234

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