Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Отображение отрицательных значений
- В этой теме 31 ответ, 6 участников, последнее обновление 4 года, 5 месяцев назад сделано Mikhail.
-
АвторСообщения
-
28.10.2018 в 20:09 #10511MykhailoУчастник
Имеется проблема, имеем шкалу -50 : 130 грд.С, отображения данных каналов при положительных значениях это Cnl/10, в тоже время отрицательных (Cnl-65535)/10.
Я можно сказать только знакомлюсь со скада системой, наведите на мысль как можно справиться с этой проблемой. При необходимости задать уставку отрицательной температуры необходимо вводить значения 65435 и т.д., а это не удобно.
Как заставить канал понимать какую формулу применять.
За ранее спасибо
29.10.2018 в 09:43 #10518manjey73УчастникВам прибор передает все значения одним регистром в целочисленном формате ?
При чтении из прибора можно попробовать прогнать через масштабирование. (не пробовал)
А вот для задания уставки впрочем как и для отображения нужны формулы.- Этот ответ был изменен 5 лет, 6 месяцев назад от manjey73.
29.10.2018 в 10:12 #10520manjey73УчастникС отображением в 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 ее правильно передаст…29.10.2018 в 10:15 #10521manjey73Участника вообще какая-то лажа, при значении 0 масштабирование дает 60 гр.
29.10.2018 в 11:29 #10522manjey73УчастникВообще очень странно у вас передает температуру прибор…
Простой вариант Cnl > 32767 ? (Cnl-65535)/10 : Cnl/10
если 0 это 0 градусов, 1500 это 150,0 градусов
а -30 градусов это значение 6523529.10.2018 в 18:01 #10526MykhailoУчастникспс, буду пробовать. В симп лайт скаде таких проблем нет, если поставить int16 все значения удобочитаемы, но в рапид шикарно реализован ВЕБ, а упор именно на ВЕБ идет, посему приходится немного мучиться со значениями, не хочет коммуникатор передать так как хочется мне.
И еще глупый вопрос, я так понимаю нужно сделать отдельный дорасчетный канал, и туда вставить формулу? Непосредственно в админке поставить галочку «применить формулу» не пройдет?Вот тут пример 1 и 2 канал положительная т-ра, 24 — отрицательная
https://drive.google.com/open?id=1Y6qpX_erR5KQugV6Ihnn2V8DV7uGlnCd29.10.2018 в 18:46 #10530MykhailoУчастникmanjey73, премного благодарен, так потиху и научусь, Все работает как по входным каналам, так и по каналам управления. Уставку задаю как положительную так и отрицательную, выводит все в лучшем виде
29.10.2018 в 19:45 #10531MikhailМодераторКоммуникатор передаёт на Сервер данные с минимальной обработкой. В шаблоне Модбас важно правильно поставить тип данных и порядок байт. А масштабирование и уставки реализуются в Администраторе с помощью каналов и формул для них.
29.10.2018 в 22:50 #10537manjey73УчастникMykhailo так в итоге что применили ?
Просто у себя тестировал и если использовать (short) то как-то неадекватно работает формула. Но правда я руками все-таки в формате double задавал.30.10.2018 в 00:40 #10538MykhailoУчастникПрименил это для входного канала
Простой вариант Cnl > 32767 ? (Cnl-65535)/10 : Cnl/10
А для канала управления переделал выражение.
Cnl < 32767 ? Cmd*10 : (Cmd*10)+65535)На данном этапе получил что хотел
Теперь есть 4 дискретных сигнала, и нужно при срабатывании любого вывести сигнал.
Понимаю что легко, но в С# плаваю, но потиху осваиваю пробелы.И все же, формулы прописываются в таблице админки, или еще где?
30.10.2018 в 15:32 #10560manjey73УчастникДа, формулы в таблицах формул Администратора.
Простые выражения могут прописываться непосредственно в каналах как вы и сделали.Теперь есть 4 дискретных сигнала, и нужно при срабатывании любого вывести сигнал.
Можно настроить Модуль автоматического управления.
Можно формулой, типа Val(x1) > 0 || Val(x2) > 0 || Val(x3) > 0 ? true : falseтак должно сработать
01.11.2018 в 11:23 #10598MykhailoУчастникПарни, а такой вопрос, или или я чего то не правильно делаю, но при вводе формул, пишет должно быть не более 100 знаков, а если больше?
01.11.2018 в 11:27 #10599manjey73УчастникЕсли больше, пишите формулу в базу данных Формулы а в канале вызывайте.
13.10.2019 в 16:46 #13873NaladunУчастникПри больших значениях переменных и выводе их на мнемосхеме через компоненты, даже если формат указан как целочисленный без разрядов («D»), появляются разделители в виде «,». Т.е. вместо значения 1234 отображается 1,234. Если с дробной частью, то 1,234.000… Этого можно как-то избежать? Потому что значение 1,234 выглядит как дробное на экране, путаница идет. Разделитель в виде пробела было-бы идеально использовать, или вообше убрать, т.к. его тип не конфигурируется в свойствах элементов, получив
тип отображения в виде 1 234.000 (много места, но более читаем поразрядно), или 1234.000 / 1234,00013.10.2019 в 17:42 #13874RomirosУчастникЧто-то не так с настройками или глючит. Если формат задан как D, то должно быть 1 234
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.