...в котором, однако, не нашёл переменных, позволяющих цеплять его к конкретному полю структуры...
Вид для печати
...в котором, однако, не нашёл переменных, позволяющих цеплять его к конкретному полю структуры...
есть какая-то штука, названная в переводе "переключить переменную фрейма", но, кажется, не оно.
А никаких других кандидатов на это дело не наблюдается.
А у меня 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. чего-то не ясно, почему кнопки внутри панели размножать нельзя, а панели по основному экрану - можно.
Дома вечером попробую.
Фактически, тут всё есть, чтобы мне сделать нужное.
Кое что предстоит выяснить на будущее и для собственного любопытства.
есть мнение, что тиражирование сделано так, что работает только с конкретными объектами, под который память отведена, например экземпляры структур. А они у нас появляются только когда основной экран рисуем. Всё, что до этого, в том числе и внутрипанельное - это абстрактное описалово, потому и не цепляется...
тут другой вопрос:
для отображения кириллицы надо включать в менеджере визуализации пункт "использовать строки Unicode", так?
Так почему-то оно не помогает. То есть, что надписи на кнопках и прямоугольниках да, получаются, хотя какие-то зубчатые из-за масштабирования текста, а вот которые динамически менять через переменную - что-то не хотят. Сейчас посмотрю, было ли оно в "кине"... Нет, там латиницей обзывали.
Для кирилицы надо использовать переменные типа wstring. Библиотека standard64, в ней же и все строковые функции с префиксом w. Это помимо галочки про юникод.
ага, получается. Там ещё вместо ' надо ".
А у меня в оболочке глюк :-( . когда в панели инструментов (где графика) по вкладкам тыкаю, они не разворачиваются.
Добрый день. Возможно-ли вставить сюда сеть протокола "Овен"? Вложение 30627
Добрый день. К сожалению, нет. Для опроса приборов по протоколу Овен используйте библиотеку OwenNet:
http://www.owen.ru/catalog/codesys_v3/80224381
Спасибо за ответ. Тогда такой вопрос. Если я напишу программу опроса, как организовать её работу чтобы ей пользовались к примеру 5 переменных для опроса прибора?
Извините, не понял вопрос. О каких 5 переменных речь? Можно привести более конкретный пример?
К примеру пишу программу для опроса прибора - открыть СОМ порт и т.д.... Мне нужно эту программу писать для каждой переменной (которую я хочу прочитать с прибора) или я могу её написать один раз и использовать как шаблон для остальных переменных для опроса прибора, Как это сделать?
СOM-порт достаточно открыть один раз. См. пример в документации - там происходит чтение одной переменной и запись другой. Чтение пяти переменных можно оформить по аналогии.
http://ftp.owen.ru/index.html/CoDeSy...owen_v.1.1.pdf
Народ, может кто поможет нубу с такой проблемой.
Задача такая: Нужно запустить условный кулер на 5 секунд, если если появилась первая ошибка запускаем кулер еще раз, если снова ошибка срабатывает сигнализация.
Подобный код не выдает необходимый алоритм. Повторный запуск не происходит.
Очень похоже, что ответ будет очевиден и просто я тупой, но все-же, может кто пояснит. Заранее благодарю.Код:PROGRAM PLC_PRG
VAR
var1: BOOL := false;
error: INT := 0;
TPinst: TP;
Var0: BOOL;
alarm: BOOL;
END_VAR
label: TPInst(IN := Var0, PT:= T#5S);
Var1 :=TPInst.Q;
IF TPInst.ET=T#5S THEN
CASE error OF
0: error:=error+1;
JMP label;
1: error:=error+1;
alarm:=TRUE;
END_CASE
END_IF
добрый день снова.
отзеркаливание фреймов бывает? (ну, не хочется такой же второй рисовать, хочется существующий отразить, как в автокаде каком-нибудь)?
Вращение вот точно есть.
дорисовался, блин...
paint buffer overflow
Советуют его увеличить в расширенных настройках менеджера визуализации. Только почему-то их не найти.
или даже я найду, где увеличить, а ПЛК323-24.03.01 это потом не вытянет, как это заранее узнать?
ПЛК323 - скорее всего, не вытянет, он не предназначен для отрисовки сложной визуализации.
Вложение 30653
Как запустить application.app с помощью только "CODESYS Control RTE3", без среды разработки?
Перерыл документацию, все что нашел
VisualClientController.exe --application=Application --flags=1 (restart)
Эта утилита никак не реагирует ни на эту, ни на другие параметры.
Добрый день. Подскажите как использовать стандартный диалог выбора файла (FileOpenSave) ?
Тестирую на WinControl PLC. В тест-проекте есть кнопка, на кнопку положил действие открыть диалог FileOpenSave. В runtime при нажатии на кнопку срабатывает внутреннее исключение.
Посмотрел учебные проекты - в них отправляется команда на ПЛК для открытия диалога (я буду использовать СПК110.Д с вводами/выводами на борту).
Посмотрел хелп, в котором описан диалог на примере логина.
Обычно диалоги открытия файлов вызываются с начальной директорией, маской файлов и т.д. Скорее всего для инициализации надо использовать ФБ Visu_FbFileListProvider?
Запускается, естественно, сам виртуальный контроллер. Но, в теории, можно подложить application.app (и остальные файлы/каталоги) в его директорию - .../папка установки CODESYS/GatewayPLC. При старте виртуального контроллера должен происходить автоматический запуск расположенного в данной папке приложения.
Upd. - провел эксперимент на виртуальнике (обычном, не RTE) - методика работает.
1.Чтение/запись файла выполняется моим ФБ в котором используется функции библиотеки SysFile. Это уже проверено и работает.
2.Стандартный вариант формирования рецептов мне не подходит. Поэтому парсинг txt файла будет выполняться мной.
3.Рецептов может быть сколь угодно много. С сохранением рецепта проблем нет. А для выбора файла будет открываться диалог FileOpenSave, по результатам диалога я должен получить полный путь к файлу.
Пример http://www.cta.ru/cms/f/460233.pdf (98 стр.)
Контроллер СПК110.Д
И еще один вопрос. Можно ли программно(POU PRG) добавлять/удалять строки в объекте проекта "Список текстов.." ?
Ну, теоретически, можно - списки текстов представляют собой обычные текстовые файлы в папке Visu, можно редактировать их, и потом в процессе работы обновлять в проекте через функцию DynamicTextReloadTexts из библиотеки CmpDynamicText.
Но, в целом, это выглядит странными решением, сложно представить ситуацию, в которой оптимальным было бы именно оно.
Коллеги прошу помощи.
При работе с виртуальным контроллером Control Win V3 не могу с ним соединится.
В установках соединения сканирую сеть и нахожу устройство с адресом 0080.
При нажатии Enter выскакивает сообщение Вход пользователя устройства в систему: Вы не обладаете достаточными правами для выполнения этой операции. Введите имя и пароль. Какое имя и пароль вводить? И если оно было ранее введено как стереть, чтобы ввести по новой?