Спасибо за ответ. Тоже было время подумать, хотелось структурировать все по окнам, кто за что отвечает, вставить управляющие элементы под соответствующими Контейнерами... но наверно не судьбаи немного не корректно так делать. Красота страдает... остается играть теми "кубиками" что есть
А чем не устраивает поставить легенду под график?
Можно сделать окно высокое, сверху тренд, снизу легенду,
Потом загнать окно в контейнер с одинаковой шириной , и сделать прокрутку вниз
Screenshot_11.png
Читаете мыслитак и поступил
Здравствуйте,Коллеги!
Подскажите, пожалуйста,как сделать чтение и запись регистра Modbus float в одном поле текстового ввода (или другом элементе).
В контроллере существует регистр Modbus TCP (чтение и запись по одному адресу) необходимо осуществлять отображение значение регистра и его изменение в в одном поле текстового ввода (или другом элементе).
Создаю в Системе протокол с базовым каналом с доступом InOut, в объектах параметр,привязываю его к полю ввода текста и к каналу. Привязывал к каналу в различных вариантах. Отображение в поле текстового ввода происходит нормально, запись регистра работает не стабильно, выглядит как конкуренция записи старого и нового значения.
Q_MS4_1.jpg.
Сомневаюсь, что такая схема будет стабильно отрабатывать. Проще разнести функции чтения и записи, как по контролам, так и по регистрам. Сделайте два регистра с одинаковыми адресами - только один на чтение, другой на запись. Аналогично с контролами - для отображения контрол Текст, а для записи значения контрол Инкремент (контрол Текстовый ввод только для ввода текста, но никак не для значений).
Спасибо, VladGC, b_aleks!
С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
Q_MS4_2.1.jpg
Q_MS4_2.2.jpg
Шаг инкримента указали правильный?
Еще можно сделать промежуточную переменную, и округлять переменную.
Сделать что то вроде такого:
Создать программу, вход регистра связать с выходом программы
Выход программы с входом регистра,
Точно так же связать с инкриментом
Округлять можно так
FUNCTION funRound : LREAL
VAR_INPUT
IN: LREAL := 0;
N: INT := 0;
END_VAR
VAR_OUTPUT
EnO: BOOL := True;
END_VAR
VAR
DECADES: ARRAY [0..8] OF LREAL := [1, 10, 100, 1000, 10000, 10000, 100000, 1000000, 10000000];
X: LREAL := 0;
END_VAR
X := DECADES[LIMIT(0,N,8)];
funRound:= DINT_TO_REAL(REAL_TO_DINT(in * X)) / X;
END_FUNCTION