Стартовая страница › Форумы › Ошибки в работе › Не отобр данные System.string получ из OPCUA
- В этой теме 11 ответов, 3 участника, последнее обновление 2 месяца, 1 неделя назад сделано
sakhalin_Cat.
-
АвторСообщения
-
08.12.2024 в 14:30 #36049
sakhalin_Cat
УчастникДоброго дня.
Никак не могу вывести данные SYSTEM.string получаемые с сервера OPCUA.
Любые форматы данных выводятся нормально кроме SYSTEM.string.
Причем в Линии канал отображается с данными, но в представление вывести его не получается.
—
—
—
—
Большая-
Эта тема была изменена 2 месяца, 1 неделя назад от
sakhalin_Cat.
-
Эта тема была изменена 2 месяца, 1 неделя назад от
sakhalin_Cat.
-
Эта тема была изменена 2 месяца, 1 неделя назад от
sakhalin_Cat.
08.12.2024 в 14:36 #36053sakhalin_Cat
УчастникОтображает нули.
то, что показывается 71 это int32, это необработанное значение датчика. А обработанное значение ACP сервер выдает в Syst em.String и оно не выводится. Если взять другой тэг без обработки (int32) то вывод есть, но это не те значения которые нужны-
Этот ответ был изменен 2 месяца, 1 неделя назад от
sakhalin_Cat.
-
Этот ответ был изменен 2 месяца, 1 неделя назад от
sakhalin_Cat.
08.12.2024 в 18:06 #36063JurasskPark
УчастникУ String на скриншоте стоит длина массива 1. По умолчанию 1 канал(тег) String это 4, т.е. 8 байт и вы получите 4 буквы.
09.12.2024 в 00:59 #36065sakhalin_Cat
УчастникЗдравствуйте.
Спасибо за подсказку, но не взлетело.
Я и в каналах «тип данных менять пробовал» и ASCII и UNICODE если их выбрать показывает восклицательные знаки.09.12.2024 в 01:35 #36066sakhalin_Cat
УчастникПри любой длине массива в настройках канала данные в табличке канала отображаются корректно вместе с привязками:
—
—
Значения в каналах №9 — №16 являются актуальными и не изменяются при изменении длины в настройках System.String.
Канал №10 считывает данные из другого регистра и на него не нужно обращать внимание.
Я пробовал менять длину System.String на 2,3,4 никаких изменений в табличке не происходит.
—
Учитывая сей факт можно сделать вывод, что коммуникатор считывает данные корректно. Проблема на мой взгляд дилетанта где-то дальше, вот только где?09.12.2024 в 07:02 #36067manjey73
УчастникМне кажется тут нужны формулы преобразования в число, в самом канале.
Для начала, включите в канале отображение максимум знаков.
D.DDDDDD кажется там 6 знаков после запятой есть. Я добавлял до восьми, по аналогии в таблице Форматов.
У вас показывает 0,0 потому что это очень маленькие цифры в тюитоге получаются, если строка конвертируется в double.На одном из каналов сделайте формат Строка и тип Ascii string
Что покажет? Хотя может слететь привязка.09.12.2024 в 07:05 #36068manjey73
УчастникПо логу устройства у вас единственное число это Лаба Гигрометр — 71.000 так всегда Коммуникатор показывает числа с 3 знаками в дробной части.
Остальные явно идут строки.09.12.2024 в 11:04 #36074sakhalin_Cat
УчастникКакая еще конвертация?
Я ничего не конвертирую, а надо конвертировать? Если да, то какая формула?
В табличке реальные цифры температуры 16,8 градуса 10,1 градуса, так-же как и реальные цифры влажности. Эти данные соответствуют действительности за исключением 13 и 14, там датчик отключен пока.
—
—
Но толку нет, они у меня всё-равно не выводятся.
настройки каналов ниже
—
Крупно
—
Крупно09.12.2024 в 11:29 #36075manjey73
УчастникУ вас 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 и укажите этот формат для канала
Так же что покажет?09.12.2024 в 11:31 #36076manjey73
УчастникДа, если вы получаете строку, но оставляете ее отображение как числовое для БД, то оно преобразует первые 8 байт, если не указана длина в число double. Не конвертирует это в число, которое вы видите а именно преобразует набор байт и запихивает их в байты числа double.
Честно говоря с OPC и строковыми как-то не сталкивался. Почему именно System.String ?
Так формирует контроллер ?-
Этот ответ был изменен 2 месяца, 1 неделя назад от
manjey73.
09.12.2024 в 14:21 #36081manjey73
УчастникВ общем по формуле для строк во входном канале прописывать
CnlUnicodeToDouble(Cnl)сама формула
public double CnlUnicodeToDouble(double val) { double result = Double.NaN; string s = DecodeUnicode(val); result = ScadaUtils.ParseDouble(s); return result; }
ну вероятно ее можно окультурить. Смысл значение канала — байтовое представление строки сразу закинуть числом. ScadaUtils.ParseDouble это формула в ядре, которая определяет «.» и «,» в строке.
10.12.2024 в 12:55 #36091sakhalin_Cat
УчастникСпасибо
-
Эта тема была изменена 2 месяца, 1 неделя назад от
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.