Стартовая страница › Форумы › Понять, как работает ПО › Формат перечисления с порядковым номером
- В этой теме 12 ответов, 5 участников, последнее обновление 1 год, 6 месяцев назад сделано
manjey73.
-
АвторСообщения
-
04.12.2023 в 09:56 #30493
Evgeniy58
УчастникДобрый день, подскажите можно ли присвоить порядковый номер для «Формат — Перечисление»?
Для входного канала «Режим работы котла» у меня задано в «Перечислении»
-; Старт; Готов; Вентиляция; Контроль герметичности; Розжиг запальника; Розжиг горелки; Прогрев; Работа; Стоп; Авария;
где значение регистра 1 — Старт, 2 — Готов и т д. Эти значения идут по порядку. Тут вопросов нет, всё красиво выводится на мнемосхеме.А вот для Регистра «Стек ошибок» регистра возвращает значения в таком ввиде:
3 = Отказ SD-карты
8 = НИЗКОЕ НАПРЯЖЕНИЕ!
16 = Р воздуха < min
17 = Вентилятор выключ. Р воздуха > min
18 = Отказ ЧРП вентилятора
48 = Р газа > min при закрытом клапане (дискретн.датч)
и так далее.Есть ли возможность задать порядковый номер для текста перечисления, чтобы на мнемосхеме выводить значение регистра «Стек ошибок» ?
Или это лучше реализовать через формулы, где в код вбить все значения всех ошибок?
Спасибо.04.12.2023 в 10:15 #30494
a80808УчастникПо мне так проще через формулу записать в доп.канал порядок 1, 2, 3 и т.д. и уже на него накладывать текст перечисления. Если каналов не один так проще формулу если что поправить. Только проверяйте канал сразу на недостоверность данных и в этом случае номер 0 или другой, чтобы показывалась недостоверность. Ну или статусом.
04.12.2023 в 10:22 #30495
manjey73УчастникДа, проще сделать через формулу в новый порядок последовательно, чем писать
;;; Отказ SD карты;;;;;Низкое напряжение;;;;; и так далее пропуская числа.Хотя можно и заморочиться, может и заработает 🙂
04.12.2023 в 14:29 #30498
MikhailМодераторДобрый день!
В перечислении все значение идут по порядку 0, 1, …
Понадобится формула в таблице Скрипты, примерно такая:public double GetValueIndex() { switch ((int)CnlVal) { case 3: return 1; ... default: return 0; } }Затем используйте её в канале: GetValueIndex()
-
Ответ изменён 2 года, 6 месяцев назад пользователем
Mikhail.
26.11.2024 в 05:18 #35776Mikhail1986
УчастникДобрый день!
Можно пожалуйста подробней, что куда вписать?26.11.2024 в 06:30 #35778
manjey73УчастникПеречисления записываются в таблицу Форматы
Формулы записываются в таблицу Скрипты.или вопрос иного плана?
26.11.2024 в 08:47 #35781Mikhail1986
УчастникВопрос, как и где применить данный скрипт. Если получится, то с примером ):
public double GetValueIndex()
{
switch ((int)CnlVal)
{
case 3: return 1;
…
default: return 0;
}
}26.11.2024 в 09:58 #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;
}
}Ставите в канал формулу, и указываете созданное перечисление.
26.11.2024 в 11:31 #35799Mikhail1986
УчастникПонял, спасибо большое!
07.12.2024 в 14:02 #36040Mikhail1986
УчастникСкажите пожалуйста, а как быть если у меня данные идут не с 0, а от -1 до 3 и эти пять значений мне нужно сопоставить с текстовой информацией
07.12.2024 в 14:18 #36041
manjey73Участникswitch ((int)CnlVal)
{
case -1: return 1;в case разве так задать нельзя? там же int а он может быть и отрицательным
07.12.2024 в 19:32 #36043Mikhail1986
Участникне получается, не воспринимает отрицательное значение
07.12.2024 в 22:31 #36044
manjey73УчастникСам канал показывает отрицательное значение -1 ?
Например если сделать не (int)CnlVal
а Convert.ToInt32(CnlVal) ? -
Ответ изменён 2 года, 6 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.