Как уже сказали надо создать переменную i
А еще на скриншоте у вас массив размером 1, имеет три канала.
Тут цикл не подходит, должно быть примерно так:
Массив структур[1].Канал_1 := Параметр_1[1];
Массив структур[1].Канал_2 := Параметр_1[2];
Вид для печати
Спасибо за подсказку! В первом приближении почти все на месте... только колонка SourceTime уплыл формат (вместо DT, миллиарды) и циклом хотел сделать бегущие бесконечные колонки цифр., а не строчку :(
время исправил указав формат - HH:mm:ss.fff
Добрый день!
Версия: 1.2.13.23187(MPLCD_1_2_20210629.1)
Как можно вывести в отчете итог по итоговой строке?
Вложение 57579
Надо сложить все итоги в этом текстовом поле,
по сути в нем будет еще раз вычисляться итог колонки и суммироваться с другими итогами.
Вложение 57581
Вложение 57582
Вложение 57583
Есть 4 варианта работы моей системы (4 схемы) в основном Окне ставлю три "Окна Контейнера" Схема 1..4(выбор по Флагу), Тренд (в зависимости от Схемы) и Легенда (в зависимости от того что в Тренде). По 4 Флагам управляю всем этим... но когда устанавливаю связи Легенды и Тренда получаю предупреждение "wrong trend ID" и соответственно пустое окно Легенды. Когда все в одном Окне понятно как связь установить, а когда в разных?
ПС видимость/невидимость проще, но в одном окне при большом кол-ве связей - громоздко
Добрый день.
Включите полное дерево и на схеме окна найдите нужный элемент.
Вложение 57695
Спасибо за ответ, но все равно получаю сообщение об ошибке...
Вложение 57696
Сделал все в одном Окне, только связь указал по Вашему способу - работает. Делаю аналогично в разных Окнах - нет. Вырезаю работающую Легенду и вставляю со связями в новое Окно, тоже не работает - wrong trend ID
моя версия v. 1.2.13.23187(MPLCD_1_2_20210629.1)
Спасибо за ответ. Тоже было время подумать, хотелось структурировать все по окнам, кто за что отвечает, вставить управляющие элементы под соответствующими Контейнерами... но наверно не судьба:) и немного не корректно так делать. Красота страдает... остается играть теми "кубиками" что есть
А чем не устраивает поставить легенду под график?
Можно сделать окно высокое, сверху тренд, снизу легенду,
Потом загнать окно в контейнер с одинаковой шириной , и сделать прокрутку вниз
Вложение 57709
Читаете мысли:) так и поступил
Здравствуйте,Коллеги!
Подскажите, пожалуйста,как сделать чтение и запись регистра Modbus float в одном поле текстового ввода (или другом элементе).
В контроллере существует регистр Modbus TCP (чтение и запись по одному адресу) необходимо осуществлять отображение значение регистра и его изменение в в одном поле текстового ввода (или другом элементе).
Создаю в Системе протокол с базовым каналом с доступом InOut, в объектах параметр,привязываю его к полю ввода текста и к каналу. Привязывал к каналу в различных вариантах. Отображение в поле текстового ввода происходит нормально, запись регистра работает не стабильно, выглядит как конкуренция записи старого и нового значения.
Вложение 57850.
Сомневаюсь, что такая схема будет стабильно отрабатывать. Проще разнести функции чтения и записи, как по контролам, так и по регистрам. Сделайте два регистра с одинаковыми адресами - только один на чтение, другой на запись. Аналогично с контролами - для отображения контрол Текст, а для записи значения контрол Инкремент (контрол Текстовый ввод только для ввода текста, но никак не для значений).
Спасибо, VladGC, b_aleks!
С разделением входного и выходного параметра работает корректно, на данном этапе этого достаточно. Но остался вопрос. При применении текстового ввода при отображении значения можно задать формат (f3), при этом "дробный хвост" 4-х байтного float не отображается, в инкременте формата отображения нет. Есть какие-то пути решения с использованием инкремента (второй контрол для отображения использовать нельзя- нужно и ввод и отображение реализовать в 1-м элементе)?
Вложение 57851
Вложение 57852
Шаг инкримента указали правильный?
Еще можно сделать промежуточную переменную, и округлять переменную.
Сделать что то вроде такого:
Создать программу, вход регистра связать с выходом программы
Выход программы с входом регистра,
Точно так же связать с инкриментом
Округлять можно так
Цитата:
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
У меня регистр Modbus - Real 4 байта. Ему точности для LReal не хватает. Таким образом хвост физически будет ( если его не округлить в скаде),как например, предложил VladGC.
А InPar и OutPar у меня LReal.
Спасибо!
Шаг инкремента я в общем-то не использовал... Можно попробовать округлить переменную на входе инкремента, тогда отображаться будет красиво но пока избыточных преобразований делать не очень хочу.
Кстати при циклическом чтении регистра такое преобразование будет производиться постоянно, что наверное может отразиться на производительности при большом количестве переменных...
А в чем криминал использования текстового ввода для ввода числовых значений (при при попытке ввода некорректного значения выдается convert warning)?
Добрый день!
Вопрос по групповой привязке регистров.Есть объект с определенным набором параметров, которые должны быть привязаны к регистрам Modbus TCP. Подскажите, пожалуйста, существует ли возможность групповой привязки регистров (каналов) к объекту? Логично бы выглядела привязка группы каналов к объекту...
В программе упакуйте в массив, в массив структур или что то похожее
Из этой программы передайте в глобальную переменную того же типа, далее обращайтесь к этой переменной из любого места
На скриншоте нет связей на запись регистров, но посыл думаю понятен
Вложение 57879
Спасибо за ответ!
Насколько я вижу таким способом мы уходим от необходимости привязки каналов Modbus к разным параметрам разных объектов. Привязываем все каналы к входам программы внутри модуля МВ 210, что кардинально упрощает работу с привязками, особенно при наличии большого количества каналов - я это правильно понял?
При этом привязка каналов AI X->AI_X осуществляется мышкой вручную? У моего модуля Modbus TCP 188 каналов (спасибо, что сделали импорт из CSV), соответственно каждый нужно будет привязать вручную?
Запись в обратном порядке...
Да, это упростит привязки когда все каналы запакованы
Привязку можно делать вручную, можно воспользоваться редактором связей при дублировании переменных
А самый быстрый вариант в вашем случае использовать таблицу:
В программе создаете нужную переменную, из протокола перетаскиваете связь.
Дублируете переменную в программе на нужное количество, редактор связей подтверждаем без изменений. Тем самым у вас из одной переменной протокола будет связь со всеми дубликатами.
Открываете таблицу, настраиваете запрос с нужными фильтрами( как на скриншоте)
Снизу таблицы появятся список всех переменных которые соответствуют фильтру
Добавляете столбец ,который покажет отношение прием или передачу значения
Экспортируете файл
Редактируете в текстовом редакторе имена связей, у меня vscode, там есть мультикурсор и автоинкремент
Затем импортируете сохраненный файл
и все связи будут настроены.
Когда освоитесь с таблицей, расстановка связей пойдет намного веселей
Вложение 57883
Большие картинки не прикрепляются, скриншоты смотреть в обратном порядке)
https://ibb.co/ygYBQP3
https://ibb.co/hsDjLYx
https://ibb.co/6yNL8NX
https://ibb.co/fXCNGWF
https://ibb.co/82Hmtjy
https://ibb.co/527qd1N
https://ibb.co/KXcQ1G5
https://ibb.co/9hjs4H9
Забавно.... В моей версии такой вкладки нет.
Версия: 1.2.11.19876
Вложение 57923
Здравствуйте!
Можно ли передать параметры из клиента (диалог ввод текста) в параметры настройки протокола (адрес, порт, пароль и т.д.)?
Добрый день.
Нет, эти параметры динамизировать не получится, только задавать в редакторе.
Здравствуйте!
Есть ли у компонента "Инкремент" возможность формата значений при отображении.
К примеру, если изначальное значение параметра связанного с ним = 50.3 (тип REAL) , то при открытии окна с данным компонентом в поле отображается 50.2999999...
Возможно вопрос к свойствам самого параметра, в общем кто знает - прошу помочь с советом
Здравствуйте!
Подскажите пожалуйста по этому вопросу:
Добавил в протокол->запрос->программу SqlRequesrWithResult, на вход command через глобальный параметр подал SQL запрос. Получаю ошибку - Type of Result is NOT an Array.
Справку прочитал, та похоже надо добавить входы/выходы, но не разобрался как.