Перечисление и биты

Стартовая страница Форумы Новые идеи Перечисление и биты

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

    Собственно есть битовая маска с авариями.
    0 — норма
    1 — некая авария.

    Сейчас делаю при помощи перечислений на каждый бит:

    Норма: green; Е1 Ошибка датчика влажности: red
    Норма: green; Е2 Ошибка датчика теплоносителя ЖТУ: red

    а хотелось бы сделать таким образом: Сделать всего ОДНО перечисление

    Норма: green
    Е1 Ошибка датчика влажности: red
    Е2 Ошибка датчика теплоносителя ЖТУ: red

    А в столбце Формат ввести вот такую запись (например у меня само перечисление имеет наименование TableError)

    TableError.1
    TableError.2 (нулевой вариант для перечисления всегда Норма)

    Ну или типа двойной записи TableError.0,TableError.2 (то есть конкретный бит сравнивается только с 0 и 2 записи Формата.

    з.ы. это больше для Таблиц. Для Мнемосхем вроде как сравнение есть, хотя не уверен, что там Перечисления работают сильно иначе.

    #43803
    manjey73
    Участник

    з.ы. вероятно тут требуется, чтобы ячейка таблицы позволяла себя редактировать, кроме выбора из списка Перечислений. Чтобы была возможность указывать еще и биты.

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

    Чтобы для одного канала отображались сразу значения по каждому биту без разделения на отдельные каналы для каждого бита?

    #43817
    manjey73
    Участник

    Не совсем. есть Регистр = 0, значит ошибок нет — Норма.
    Получается, что для каждого бита регистра 0 = Норма, 1 в бите это ошибка.

    По этому есть вариант сделать ОДНО общее перечисление, где 0 это Норма, а Ошибка.Номер_бита это есть ошибка.

    Только тут Err.0 это тоже ошибка, то есть когда 0 бит поднят в 1.

    То есть общее перечисление у нас скорее всего должно заканчиваться понятием Норма (ну для case это своего роде default значение. А 0-15 или 0-31 это и есть поднятые биты.

    соответственно в расчетных каналах с формулами GetBit у нас Формат для каждого будет CaseError.0 для 0-ого бита, CaseError.12 для 12-ого бита.
    А перечисление заполнено одно единственное, а не ХХХ штук, как я сейчас наделал 🙂
    Просто для Таблицы я ничего умнее не придумал. Я даже сделал вот так

    ; Е1 Ошибка датчика влажности: red то есть стер вообще слово «Норма»

    #43818
    manjey73
    Участник

    фактически Формат каждого расчетного канала с GetBit выглядит таким образом

    CaseError.x — где x это номер бита, который мы вытаскиваем и соответствует записи Перечисления.
    Если там ничего — то Норма (default «Норма» или «» ничего не отображать)

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