Спасибо за ответ. Тоже было время подумать, хотелось структурировать все по окнам, кто за что отвечает, вставить управляющие элементы под соответствующими Контейнерами... но наверно не судьба и немного не корректно так делать. Красота страдает... остается играть теми "кубиками" что есть
А чем не устраивает поставить легенду под график?
Можно сделать окно высокое, сверху тренд, снизу легенду,
Потом загнать окно в контейнер с одинаковой шириной , и сделать прокрутку вниз
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