Формат перечисления с порядковым номером

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

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

    Добрый день, подскажите можно ли присвоить порядковый номер для «Формат — Перечисление»?
    Для входного канала «Режим работы котла» у меня задано в «Перечислении»
    -; Старт; Готов; Вентиляция; Контроль герметичности; Розжиг запальника; Розжиг горелки; Прогрев; Работа; Стоп; Авария;
    где значение регистра 1 — Старт, 2 — Готов и т д. Эти значения идут по порядку. Тут вопросов нет, всё красиво выводится на мнемосхеме.

    А вот для Регистра «Стек ошибок» регистра возвращает значения в таком ввиде:
    3 = Отказ SD-карты
    8 = НИЗКОЕ НАПРЯЖЕНИЕ!
    16 = Р воздуха < min
    17 = Вентилятор выключ. Р воздуха > min
    18 = Отказ ЧРП вентилятора
    48 = Р газа > min при закрытом клапане (дискретн.датч)
    и так далее.

    Есть ли возможность задать порядковый номер для текста перечисления, чтобы на мнемосхеме выводить значение регистра «Стек ошибок» ?

    Или это лучше реализовать через формулы, где в код вбить все значения всех ошибок?
    Спасибо.

    #30494
    a80808
    Участник

    По мне так проще через формулу записать в доп.канал порядок 1, 2, 3 и т.д. и уже на него накладывать текст перечисления. Если каналов не один так проще формулу если что поправить. Только проверяйте канал сразу на недостоверность данных и в этом случае номер 0 или другой, чтобы показывалась недостоверность. Ну или статусом.

    #30495
    manjey73
    Участник

    Да, проще сделать через формулу в новый порядок последовательно, чем писать
    ;;; Отказ SD карты;;;;;Низкое напряжение;;;;; и так далее пропуская числа.

    Хотя можно и заморочиться, может и заработает 🙂

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

    Добрый день!
    В перечислении все значение идут по порядку 0, 1, …
    Понадобится формула в таблице Скрипты, примерно такая:

    public double GetValueIndex()
    {
      switch ((int)CnlVal) 
      {
        case 3: return 1;
    ...
        default: return 0;
      }
    }
    

    Затем используйте её в канале: GetValueIndex()

    • Ответ изменён 2 года, 6 месяцев назад пользователем Mikhail.
    #35776
    Mikhail1986
    Участник

    Добрый день!
    Можно пожалуйста подробней, что куда вписать?

    #35778
    manjey73
    Участник

    @Mikhail1986

    Перечисления записываются в таблицу Форматы
    Формулы записываются в таблицу Скрипты.

    или вопрос иного плана?

    #35781
    Mikhail1986
    Участник

    Вопрос, как и где применить данный скрипт. Если получится, то с примером ):

    public double GetValueIndex()
    {
    switch ((int)CnlVal)
    {
    case 3: return 1;

    default: return 0;
    }
    }

    #35787
    manjey73
    Участник

    @Mikhail1986 пример был выше.
    Когда с прибора приходят цифры не последовательно, которые можно вбить в таблицу Формата для перечисления.
    Например с прибора приходят 1, 3, 6, 8, 10 — всего пять перечислителей. Но Перечисление указывается последовательно от нуля.
    Тогда в форматах вы создаете перечисление
    ; Один; Три; Шесть; Восемь; Десять — тут первым ; отсекаете 0, типа значение по умолчанию некое — получаете по факту 6 перечислений

    создаете формулу
    public double GetValueIndex()
    {
    switch ((int)CnlVal)
    {
    case 1: return 1;
    case 3: return 2;
    case 6: return 3;
    case 8: return 4;
    case 10: return 5;
    default: return 0;
    }
    }

    Ставите в канал формулу, и указываете созданное перечисление.

    #35799
    Mikhail1986
    Участник

    Понял, спасибо большое!

    #36040
    Mikhail1986
    Участник

    Скажите пожалуйста, а как быть если у меня данные идут не с 0, а от -1 до 3 и эти пять значений мне нужно сопоставить с текстовой информацией

    #36041
    manjey73
    Участник

    switch ((int)CnlVal)
    {
    case -1: return 1;

    в case разве так задать нельзя? там же int а он может быть и отрицательным

    #36043
    Mikhail1986
    Участник

    не получается, не воспринимает отрицательное значение

    #36044
    manjey73
    Участник

    Сам канал показывает отрицательное значение -1 ?
    Например если сделать не (int)CnlVal
    а Convert.ToInt32(CnlVal) ?

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