Просмотр полной версии : Всплывающее окно только на определённой 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);
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot