Не отображать значение на схеме

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

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

    Всем добрый день!

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

    Имеется контроллер генератора (DeepSea), Контроллер связан с ЭБУ мотора.
    Отображение температуры двигателя, давления масла, скорости вращения коленчатого вала и т.д. предоставляет ЭБУ мотора.

    В момент когда генератор в состоянии покоя, ЭБУ не передает эти значения, а контроллер DeepSea выдает ложное значение (это значение всегда одинаково).
    Хотел сделать так, когда генератор в покое чтобы это числовое значение игнорировалось и отображались прочерки.

    Если у кого есть решение буду благодарен за помощь.

    #33900
    JurasskPark
    Участник

    В формулу напишите, где 666 — это ваше постоянное значение.
    Cnl = 666 ? 0:Cnl

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

    Добрый день!
    Если именно прочерки, то нужно возвращать нулевой статус.
    Пример формулы канала: Cnl; Cnl < 100 ? 0 : CnlStat
    После точки с запятой идёт расчёт статуса.

    #34039
    Alexandr
    Участник

    Всем добрый день,

    Юрий при использовании формулы
    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 также вводит в заблуждение персонал клиента.
    По хорошему бы иметь отображение в виде «-«, что нет данных.

    В любом случае спасибо за помощь!

    #34042
    manjey73
    Участник

    Cnl = 32766 ? 0:Cnl — если не ошибаюсь у вас тут присваивание а не сравнение на равенство.

    Cnl == 32766, или Cnl >= 32766 надо.

    Cnl = 32766 ? — тут проверка на true/false то есть должна получиться bool переменная виртуальная, если true по условию, то первым выполняется первый оператор после ? если false то второй.

    • Ответ изменён 1 год, 10 месяцев назад пользователем manjey73.
    #34044
    Mikhail
    Модератор

    Да, просто в формуле должно быть ==
    С-подобный синтаксис.

    #34053
    Alexandr
    Участник

    Всем огромное спасибо за помощь!

    При таком формате формулы «Cnl; Cnl >=120 ? 0 : CnlStat» появились прочерки, прям как требуется.

    Еще чуть позже проверю, работает ли при формула при необходимости вести деление или умножение на поправочный коэффициент. Типа такой Cnl/0,1; Cnl/0,1 >=10 ? 0 : CnlStat.

    #34054
    JurasskPark
    Участник

    У вас же значение ошибки 32766.
    Разве вы не него проверяли?
    Cnl / 0.1; Cnl == 32766 ? 0 : CnlStat

    #34060
    Alexandr
    Участник

    Юрий, все верно.

    Когда контроллер не получает инфо от другого контроллера, то на дисплее он отображает ХХХ, а модбасе кидает 32766.

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

    Тут все решилось, по времени это второй вопрос который был в форуме от меня, я чет там совсем не понимаю))).

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