PDA

Просмотр полной версии : СПК1хх[M01],вывод окна с сообщением.



rndr
23.12.2020, 12:05
Добрый день.Подскажите ,пожалуйста,как можно реализовать вывод диалогового окна(MessageBox)с текстовым сообщением,например,при выполнении xB1=TRUE.

rndr
23.12.2020, 12:09
Прошу закрыть тему,нашел решение.

Евгений Кислов
23.12.2020, 12:11
Добрый день.
Если нужен именно MessageBox, то вот пример:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_MessageBox_3514_v1.projectarchive

Если подойдет вариант со своим диалогом (созданным в проекте), то проще будет использовать его:
https://youtu.be/_kA9WVtbg3A

rndr
23.12.2020, 12:30
Благодарю,как раз нашел решение на Вашем Ю-канале.

ВладОвен
07.06.2022, 10:03
Здравствуйте.
Вариант со своим диалогом из Ю-видео (тыц (https://www.youtube.com/watch?v=_kA9WVtbg3A)) отличная идея. Просто и быстро.
Но есть нюанс (c):
При переименовании экрана визуализации (рефакторинг) все проходит нормально, но в коде не переименовывается. Рефакторинг не видит то, что в кавычках (выделил жирным).

fbError(xExecute:=TRUE,itfClientFilter:=VU.Globals .AllClients,sDialogName:='SomethingPushMessageBox' ,xModal:=TRUE);
Т.е. окно визуализации переименовалось, а название этого окна в коде - нет. При компиляции и последующей отработке кода функциональный блок fbError не вызывает видимых ошибок из-за отсутствующего экрана визуализации, вписанного в аргумент "sDialogName". Код работает в ПЛК, но окно не появляется: SomethingPushMessageBox был переименован в Something2. При большом количестве экранов визуализации и всплывающих окон можно запутаться и начать вспоминать чью-то маму (с). Но это мелочь, так сказать - особенности применения и понимания.

Вопрос в другом:
Я создаю проект, в котором использую глобальную переменную VisuElems.CURRENTVISU. Я хочу чтобы у всех пользователей был виден всегда одинаковый экран (в web, target и service). Т.е. однопользовательская система.
Но этот метод всплывающих окон с применением функционального блока нарушает эту концепцию и всплывающие окна работают независимо.
Печаль.

Евгений Кислов
07.06.2022, 10:30
Добрый день.


всплывающие окна работают независимо.

Подробно опишите, что вы подразумеваете под этой фразой.

ВладОвен
07.06.2022, 10:51
Имеется ввиду следующее:
В проекте используется переменная VisuElems.CURRENTVISU. Она дает однопользовательский режим - где бы вы не переключали визуализацию, она будет переключаться везде синхронно: web (много клиентов), target, service (внутри IDE).
Если же попадается ситуация, при которой выскакивает окно, созданное при помощи библиотеки VisuUtils и ее функционального блока FbOpenDialog, эта концепция нарушается. Окно выскакивает, но вы можете его в web закрыть, а в target оно продолжает висеть и ждет, когда вы его закроете именно в target.
Т.е. рассинхронизация получается: в web вы уже сняли ошибку и начали снова работать, настраивать, "ходить" по экранам визуализации. А в target все еще висит то окно ошибки.
Нарушается концепция глобальной переменной VisuElems.CURRENTVISU и однопользовательской системы.

Евгений Кислов
07.06.2022, 11:14
Окно выскакивает, но вы можете его в web закрыть, а в target оно продолжает висеть и ждет, когда вы его закроете именно в target.


Тогда нужно настроить кнопку закрытия диалога таким образом, чтобы при ее нажатии в коде программы выполнялось закрытие этого диалога для всех клиентов.
См. пример: https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_ClientManager_3517v2.projectarchive

Для нашего СПК прошивок с V3.5 SP17 Patch 3 еще нет (но мы усиленно работаем над их выпуском) - для них можно использовать старую версию примера:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/02_Visu/03_Additional/Example_ClientManager_3511v1.projectarchive

ВладОвен
08.07.2022, 17:10
Привет.
Настроил три таких окна для отображения ошибок при помощи VU.FbOpenDialog. Но планирую в последствии их сделать 100500. Потому что это очень удобно.


IF xFlag1 THEN fbError(xExecute:=TRUE,itfClientFilter:=VU.Globals .AllClients,sDialogName:='Push_Error1',xModal:=TRU E); // Вывод окна ошибки 1
IF xFlag2 THEN fbError(xExecute:=TRUE,itfClientFilter:=VU.Globals .AllClients,sDialogName:='Push_Error2',xModal:=TRU E); // Вывод окна ошибки 2
...
IF xFlag3 THEN fbError(xExecute:=TRUE,itfClientFilter:=VU.Globals .AllClients,sDialogName:='Push_Error3',xModal:=TRU E); // Вывод окна ошибки 3

Скажите, а такой подход будет работать даже и при 100 таких условиях в коде программы?
У меня почему-то при срабатывании условия с xFlag3 выскакивает окно от xFalg1 (т.е. Push_Error1).
Что я делаю не так?
Спасибо.

P.S. Разобрался!!! Там в окне был еще "Динамический текст" (языковая локализация), который я забыл исправить при Copy-Paste!
Всем спасибо за молчание и удачных выходных!

Евгений Кислов
08.07.2022, 17:18
Что я делаю не так?

Выложите простейший проект, на котором это можно будет воспроизвести.

ВладОвен
08.07.2022, 17:30
При копировании окна диалога, я исправил ему текст (показано зеленым на рисунке).
Но про языковую локализацию я забыл (показано красным на рисунке).
Отображалось правильное окно (№3), но текст был от первого окна (№1). Т.е. текст подменялся "Динамическим текстом" от окна №1.
61587