Измерения Pt100

  • В этой теме 78 ответов, 4 участника, последнее обновление 2 года назад сделано manjey73.
Просмотр 15 сообщений - с 61 по 75 (из 79 всего)
  • Автор
    Сообщения
  • #22481
    Oakim
    Участник

    У меня так настроено
    405 ТИ Сигнал 5
    406 Дорасчетный ТИ Исп.Формулу GetBit(405,0) = 1
    407 Дорасчетный ТИ Исп.Формулу GetBit(405,1) = 0
    408 Дорасчетный ТИ Исп.Формулу GetBit(405,2) = 1
    409 Дорасчетный ТИ Исп.Формулу GetBit(405,3) = 0
    410 Дорасчетный ТИ Исп.Формулу GetBit(405,4) = 1
    411 Дорасчетный ТИ Исп.Формулу GetBit(405,5) = 0
    412 Дорасчетный ТИ Исп.Формулу GetBit(405,6) = 0
    413 Дорасчетный ТИ Исп.Формулу GetBit(405,7) = 1

    Откуда берутся единицы я ума не приложу.

    #22482
    manjey73
    Участник

    GetBit(Значение канала, номер бита)

    Вы в качестве значение передаете 405 и получаете биты данного числа

    Правильно формула выглядит так, как писал выше

    GetBit(Val(405), 1) — где Val(405) = значение канала №405 и 1 = первый бит

    #22484
    Oakim
    Участник

    ААААААААА!!!! блин!!!
    Спасибо!

    #22486
    a80808
    Участник

    🙂 Распространенная ошибка 🙂 Сам иногда путаюсь

    #22487
    Oakim
    Участник

    У меня новая странная проблема

    Перенес формулу свою с отдельного канала с настройками
    416 - Дорасчетного ТИ - Использовать формулу - ResToTemp(Val(401))

    непосредственно на канал который данные получал с настройками
    401 - Дорасчетный ТИ - Использовать формулу - ResToTemp(Val())

    И ничего не получаю, почему?

    #22489
    Oakim
    Участник

    Если пишу ResToTemp(Val(Cnl)) то получаю ошибку

    Строка 549, колонка 67: error CS1502: Наиболее подходящий перегруженный метод для "Scada.Server.Engine.CalcEngine.Val(int)" имеет несколько недопустимых аргументов

    #22490
    a80808
    Участник

    Т.е. вы пытаетесь пересчитать данные канала 401 и в него же поместить результат? Если я правильно понимаю, у вас получается рекурсия. Дорасчетные ТИ пересчитываются непрерывно в цикле (около 1 сек.)

    #22491
    Oakim
    Участник

    Разобрался нужно было в канале указать ResToTemp(Cnl)

    #22492
    Oakim
    Участник

    А чем отличаются CnlVal и Cnl?

    #22496
    a80808
    Участник

    Ничем, это одно и то же. Видимо как то исторически сложилось. Михаил точнее ответит.

    #22507
    Oakim
    Участник

    А как в Канале сделать логическую формулу типа:
    (канал 401) И (канал 402) И (канал 403) ?

    Val(401)&&Val(402)&&Val(403) ?

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

    Val(401) > 0 && Val(402) > 0 && Val(403) > 0 ? 1 : 0

    #22512
    Oakim
    Участник

    А готовой формулы AND типа OR нет?

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

    Вопрос не понятен.

    #22522
    Oakim
    Участник

    Ну для OR есть формула в справочнике

    public double OR(params int[] cnlNums)
    {
    foreach (int cnlNum in cnlNums)
    {
      if (Val(cnlNum) > 0 && Stat(cnlNum) > 0)
        return 1;
    }
    return 0;
    }

    а для AND есть подобная? А то в настройках Канала в поле Формула ограничение на количество символов и не каждая формула туда влезет.

Просмотр 15 сообщений - с 61 по 75 (из 79 всего)
  • Вы должны авторизироваться для ответа в этой теме.