Не отобр данные System.string получ из OPCUA

Стартовая страница Форумы Ошибки в работе Не отобр данные System.string получ из OPCUA

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

    Доброго дня.
    Никак не могу вывести данные SYSTEM.string получаемые с сервера OPCUA.
    Любые форматы данных выводятся нормально кроме SYSTEM.string.
    Причем в Линии канал отображается с данными, но в представление вывести его не получается.







    Большая

    • Эта тема была изменена 2 месяца, 1 неделя назад от sakhalin_Cat.
    • Эта тема была изменена 2 месяца, 1 неделя назад от sakhalin_Cat.
    • Эта тема была изменена 2 месяца, 1 неделя назад от sakhalin_Cat.
    #36053
    sakhalin_Cat
    Участник

    Отображает нули.
    то, что показывается 71 это int32, это необработанное значение датчика. А обработанное значение ACP сервер выдает в Syst em.String и оно не выводится. Если взять другой тэг без обработки (int32) то вывод есть, но это не те значения которые нужны

    • Этот ответ был изменен 2 месяца, 1 неделя назад от sakhalin_Cat.
    • Этот ответ был изменен 2 месяца, 1 неделя назад от sakhalin_Cat.
    #36063
    JurasskPark
    Участник

    У String на скриншоте стоит длина массива 1. По умолчанию 1 канал(тег) String это 4, т.е. 8 байт и вы получите 4 буквы.

    #36065
    sakhalin_Cat
    Участник

    Здравствуйте.
    Спасибо за подсказку, но не взлетело.
    Я и в каналах «тип данных менять пробовал» и ASCII и UNICODE если их выбрать показывает восклицательные знаки.

    #36066
    sakhalin_Cat
    Участник

    При любой длине массива в настройках канала данные в табличке канала отображаются корректно вместе с привязками:

    Табличка канала

    Значения в каналах №9 — №16 являются актуальными и не изменяются при изменении длины в настройках System.String.
    Канал №10 считывает данные из другого регистра и на него не нужно обращать внимание.
    Я пробовал менять длину System.String на 2,3,4 никаких изменений в табличке не происходит.

    Учитывая сей факт можно сделать вывод, что коммуникатор считывает данные корректно. Проблема на мой взгляд дилетанта где-то дальше, вот только где?

    #36067
    manjey73
    Участник

    Мне кажется тут нужны формулы преобразования в число, в самом канале.
    Для начала, включите в канале отображение максимум знаков.
    D.DDDDDD кажется там 6 знаков после запятой есть. Я добавлял до восьми, по аналогии в таблице Форматов.
    У вас показывает 0,0 потому что это очень маленькие цифры в тюитоге получаются, если строка конвертируется в double.

    На одном из каналов сделайте формат Строка и тип Ascii string
    Что покажет? Хотя может слететь привязка.

    #36068
    manjey73
    Участник

    По логу устройства у вас единственное число это Лаба Гигрометр — 71.000 так всегда Коммуникатор показывает числа с 3 знаками в дробной части.
    Остальные явно идут строки.

    #36074
    sakhalin_Cat
    Участник

    Какая еще конвертация?
    Я ничего не конвертирую, а надо конвертировать? Если да, то какая формула?
    В табличке реальные цифры температуры 16,8 градуса 10,1 градуса, так-же как и реальные цифры влажности. Эти данные соответствуют действительности за исключением 13 и 14, там датчик отключен пока.



    Но толку нет, они у меня всё-равно не выводятся.
    настройки каналов ниже


    Крупно


    Крупно

    #36075
    manjey73
    Участник

    У вас 13 и 14 каналы показывают 255, таблице лога устройства.
    Всего 4 символа. Предположу, что из OPC приходит Unicode.
    Если бы был Ascii то показывал бы 8 символов.

    Тут надо тогда увеличить длину до 2-х
    Остальные каналы так же показывают по 4 символа. Если там нет сотых, то значение типа 15,3 так же занимает 4 символа unicode

    В настройке канала, например 15. Укажите в формате String, в типе данных укажите Unicode string
    — Что получится ?
    Для канале 16 укажите формат D.DDDDDD
    Или в таблице форматов добавьте по аналогии с D.DDDDDD еще и отображение D.DDDDDDDD и там пропишите N8 и укажите этот формат для канала
    Так же что покажет?

    #36076
    manjey73
    Участник

    Да, если вы получаете строку, но оставляете ее отображение как числовое для БД, то оно преобразует первые 8 байт, если не указана длина в число double. Не конвертирует это в число, которое вы видите а именно преобразует набор байт и запихивает их в байты числа double.

    Честно говоря с OPC и строковыми как-то не сталкивался. Почему именно System.String ?
    Так формирует контроллер ?

    • Этот ответ был изменен 2 месяца, 1 неделя назад от manjey73.
    #36081
    manjey73
    Участник

    В общем по формуле для строк во входном канале прописывать
    CnlUnicodeToDouble(Cnl)

    сама формула

    public double CnlUnicodeToDouble(double val)
    {
      double result = Double.NaN;
      string s = DecodeUnicode(val);
      result = ScadaUtils.ParseDouble(s);
      return result;
    }

    ну вероятно ее можно окультурить. Смысл значение канала — байтовое представление строки сразу закинуть числом. ScadaUtils.ParseDouble это формула в ядре, которая определяет «.» и «,» в строке.

    #36091
    sakhalin_Cat
    Участник

    Спасибо

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