Стартовая страница › Форумы › Ошибки в работе › Не работает динамический рисунок
- В этой теме 42 ответа, 5 участников, последнее обновление 1 год, 9 месяцев назад сделано a80808.
-
АвторСообщения
-
13.05.2022 в 16:45 #23465AlexanderUshakovУчастник
Добрый день!
Версия 6.0.0.0
Получаю значения в string по OPC UA.
Приходит либо 0 либо 1
Создаю в условии динамического рисунка Знач.=0 рисунок такой-то, Знач.=1 рисунок такой-то. Но рисунок не меняется.
В чем может быть дело?
https://disk.yandex.ru/d/5Bp0fhTceLKtPQ- Эта тема была изменена 1 год, 10 месяцев назад от AlexanderUshakov.
- Эта тема была изменена 1 год, 10 месяцев назад от AlexanderUshakov.
- Эта тема была изменена 1 год, 10 месяцев назад от 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 Красный треугольник, Изображение по умолчанию — Серый треугольник.
Что я делаю не так?- Этот ответ был изменен 1 год, 10 месяцев назад от 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, что недостоверно -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.