Стартовая страница › Форумы › Ошибки в работе › Не работает динамический рисунок
- В этой теме 42 ответа, 5 участников, последнее обновление 2 месяца назад сделано
a80808.
-
АвторСообщения
-
13.05.2022 в 16:45 #23465
AlexanderUshakov
УчастникДобрый день!
Версия 6.0.0.0
Получаю значения в string по OPC UA.
Приходит либо 0 либо 1
Создаю в условии динамического рисунка Знач.=0 рисунок такой-то, Знач.=1 рисунок такой-то. Но рисунок не меняется.
В чем может быть дело?
https://disk.yandex.ru/d/5Bp0fhTceLKtPQ-
Эта тема была изменена 2 месяца, 3 недели назад от
AlexanderUshakov.
-
Эта тема была изменена 2 месяца, 3 недели назад от
AlexanderUshakov.
-
Эта тема была изменена 2 месяца, 3 недели назад от
Mikhail.
13.05.2022 в 16:52 #23468a80808
УчастникПример не отображается.
Что то мне подсказывает, что значение должно быть числовое…13.05.2022 в 18:04 #23475Mikhail
МодераторУсловия в динамическом рисунке сравнивают числовые значения.
Либо нужно в формуле канала преобразовать строку в число, либо (желательно) получить от OPC-сервера числовое значение.16.05.2022 в 10:14 #23489AlexanderUshakov
Участник«Либо нужно в формуле канала преобразовать строку в число»
А формула должна быть входная или выходная? Или без разницы?
А то у меня как-то не вышло.
Сделал такой скрипт
public int StrToInt(string s)
{
int stringToInt = Convert.ToInt32(s);
return stringToInt;
}включил формулу и в клетке Входная формула написал — StrToInt(135) 135- это номер канала, проект у меня не запустился.
16.05.2022 в 10:46 #23491Romiros
УчастникНу Вы сами проанализируйте, что написали. Вместо строки передаете 135.
Тогда уже StrToInt(Val(135)). Безопаснее наверное TryParse использовать.16.05.2022 в 11:44 #23493AlexanderUshakov
УчастникСпасибо за замечание.
Сделал так:
1. Написал StrToInt(Val(135)) в ячейке входная формула.
2. В ячейке Формат указал D.Проект не запускается, запись в журнале:
[ERR] Ошибка при компиляции исходного кода скриптов и формул: (362,61):error CS1503: Argument 1: cannot convert from ‘double’ to ‘string’почему описана конвертация из дабл в стринг?
ради интереса выбрал встроенный скрипт public double EncodeUnicode(string s)
результат получил точно такой же16.05.2022 в 11:50 #23494manjey73
УчастникПотому что память канала на самом деле double, то есть у вас в канале преобразованная строка в 8-мь байт и отображается как double.
Нужно обратно в строку внутри формулы еще преобразовать.
16.05.2022 в 16:05 #23495AlexanderUshakov
УчастникСделал конвертацию и из double в строку потом в int и просто из double в int. Проект работает, но картинка не меняется.
Но если выводить в динамический текст, то значение меняется с 0 на 1 и обратно. Причем, если я у канала ставлю Формат D вместо Строка, то получаю в тексте «!!!»
Хотя я же в int сконвертировал, и значение должно быть в int и понимать формат этот.
Если поле формат вообще пустым оставляю, то динамический текст корректно работает.16.05.2022 в 16:34 #23496manjey73
УчастникЗначит что-то в нитуда сконвертировано… Если значение цифровое, то там на формат количества знаков после запятой все равно, для целых числе просто нулей будет больше.
16.05.2022 в 17:04 #23498Mikhail
МодераторВ версии 6:
1. Создайте новый канал вычислимого типа.
2. Формула созданного каналаDecodeAscii(Val(135)) == "1" ? 1 : 0
17.05.2022 в 16:50 #23522AlexanderUshakov
УчастникМихаил,у меня приходит из OPC сервера в Unicode string.
Я в «Каналах», выбрал «Пустое устройство», там добавил канал:
Номер «158»
Наименование «Расчетный»
Тип данных «Integer»
Тип канала «Расчётный»
Входная формулаDecodeUnicode(Val(124)) == "1" ? 1 : 0
124-канал это статус работы вентилятора 1 или 0 в Unicode stringПроект компилируется.
Канал 124 в Unicode string в динамическом тексте показывает 1
Канал 158 в Integer в динамическом тексте показывает 1
Канал 158 в Integer в динамическом рисунке изображение НЕ МЕНЯЕТСЯ. Настройки условия Знач.=1 — Зеленый треугольник, Знач.=0 Красный треугольник, Изображение по умолчанию — Серый треугольник.
Что я делаю не так?-
Этот ответ был изменен 2 месяца, 3 недели назад от
Mikhail.
17.05.2022 в 19:07 #23528Mikhail
МодераторКанал 158 в Integer в динамическом тексте показывает 1
Это самое главное. А на 0 меняется, когда строка меняется?
Добавьте на схему динамический текст с числовым каналом для наглядности. Присылайте сюда ссылки на скриншоты.
18.05.2022 в 13:42 #23567AlexanderUshakov
УчастникМихаил, сделал так:
Добавил канал
Номер «159»
Наименование «Расчетный»
Тип данных «Integer»
Тип канала «Расчётный»
Формат «Строка»
Формула «Val(135)» 135- это канал с температурой.
Канал 158 оставил с формулой DecodeUnicode(Val(124)) == «1» ? 1 : 0
Результат в визуализации:
Канал 159 показывает 0, а канал 135 напрямую 14,6 С
Канал 158 показывает 1, канал 124 напрямую 1
https://disk.yandex.ru/i/6omLFWOyDx69TA -администратор
https://disk.yandex.ru/i/uuPv4Trm62oo6Q -отображениеДалее сделал следующее:
Канал 159 поменял тип на Unicode string получил в визуализации:
Канал 159 показывает 1.33, а канал 135 напрямую 14,7 С
https://disk.yandex.ru/i/JyFEIpNcRY84Ug -администратор
https://disk.yandex.ru/i/Qv65Lu39DIu_sg -визуализацияНо потом выключился вентилятор и рисунок принял значение 0 — появился красный треугольник. Потом Вентилятор включился, принял значение 1, но треугольник на зеленый не поменялся, появилось изображение по умолчанию — серый треугольник.
18.05.2022 в 15:35 #23574Mikhail
МодераторТип данных должен стоять пустой (что означает double). Формат — число. Канал 159 не нужен, достаточно 158.
18.05.2022 в 15:47 #23576AlexanderUshakov
УчастникМихаил, сделал как вы сказали, динамический рисунок заработал.
Получается мне все каналы для динамических рисунков через конвертацию в расчетные каналы делать?
Попробовал сделать тип пустой у родного канала 124 и вашу формулу, получаю 0, что недостоверно -
Эта тема была изменена 2 месяца, 3 недели назад от
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.