Не работает динамический рисунок

Стартовая страница Форумы Ошибки в работе Не работает динамический рисунок

Просмотр 13 сообщений - с 31 по 43 (из 43 всего)
  • Автор
    Сообщения
  • #23918
    Mikhail
    Модератор

    Добейтесь, чтобы в каждом строковом канале был корректный кусочек строки. Затем будем разбираться с формулами. Хотя было бы правильнее всё же договориться с теми, кто отправляет данные, об использовании числовых типов.

    #23921
    Romiros
    Участник

    Y1 у Вас это 128 канал, Y2 без канала, судя по второму скриншоту. Пересоздайте их заново с помощью мастера.

    #23930
    AlexanderUshakov
    Участник

    Вообщем я в свойствах устройства сделал длинну строки 16, при опросе стали приходить корректные значения в таблице.
    Но при выводе на схему обрезается одна цифра у значений с пятью цифрами.
    Так же происходит корректное преобразование в double формулой DecodeUnicode(Val()), но так же без последней цифры.
    То есть наглядно:
    Фактическое значение параметра — 32525
    При опросе через коммутатор в таблице — 32525
    При отображении на схеме — 3252
    При переводе в double — 3 252.00
    Скрин: https://disk.yandex.ru/i/lV3RHVyQ4bc92Q

    полное значение получается добиться, если у входного параметра поставить длинну данных 2, а не 1, но тогда сбивается порядок каналов. Как я описывал ранее.

    #23931
    manjey73
    Участник

    В БД хранится только 4 символа Unicode или 8 символов ASCII
    Вам нужно ДО записи в БД преобразовать строку в число.

    Вероятно дело тут связано как-то с этим.

    #23932
    Romiros
    Участник

    В чем вопрос? Вы работаете со строками. Чтобы поместить все символы строки в double вам нужно 2 канала. Поэтому ставите длину 2. Т.е. например канал 101 — первое значение, канал 103 — второе значение, следующий 105.

    #23933
    Romiros
    Участник

    Вот для примера, как у меня хранятся строки. Может так понятнее.

    https://imgur.com/PkheTR6

    https://imgur.com/ecRbkbm

    #23939
    AlexanderUshakov
    Участник

    Romiros, так у меня же каналы приходят из OPC сервера, как они сканируются коммуникатором так и БК появляются, если я в БК принудительно правлю номер каналов например, из 150 каналов я каналу 129 ставлю длинна 2, а каналу 130 присваиваю номер в конце списка 151 и тоже длинну 2, чтобы 129 занял два места 129-130, то перенесенный канал 151 вообще не показывается. А при сканировании через Коммуникатор я не могу менять нумераци

    #23940
    Romiros
    Участник

    Выставьте в БК нужный размер, с нужными сигналами, и передаете конфигурацию на исполнение. По идее все должно привязаться.
    Сейчас подниму у себя OPC клиент и проверю ради интереса.

    #23941
    Romiros
    Участник

    Слушайте, ну специально все проверил. Все создается через мастера создания каналов автоматически, нужного размера. Просто укажите в коммуникаторе тег, нужный размер строки и создайте каналы с помощью мастера. Он сам все создаст, как нужно.

    #23942
    AlexanderUshakov
    Участник

    Romiros, сделал как вы описали, через мастера, все получилось, длинна данных сама определилась, и номера каналов перераспределились. Только теперь каналы на мнемосхеме поправить надо, смещение получилось.
    Теперь мне надо в расчетном канале получается соединить значение Val(129) и Val(130) и сделать преобразование в Double? А то если написать просто DecodeUnicode(Val(129)), то он преобразует без пятой цифры, а DecodeUnicode(Val(130)) преобразует в одну недостающую пятую цифру, но DecodeUnicode(Val(129)+Val(130)) выдает значение 0, а string.Concat(Val(129), Val(130)) не компилируется

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

    Нужно в таблицу Скрипты добавить формулу примерно такого содержания:

    public double MyParse(int cnlNum1, int cnlNum2)
    {
      string s1 = DecodeUnicode(Val(cnlNum1));
      string s2 = DecodeUnicode(Val(cnlNum2));
      return ScadaUtils.ParseDouble(s1 + s2);
    }

    Затем применить эту формулу для нового канала, в котором наконец-то будет число.

    #23965
    AlexanderUshakov
    Участник

    Сделал как вы написали и все получилось, спасибо всем за помощь!
    Правильно я понял, что у расчетного канала, какой бы тип данных в него для расчета не передаешь, то он всегда преобразуется в double?

    #23966
    a80808
    Участник

    Для пятой версии да. В шестой возможны варианты 🙂

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