Один сигнал — много каналов

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

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

    Приветствую!
    Можно ли брать в несколько каналов один и тот же сигнал одного КП? Необходимо разобрать данные сигнала по битам, и каждый бит вывести в отдельный канал.

    #7490
    manjey73
    Участник

    Можно конечно, вы можете потом обращаться к каналу через Val(N)
    Например так GetBit(Val(140),2) — взять второй бит значения 140-го канала
    Или так Rtrig(GetBit(Val(140),2)) отловить фронт импульса по 2-му биту 140-го канала

    Обе формулы будут каждый в своем дорасчетном канале…
    А можно и разделить (иногда требуется разделять..)
    Первоначальная формула GetBit записана например в 142-м канале
    Rtrig(Val(142)) тогда будет.

    • Ответ изменён 8 лет, 8 месяцев назад пользователем manjey73.
    • Ответ изменён 8 лет, 8 месяцев назад пользователем manjey73.
    #7493
    OldManSpb
    Участник

    А так можно? GetBit((int)Cnl,5)

    #7494
    OldManSpb
    Участник

    Точнее так
    Канал КП Сигнал Формула
    100 Abc 2 GetBit((int)Cnl,0);Stat(CnlNum)
    101 Abc 2 GetBit((int)Cnl,1);Stat(CnlNum)
    102 Abc 2 GetBit((int)Cnl,2);Stat(CnlNum)

    #7495
    manjey73
    Участник

    Нет, так не получится, потому что привязка между базой и Коммуникатором как будет происходить ? Cnl работает только на каналах Телеуправления же.

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

    Добрый день!
    Один входной канал для первичных данных и множество дорасчётных каналов для выделения битов.

    #7504
    OldManSpb
    Участник

    Понятно. То есть несколько каналов не могут использовать один сигнал?

    #7505
    manjey73
    Участник

    Дорасчетные каналы могут использовать данные одного входного канала.
    Входной канал это взаимосвязь между Сервером и Коммуникатором, дорасчетных можно налепить сколько угодно и брать значение из входного канала.
    Например разные формулы расчета для того или иного отображения.

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

    То есть несколько каналов не могут использовать один сигнал?

    Даже если укажете один КП и сигнал для нескольких каналов, данные из Коммуникатора поступят только на один из каналов.

    #40576
    dikh
    Участник

    Допустим у меня по каналу № 1234 происходит считываение регистра, из которого мне нужно вычесть биты, значит я создаю 3 канала и формулы быдут выглядеть так:
    Канал №1235 — GetBit(Val(1234),0) — считать 0ой бит из канала 1234
    Канал №1236 — GetBit(Val(1234),5) — считать 5ый бит из канала 1234
    Канал №1237 — GetBit(Val(1234),10) — считать 10ый бит из канала 1234
    Я прав?

    • Ответ изменён 8 месяцев, 1 неделя назад пользователем dikh.
    #40578
    manjey73
    Участник

    @dikh, да, так и делается. Один канал входной, в остальных вы что-то обрабатываете.
    Если бы вам нужен был один единственный бит из входного канала, можно было бы сразу в формуле входного канала выдернуть этот нужный бит

    • Ответ изменён 8 месяцев, 1 неделя назад пользователем manjey73.
    #40581
    dikh
    Участник

    @manjey73, спасибо.
    А если мне в зависимости от нескольких условий нужно менять статус канала? Т.е. использовать if?
    Т.е. допустим:
    если канал 2 = 0 тогда канал 1 = 0
    если канал 2 <> 0, а канал 3 от 1 до 5 тогда канал 1 = 1
    если канал 2 <> 0, а канал 3 от 4 до 5 и канал 4 = 10 тогда канал 1 = 3
    ?
    Нашел, нужно делать функции.

    #40582
    a80808
    Участник

    case можно

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

    Добрый день!
    В 6-й версии предпочтительно GetBit(Data(1234), 0), чтобы формула учитывала статус исходного канала.

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