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

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

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

    Добрый день!
    Версия 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.
    #23468
    a80808
    Участник

    Пример не отображается.
    Что то мне подсказывает, что значение должно быть числовое…

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

    Условия в динамическом рисунке сравнивают числовые значения.
    Либо нужно в формуле канала преобразовать строку в число, либо (желательно) получить от OPC-сервера числовое значение.

    #23489
    AlexanderUshakov
    Участник

    «Либо нужно в формуле канала преобразовать строку в число»
    А формула должна быть входная или выходная? Или без разницы?
    А то у меня как-то не вышло.
    Сделал такой скрипт
    public int StrToInt(string s)
    {
    int stringToInt = Convert.ToInt32(s);
    return stringToInt;
    }

    включил формулу и в клетке Входная формула написал — StrToInt(135) 135- это номер канала, проект у меня не запустился.

    #23491
    Romiros
    Участник

    Ну Вы сами проанализируйте, что написали. Вместо строки передаете 135.
    Тогда уже StrToInt(Val(135)). Безопаснее наверное TryParse использовать.

    #23493
    AlexanderUshakov
    Участник

    Спасибо за замечание.
    Сделал так:
    1. Написал StrToInt(Val(135)) в ячейке входная формула.
    2. В ячейке Формат указал D.

    Проект не запускается, запись в журнале:
    [ERR] Ошибка при компиляции исходного кода скриптов и формул: (362,61):error CS1503: Argument 1: cannot convert from ‘double’ to ‘string’

    почему описана конвертация из дабл в стринг?
    ради интереса выбрал встроенный скрипт public double EncodeUnicode(string s)
    результат получил точно такой же

    #23494
    manjey73
    Участник

    Потому что память канала на самом деле double, то есть у вас в канале преобразованная строка в 8-мь байт и отображается как double.

    Нужно обратно в строку внутри формулы еще преобразовать.

    #23495
    AlexanderUshakov
    Участник

    Сделал конвертацию и из double в строку потом в int и просто из double в int. Проект работает, но картинка не меняется.
    Но если выводить в динамический текст, то значение меняется с 0 на 1 и обратно. Причем, если я у канала ставлю Формат D вместо Строка, то получаю в тексте «!!!»
    Хотя я же в int сконвертировал, и значение должно быть в int и понимать формат этот.
    Если поле формат вообще пустым оставляю, то динамический текст корректно работает.

    #23496
    manjey73
    Участник

    Значит что-то в нитуда сконвертировано… Если значение цифровое, то там на формат количества знаков после запятой все равно, для целых числе просто нулей будет больше.

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

    В версии 6:
    1. Создайте новый канал вычислимого типа.
    2. Формула созданного канала DecodeAscii(Val(135)) == "1" ? 1 : 0

    #23522
    AlexanderUshakov
    Участник

    Михаил,у меня приходит из 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.
    #23528
    Mikhail
    Модератор

    Канал 158 в Integer в динамическом тексте показывает 1

    Это самое главное. А на 0 меняется, когда строка меняется?

    Добавьте на схему динамический текст с числовым каналом для наглядности. Присылайте сюда ссылки на скриншоты.

    #23567
    AlexanderUshakov
    Участник

    Михаил, сделал так:
    Добавил канал
    Номер «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, но треугольник на зеленый не поменялся, появилось изображение по умолчанию — серый треугольник.

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

    Тип данных должен стоять пустой (что означает double). Формат — число. Канал 159 не нужен, достаточно 158.

    #23576
    AlexanderUshakov
    Участник

    Михаил, сделал как вы сказали, динамический рисунок заработал.
    Получается мне все каналы для динамических рисунков через конвертацию в расчетные каналы делать?
    Попробовал сделать тип пустой у родного канала 124 и вашу формулу, получаю 0, что недостоверно

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