Просмотр полной версии : СПК1хх[M01],вывод окна с сообщением.
Добрый день.Подскажите ,пожалуйста,как можно реализовать вывод диалогового окна(MessageBox)с текстовым сообщением,например,при выполнении xB1=TRUE.
Прошу закрыть тему,нашел решение.
Евгений Кислов
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
Благодарю,как раз нашел решение на Вашем Ю-канале.
ВладОвен
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
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot