...в котором, однако, не нашёл переменных, позволяющих цеплять его к конкретному полю структуры...
Вид для печати
...в котором, однако, не нашёл переменных, позволяющих цеплять его к конкретному полю структуры...
есть какая-то штука, названная в переводе "переключить переменную фрейма", но, кажется, не оно.
А никаких других кандидатов на это дело не наблюдается.
А у меня 105 штук панелей, на каждой до 16 разных коммутационных аппаратов. Пусть они тупо рубильники, но натыкивать им вручную кому от кого зависеть - делается печально.
То есть, по всей видимости, на вход подать - можно.
Но всё равно для каждого "ящика" - свой фрейм рисовать. Ну или скопировать, но назначать экземпляр - всё равно руками.
Фреймы вполне могут решить вашу, фреймы можно переключать переменной типа ИНТ, если их несколько и они изменяются в зависимости от условий. Переменную эту можете менять где угодно. На вход/выход фрейма вполне можно вставить любое количество переменных и структур, а так же полей структур. Фреймы могут входить друг в друга, при этом структуру для внутреннего фрейма надо передать во внешний фрейм либо отдельной переменной структуры, либо в составе внешней структуры. Говорят не следует вкладывать фреймы более чем на 3 порядка, я не проверял. У меня пока только 2 порядка было.
Внутри фреймов могут быть свои переменные, которые видны только им. (например str: ARRAY[0..1] OF STRING:=['On','Off']; а в каком нибудь прямоугольнике в текст вписать str[BOOL_TO_INT(bVar)], и тогда надпись будет меняться в зависимости от логической переменной.)
Не обязательно использовать все переменные структуры внутри фрейма. На разные фреймы может быть завязана одна структура, или 2 экземпляра 1 структуры.
Любая наркомания подвластна. Не вижу, какие могут быть ограничения.
Если у вас 105 панелей с 16 рубильниками, то логично создать фрейм с 16 рубильниками, вар ин аут которого является массив структур arstRubilnik[1..16]. В структуру можно впихнуть, что вам нужно(видимость, цвет, переменная вкл/откл, запрет ввода, надпись при рубильнике, и тд).
Этот массив структур пихнуть в отдельную структуру stPanel. (не уверен как оформить массив массивов) Создать массив этих структур по количеству панелей arstAllPannels[1..105]. Вставить фрейм на экран и привязать к нему arstAllPannels[i].stPanel.arstRubilnik. i менять где угодно в программе или визуализации, тем самым изменять панель во фрейме на любую из 105.
не пойму, кто на ком стоял...
пока всё вышеприведённое в разных сочетаниях не поехало.
понимаю так:
1. делаем DUT - структуру на рубильник, в нёй состояния, цвет покраски будущего сигнала визуализации, для краткости оно будет называться тип "рубильник". rub
2. делаем DUT - структуру на панель, в ней разная штуковина, которая относится к панели целиком (пусть будет переключатель местного/дистанционного управления и т.д.) и массив из структур, которые рубильник, пусть он называется тип "панель". pan
3. делаем DUT - структуру на усё хозяйство, в которой нечто общее на все панели вообще и массив из этих панелей.
ну, в облегчённом виде в п. 3 можно сделать массив из панелей, и тогда уже не DUT, а в PLC_PRG в шапке. , оно будет тип "отделение" otd - ну пусть так.
для последней таки делаем экземпляр в PLC_PRG, если не идём по облегчённому варианту с массивом, экземпляр будет называться "экземпляр отделения"
4. вставляем новую визуализацию, которая пусть визуализирует отдельный рубильник. в ней разворачиваем шапку (не тыкательную хрень справа, а то место сверху, где var_in_out написано и туда объявляем переменную, пусть она будет называться ino_rub , у который будет тип "рубильник" (rub)). Рисуем квадратик для сигнализации состояния рубильника. Теперь надо, чтобы квадратик красился цветом, который будет определятся переменной Цвет в структуре "рубильник", являющейся элементом массива рубильников в структуре "панель", являющейся в свою очередь элементом массива в структуре "отделение" в её экземпляре "экземпляр отделения".
выделяем квадратик, идем в правую часть и где "переменные цвета" - "нормальное состояние" - "цвет фрейма" - "цвет заливки" тыкаем. Там вылезает табличка, в ней ищем переменную ino_rub для текущей визуализации, ней находим поле "цвет". Он вставился, почему-то не ino_rub.color, а просто color.
на всякий случай сохраняем это дело и пытаемся для смеха компилировать. Видим два ругательства, что визуализация "рубильник" не имеет экземпляров и третье - что идентификатор color в визуализации "рубильник" не задан. Опаньки. Ну ладно, может, всё целиком поедет...
5. делаем визуализацию для панели. там вставляем элемент "фрейм", нам открывается диалог "конфигурация фрейма". там выбираем визуализацию одиночного рубильника, которую делали выше. Фрейм сразу принимает вид визуализации рубильника, которую заранее сделали маленькой, чтоб влезало. Так делаем 2 раза, пусть пока будет по 2 рубильника на панели и по 2 панели на секции/отделении. Да, в структурах этого тоже по 2 штуки. Ещё на панель приделываем просто прямоугольник, его изменение цвета будет сигнализировать о состоянии панели "в общем". В шапке ему делаем переменную ino Тип pan (панель).
Оба фрейма "рубильников" сразу в правой части заимели в поле "ссылка" значение ino_rub, при компиляции опять ругается на "цвет" в рубильнике и про экземпляры тоже. Про "панель" такого, почему-то, не пишет.
6. то же повторяем про "отделение".
7. делаем последнюю, главную визуализацию "main", туда ставим визуализацию "отделение" во фрейме.
чего дальше - не понял. Надо как-то к "отделению" привязывать экземпляр, запускать и смотреть, как меняются цвета. Если, конечно, оно всё будет, но похоже - нет.
по 4 пункту: переменная должна быть ino_rub.color, а не просто color, тогда одна ошибка компиляции уйдет.
В визуализации main надо дать ссылку на конкретную структуру, экземпляр которой был создан в plc_prg. Внутри фрейма вы это же сделали, а в мейне забыли, вот он и ругается.
Всё будет, надо верить в себя.
Добрый день. Поднятая тема (сложная визуализация, типизация объектов) показалась интересной, поэтому в свободное время на коленке сделал видео.
https://www.youtube.com/watch?v=eHWSI_Ll8VU&
Может быть, кому-то оно в чем-нибудь поможет.
Как сделать запуск проекта без CodeSysa ?
Для этого есть как я понимаю пакет Codesys control RTE? Но как ему указать файл с прогой?
Или проект должен быть "с HMI" ?
ага. не получалось, потому что я делал не так как на 10:42 и 11:25. чего-то не ясно, почему кнопки внутри панели размножать нельзя, а панели по основному экрану - можно.
Дома вечером попробую.
Фактически, тут всё есть, чтобы мне сделать нужное.
Кое что предстоит выяснить на будущее и для собственного любопытства.