Показано с 1 по 10 из 10

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

  1. #1

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

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

    Спасибо!

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,689

    По умолчанию

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

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

  3. #3

    По умолчанию

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

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

  4. #4

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Вместо окна можете просто нарисовать прямоугольник с кнопкой и менять его бит видимости в программе. Я так делаю отображение статусов.

    Зачем вы всё усложняете?
    Вот у меня 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:04.

  5. #5

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    Если клиента этой определённой WEB-визуализации можно как-то однозначно идентифицировать (например, по IP-адресу) - то можно.
    См. п. 1 здесь:
    https://ftp.owen.ru/CoDeSys3/98_Book...isuIecCode.pdf
    Отличительной особенностью визуализации CODESYS является возможность ее
    отображения на нескольких клиентах визуализации одновременно. Например, представим себе
    следующую ситуацию: на производственной линии некоторой фабрики используется панельный
    контроллер с поддержкой web-визуализации. Оператор производственной линии взаимодействует
    с экраном контроллера (таргет-визуализацией) – наблюдает за значениями параметров
    технологического процесса, переключает экраны, вводит значения уставок и т. д. В это же время с
    web-визуализацией контроллера работают один или даже несколько сотрудников отдела
    аналитики – формируют отчеты, просматривают историю сообщений и т. д. В этот момент на линии
    завершается изготовление очередной партии продукции, и программа контроллера должна
    уведомить об этом оператора – например, отобразив диалоговое окно с соответствующим
    сообщением. Должно ли «всплыть» это же окно у аналитиков? Ответ, конечно, может отличаться в
    зависимости от конкретной ситуации – но вообще, вряд ли аналитики заинтересованы в подобного
    рода оперативной информации; их, скорее, интересуют показатели оптимальности работы
    оборудования, количество произведенной продукции за определенный интервал времени,
    длительность периодов простоя линии из-за поломок и т. д. Соответственно, возникает задача не
    просто «сделать что-то из кода», а «сделать что-то из кода для конкретного клиента
    визуализации». Для этого нужно как-то идентифицировать конкретного клиента – и именно для
    этого используется функциональный блок FbIterateClients. Получив информацию о клиентах
    визуализации – можно по каким-то критериям (например, типу визуализации или IP-адресу
    устройства, на котором открыта web-визуализация) выделить среди них интересующих вас и
    выполнить для этих какое-то действие с помощью одного из блоков библиотеки (например,
    FbOpenDialog).


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

  6. #6

    По умолчанию

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

    ПС Если у оператора одна веб, а у аналитика другая, то прямоугольник, будь он не ладен, будет у вас нарисован только на нужной вам вебке, и следовательно оно выскочит только у одного. Но это вроде только на таргет будет работать, иначе будет как vnc, что у одного, то и у другого. Вроде так.
    Последний раз редактировалось МихаилГл; 29.05.2024 в 20:15.

  7. #7

    По умолчанию

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

    Основная программа
    Код:
    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);

  8. #8

    По умолчанию

    Здравствуйте.
    Необходимо переключать визуализацию на 10-ти мониторах одновременно в определенное время: мониторы 1, 2, 3 - визуализация 1; мониторы 4, 5, 6, 7, 8 - визуализация 2, мониторы 9, 10 - визуализация 3.
    ФБ Фильтр клиентов
    Код:
    FUNCTION_BLOCK Group_Client_Filter IMPLEMENTS VU.IVisualizationClientFilter
    VAR_INPUT
    eGroupVisuClient:						GroupVisuClient;							//Перечисление групп клиентов WEB-визуализации
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    END_VAR
    Метод ФБ Фильтр клиентов
    Код:
    (* For every client can be desided, if it is accepted.
    
     ``TRUE``: Client is accepted*)
    METHOD IsAccepted : BOOL
    VAR_INPUT
    	(* The client, to check*)
    itfClient:								VU.IVisualizationClient;
    END_VAR
    VAR
    END_VAR
    VAR CONSTANT
    IP_70:									STRING:='192.168.1.70';
    IP_71:									STRING:='192.168.1.71';
    IP_72:									STRING:='192.168.1.72';
    IP_73:									STRING:='192.168.1.73';
    IP_74:									STRING:='192.168.1.74';
    IP_75:									STRING:='192.168.1.75';
    IP_76:									STRING:='192.168.1.76';
    IP_77:									STRING:='192.168.1.77';
    IP_78:									STRING:='192.168.1.78';
    IP_79:									STRING:='192.168.1.79';
    END_VAR
    
    Код:
    //IP-адрес клиента визуализации 
    TargetVars.sVisuClientIP:=itfClient.GetIPv4Address();
    
    CASE TargetVars.iGroupVisuClient OF
    			1: IsAccepted:=(TargetVars.sVisuClientIP=IP_70);
    			   IsAccepted:=(TargetVars.sVisuClientIP=IP_71);
    			   IsAccepted:=(TargetVars.sVisuClientIP=IP_72);
    			
    			2: IsAccepted:=(TargetVars.sVisuClientIP=IP_73);
    			   IsAccepted:=(TargetVars.sVisuClientIP=IP_74);
    			   IsAccepted:=(TargetVars.sVisuClientIP=IP_75);
    			   IsAccepted:=(TargetVars.sVisuClientIP=IP_76);
    			   IsAccepted:=(TargetVars.sVisuClientIP=IP_77);
    			
    			3: IsAccepted:=(TargetVars.sVisuClientIP=IP_78);
    			   IsAccepted:=(TargetVars.sVisuClientIP=IP_79);
    END_CASE
    Перечисление Группа клиентов
    Код:
    {attribute 'qualified_only'}
    {attribute 'strict'}
    TYPE GroupVisuClient :
    (
    	GroupVisuClient_1 :=1,					//Клиенты WEB-визуализации Участка сборки шасси 192.168.1.70-72
    	GroupVisuClient_2 :=2,					//Клиенты WEB-визуализации Участка сборки автомобилей 192.168.1.73-77
    	GroupVisuClient_3 :=3					//Клиенты WEB-визуализации Линии сборки кабин 192.168.1.78-79
    );
    END_TYPE
    PLC_PRG
    Код:
    //Передний фронт времени переключения визуализаций
    R_TRIG_MainVisuMonitor(CLK:=TargetVars.stRTC.sGetFormatTime=TargetVars.sStartShift1 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndLunch1 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak11
    							OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak12 OR TargetVars.stRTC.sGetFormatTime='08:27:00');
    
    //Проверка IP клиента на соответствие определенной группе, если совпадает, присваиваем номер группы и переключаем визуализацию на определенных клиентах
    IF TargetVars.sVisuClientIP='192.168.1.70' OR TargetVars.sVisuClientIP='192.168.1.71' OR TargetVars.sVisuClientIP='192.168.1.72'
    	THEN TargetVars.iGroupVisuClient:=1;
    		 fbChangeVisuMainChassis.xExecute:=R_TRIG_MainVisuMonitor.Q;
    END_IF
    
    IF TargetVars.sVisuClientIP='192.168.1.73' OR TargetVars.sVisuClientIP='192.168.1.74' OR TargetVars.sVisuClientIP='192.168.1.75' OR TargetVars.sVisuClientIP='192.168.1.76' OR TargetVars.sVisuClientIP='192.168.1.77'
    	THEN TargetVars.iGroupVisuClient:=2;
    		 fbChangeVisuMainCar.xExecute:=R_TRIG_MainVisuMonitor.Q;
    END_IF
    
    IF TargetVars.sVisuClientIP='192.168.1.78' OR TargetVars.sVisuClientIP='192.168.1.79'
    	THEN TargetVars.iGroupVisuClient:=3;
    		 fbChangeVisuMainCabin.xExecute:=R_TRIG_MainVisuMonitor.Q;
    END_IF
    
    //Вызов ФБ Переключение WEB-визуализации Участок сборки шасси (Главный экран)
    fbChangeVisuMainChassis (xExecute:=R_TRIG_MainVisuMonitor.Q,
    			 	 		 itfClientFilter:=fbGroupClientFilter,
    			 	 		 sVisuName:='Main_screen_Chassis_section');
    						 
    //Вызов ФБ Переключение WEB-визуализации Участок сборки автомобилей (Главный экран)
    fbChangeVisuMainCar (xExecute:=R_TRIG_MainVisuMonitor.Q,
    			 	 	 itfClientFilter:=fbGroupClientFilter,
    			 	 	 sVisuName:='Main_screen_Car_section');	
    						 
    //Вызов ФБ Переключение WEB-визуализации Участок сборки шасси (Главный экран)
    fbChangeVisuMainCabin (xExecute:=R_TRIG_MainVisuMonitor.Q,
    					   itfClientFilter:=fbGroupClientFilter,
    					   sVisuName:='Main_screen_Cabin_line');
    Результат: присвоение номера группы везде 1, вместо 1, 2, 3, и не происходит переключение визуализаций на определенных клиентах.
    Снимок.PNG
    Предполагаю, что проблема либо в коде метода ФБ Фильтр клиентов, либо в формировании сигнала на переключение визуализаций (один одновременный сигнал на несколько ФБ).

  9. #9
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,689

    По умолчанию

    Добрый день.
    Пожалуйста, оставьте в проекте только то, что касается рассматриваемой вами проблемы и отправьте его на support@owen.ru вместе с ссылкой на ваш пост из этой темы.

  10. #10

    По умолчанию

    Добрый день. Проект отправил на support@owen.ru, оперативно ответили и указали на недостатки.

    Может кому пригодится, ссылка на проект https://share.owen.ru/u/ChangeVisu.projectarchive
    Работоспособность проверялась на трех устройствах. Изменения:
    1) В FB Group_Client_Filter объявить вход группа клиентов iGroupVisuClient типа INT
    2) В PLC_PRG три экземпляра данного блока (по числу групп)
    3) Для каждого экземпляра FB в коде задать номер группы
    4) При вызове экземпляра визуализации, указать экземпляр FB
    5) Запуск происходит при помощи xTest.

Похожие темы

  1. всплывающее окно
    от Андрей Абр в разделе Master SCADA 4D
    Ответов: 2
    Последнее сообщение: 31.03.2022, 10:41
  2. Ответов: 1
    Последнее сообщение: 30.10.2018, 10:34
  3. Всплывающее окно
    от Билл в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 29.05.2017, 14:29
  4. Окно визуализации закрывается
    от StAnatoliy в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 17.11.2016, 12:36
  5. Ответов: 1
    Последнее сообщение: 22.09.2014, 19:05

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •