Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Не отображать значение на схеме
- В этой теме 8 ответов, 4 участника, последнее обновление 1 год, 10 месяцев назад сделано
Alexandr.
-
АвторСообщения
-
07.08.2024 в 09:36 #33879
Alexandr
УчастникВсем добрый день!
имеется вопрос, возможно кто то встречался с подобным и как то решил его.
Имеется контроллер генератора (DeepSea), Контроллер связан с ЭБУ мотора.
Отображение температуры двигателя, давления масла, скорости вращения коленчатого вала и т.д. предоставляет ЭБУ мотора.В момент когда генератор в состоянии покоя, ЭБУ не передает эти значения, а контроллер DeepSea выдает ложное значение (это значение всегда одинаково).
Хотел сделать так, когда генератор в покое чтобы это числовое значение игнорировалось и отображались прочерки.Если у кого есть решение буду благодарен за помощь.
07.08.2024 в 10:58 #33900
JurasskParkУчастникВ формулу напишите, где 666 — это ваше постоянное значение.
Cnl = 666 ? 0:Cnl07.08.2024 в 15:01 #33918
MikhailМодераторДобрый день!
Если именно прочерки, то нужно возвращать нулевой статус.
Пример формулы канала:Cnl; Cnl < 100 ? 0 : CnlStat
После точки с запятой идёт расчёт статуса.15.08.2024 в 09:10 #34039Alexandr
УчастникВсем добрый день,
Юрий при использовании формулы
Cnl = 32766 ? 0:CnlСервер не стартует
2024-08-15 10:41:56 [RAPIDSCADA][RAPIDSCADA$][ERR] Ошибка при компиляции исходного кода скриптов и формул:
(678,53): error CS0200: Property or indexer ‘CalcEngine.Cnl’ cannot be assigned to — it is read only
(678,59): error CS0029: Cannot implicitly convert type ‘int’ to ‘bool’
Проверьте исходный код в файле C:\Program Files\SCADA\ScadaServer\Log\CalcEngine.cs
2024-08-15 10:41:57 [RAPIDSCADA][RAPIDSCADA$][ERR] Нормальная работа невозможнаЕсли делать так как предлагает Михаил, Cnl; Cnl < 100 ? 0 : CnlStat
то получаем на выходе тоже значение в моем случае это 32766
Если же изменить формулу до вида Cnl < 100 ? 0 : CnlStat
канал меняется но на выходе идут не прочерки а значение 1.Пока оставил последний вариант, что бы не отрабатывали аварийные сообщения по завышению температуры, но значение 1 также вводит в заблуждение персонал клиента.
По хорошему бы иметь отображение в виде «-«, что нет данных.В любом случае спасибо за помощь!
15.08.2024 в 09:49 #34042
manjey73УчастникCnl = 32766 ? 0:Cnl — если не ошибаюсь у вас тут присваивание а не сравнение на равенство.
Cnl == 32766, или Cnl >= 32766 надо.
Cnl = 32766 ? — тут проверка на true/false то есть должна получиться bool переменная виртуальная, если true по условию, то первым выполняется первый оператор после ? если false то второй.
-
Ответ изменён 1 год, 10 месяцев назад пользователем
manjey73.
15.08.2024 в 10:53 #34044
MikhailМодераторДа, просто в формуле должно быть
==
С-подобный синтаксис.15.08.2024 в 14:50 #34053Alexandr
УчастникВсем огромное спасибо за помощь!
При таком формате формулы «Cnl; Cnl >=120 ? 0 : CnlStat» появились прочерки, прям как требуется.
Еще чуть позже проверю, работает ли при формула при необходимости вести деление или умножение на поправочный коэффициент. Типа такой Cnl/0,1; Cnl/0,1 >=10 ? 0 : CnlStat.
15.08.2024 в 15:26 #34054
JurasskParkУчастникУ вас же значение ошибки 32766.
Разве вы не него проверяли?
Cnl / 0.1; Cnl == 32766 ? 0 : CnlStat15.08.2024 в 17:03 #34060Alexandr
УчастникЮрий, все верно.
Когда контроллер не получает инфо от другого контроллера, то на дисплее он отображает ХХХ, а модбасе кидает 32766.
Тут можно пойти несколькими путями,
либо как предложили Вы, либо как предложил Михаил.
Можно действовать от ситуации, в моем случае температура не может быть более 120 градусов, соответственно я предположил что можно считать если число просто больше значит оно не верное.Тут все решилось, по времени это второй вопрос который был в форуме от меня, я чет там совсем не понимаю))).
-
Ответ изменён 1 год, 10 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.