Несколько расчетных каналов

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

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

    Здравствуйте! Считываю аварийные состояния с устройства как битовую маску, которую раскладываю по расчетным каналам. Необходимо в новом канале: если хотя бы один из [2,3,4,6,8] бит = 1, присвоить значению канала 1. Нет — 0. Как правильно это реализовать?

    #39358
    wkdx00
    Участник

    Будет ли корректно создать расчетный канал и во входной формуле вбить «(Val(120) + Val(121) + Val(122) + Val(124) + Val(126)) > 0»?

    #39359
    manjey73
    Участник

    ИЛИ — есть такая логическая операция 🙂

    // Логическое ИЛИ
    public double OR(params int[] cnls)
    {
    foreach (int cnlNum in cnls)
    {
      if (Val(cnlNum) > 0 && Stat(cnlNum) > 0)
        return 1;
    }
    return 0;
    }
    

    В расчетном канале вводите формулу OR(101, 102, 103, 104) где цифры это ваши номера каналов, при любом значении > 0 канал станет = 1.
    з.ы. кстати можно даже не использовать ИЛИ, так как сам канал битовой маски при любом поднятом бите будет > 0, ну кроме самого старшего, но это уже зависит от преобразования, которое выполняется в канале.

    #39360
    manjey73
    Участник

    Если вам нужны биты для отображения чего-то, можно и их использовать.
    А можно и целиком регистр проверять на значение больше 0.

    #39362
    wkdx00
    Участник

    Огромное спасибо! «OR(101, 102, 103, 104)» лучший вариант для меня!

    #39363
    manjey73
    Участник

    OR нужен там, где надо собрать ошибки от разных источников.
    Например я так собираю для запуска звуковой аварии, правда оборачиваю это еще в Rtrig, чтобы был импульс в канале и была возможность отключить звук, чтобы не раздражал.

    #39364
    wkdx00
    Участник

    Звук мне тоже понадобится, но пока я до этого не дошел)

    #39365
    manjey73
    Участник

    со звуком не все так просто 🙂 Только Windows и только если Сервер и АРМ это один ПК.

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

    #39366
    wkdx00
    Участник

    «Только Windows и только если Сервер и АРМ это один ПК.» — да, как раз мой случай.

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

    Если у Вас исходное значение, которое затем раскладывается побитно, изначально считано в один канал, то более эффективно будет проверить биты в нём с помощью оператора &.

    #39376
    wkdx00
    Участник

    Спасибо, попробую! Manjey73 как кажется мне, предложил отличный вариант.

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