PDA

Просмотр полной версии : Всплывающее окно только на определённой WEB-визуализации



aaaSashaMGGU
29.05.2024, 19:10
Добрый день!
По определённому условию хочу сделать появляющееся окно с уведомлением и кнопкой ОК (не на весь экран, а, например, посередине). По нажатию на этот ОК - окно должно закрыться.
Такое окно должно появляться ТОЛЬКО на определённой WEB-визуализации. А на всех прочих WEB-визуализациях оно появляться не должно
Это реально сделать? Если да - то есть, где посмотреть пример?

Спасибо!

Евгений Кислов
29.05.2024, 19:14
Добрый день!
По определённому условию хочу сделать появляющееся окно с уведомлением и кнопкой ОК (не на весь экран, а, например, посередине). По нажатию на этот ОК - окно должно закрыться.
Такое окно должно появляться ТОЛЬКО на определённой WEB-визуализации. А на всех прочих WEB-визуализациях оно появляться не должно
Это реально сделать? Если да - то есть, где посмотреть пример?

Спасибо!

Добрый день.
Если клиента этой определённой WEB-визуализации можно как-то однозначно идентифицировать (например, по IP-адресу) - то можно.
См. п. 1 здесь:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf

МихаилГл
29.05.2024, 19:15
Вместо окна можете просто нарисовать прямоугольник с кнопкой и менять его бит видимости в программе. Я так делаю отображение статусов.

Зачем вы всё усложняете?

aaaSashaMGGU
29.05.2024, 20:01
Вместо окна можете просто нарисовать прямоугольник с кнопкой и менять его бит видимости в программе. Я так делаю отображение статусов.

Зачем вы всё усложняете?

Вот у меня 1 контроллер и 2 ПК: один зашёл на 192.168.1.10:8080/webvisu1.htm, второй зашёл на 192.168.1.10:8080/webvisu2.htm
Как сделать так, чтобы у ПК1 бит невидимости был true, а у ПК2 бит он же был false?

aaaSashaMGGU
29.05.2024, 20:03
Добрый день.
Если клиента этой определённой WEB-визуализации можно как-то однозначно идентифицировать (например, по IP-адресу) - то можно.
См. п. 1 здесь:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysVisuIecCode.pdf

Отличительной особенностью визуализации CODESYS является возможность ее
отображения на нескольких клиентах визуализации одновременно. Например, представим себе
следующую ситуацию: на производственной линии некоторой фабрики используется панельный
контроллер с поддержкой web-визуализации. Оператор производственной линии взаимодействует
с экраном контроллера (таргет-визуализацией) – наблюдает за значениями параметров
технологического процесса, переключает экраны, вводит значения уставок и т. д. В это же время с
web-визуализацией контроллера работают один или даже несколько сотрудников отдела
аналитики – формируют отчеты, просматривают историю сообщений и т. д. В этот момент на линии
завершается изготовление очередной партии продукции, и программа контроллера должна
уведомить об этом оператора – например, отобразив диалоговое окно с соответствующим
сообщением. Должно ли «всплыть» это же окно у аналитиков? Ответ, конечно, может отличаться в
зависимости от конкретной ситуации – но вообще, вряд ли аналитики заинтересованы в подобного
рода оперативной информации; их, скорее, интересуют показатели оптимальности работы
оборудования, количество произведенной продукции за определенный интервал времени,
длительность периодов простоя линии из-за поломок и т. д. Соответственно, возникает задача не
просто «сделать что-то из кода», а «сделать что-то из кода для конкретного клиента
визуализации». Для этого нужно как-то идентифицировать конкретного клиента – и именно для
этого используется функциональный блок FbIterateClients. Получив информацию о клиентах
визуализации – можно по каким-то критериям (например, типу визуализации или IP-адресу
устройства, на котором открыта web-визуализация) выделить среди них интересующих вас и
выполнить для этих какое-то действие с помощью одного из блоков библиотеки (например,
FbOpenDialog).

Спасибо, во вступлении прям 100% то, что нужно. Будем смотреть

МихаилГл
29.05.2024, 20:10
Вы говорите о разных веб страницах, но почему-то об одном бите... Вы же всплывающее окно хотите видеть или не видеть? Или именно определённую веб? Согласно первого сообщения одно, согласно второго - другое. Для второго варианта вам выше ответили.

ПС Если у оператора одна веб, а у аналитика другая, то прямоугольник, будь он не ладен, будет у вас нарисован только на нужной вам вебке, и следовательно оно выскочит только у одного. Но это вроде только на таргет будет работать, иначе будет как vnc, что у одного, то и у другого. Вроде так.

aaaSashaMGGU
30.05.2024, 10:08
Всё получилось. Убрал всё лишнее, осталось совсем мало:

Основная программа

PROGRAM P160_WindowsTest //Всплывающее окно
VAR
//Условие запуска
xExecute: BOOL := FALSE;

//Блок-фильтр клиентов
fbClientFilter: VisuClientFilter;

//Блок для вызова окна
fbOpenFeedbackDialog: VU.FbOpenDialog;
END_VAR


//Вызываем окно 'window' только у клиентов, указанных в ФБ fbClientFilter
fbOpenFeedbackDialog
(
xExecute := xExecute, //Запуск блока
itfClientFilter := fbClientFilter, //Блок-фильтр клиентов
sDialogName := 'window', //Имя окошка
xModal := FALSE, //Можно менять главные мнемосхемы
pTopLeftPosition := , //Позиция окна
);

ФБ для фильтра по IP:

//Блок-фильтр клиентов для вызова всплывающих окон
FUNCTION_BLOCK VisuClientFilter IMPLEMENTS VU.IVisualizationClientFilter

Метод ФБ:

//Метод проверки, что у нас нужный клиент
METHOD IsAccepted: BOOL
VAR_INPUT
//Даже не спрашивайте... Типа какой-то клиент визуализации
itfClient: VU.IVisualizationClient;
END_VAR
VAR CONSTANT
//IP нашего нужного клиента, т.е., панель Siemens оператора
IP: STRING(15) := '192.168.4.231';
END_VAR

Код метода

//Получаем текущий IP и сравниваем его с нашей константой
IsAccepted := (itfClient.GetIPv4Address() = IP);