Twincat 3 Webvisu: Überachung wenn Browser geschlossen wird

hkic

Level-1
Beiträge
16
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich habe ein Projekt, bei dem ich eine Webvisu habe mit ein paar Anzeigen und 3 Buttons. (keine TE2000 HMI)
Der Kunde möchte dass die Anlage stoppt wenn die Webvisu im Browser geschlossen wird. Dafür habe ich noch keine Lösung gefunden.

Hat jemand eine Idee wie man das löst? Alle Elemente sind Ereignisgesteuert.

Vielen Dank,

Herbert
 
Ich habs gelöst!
Und zwar muss man ein neues PRG erstellen und beim Visu Task das PRG aufrufen.
folgenden Code:

Code:
VAR
    pClient       :    POINTER TO VisuElems.VisuElemBase.VisuStructClientData;
   ClientCount : INT := 0;
END_VAR


// Webvisu Control if HMI is open or closed in the browser
// When HMI is closed then Machine Stop
VisuElems.g_ClientManager.BeginIteration();
ClientCount:=0; 
WHILE (pClient := VisuElems.VisuElemBase.g_ClientManager.GetNextClient()) <> 0 DO
    IF pClient^.GlobalData.ClientType = VisuElems.VisuElemBase.Visu_ClientType.WebVisualization THEN
      ClientCount:= ClientCount+1;
    END_IF
END_WHILE

IF ClientCount = 0 THEN
   HMI.bActive:= FALSE; // FALSE = Webvisu in Browser closed
ELSE
   HMI.bActive := TRUE; // TRUE = Webvisu in Browser opened
END_IF
 
Code:
// einfacher:
HMI.bActive := ClientCount <> 0; // TRUE = Webvisu in Browser opened

// statt:
IF ClientCount = 0 THEN
   HMI.bActive:= FALSE; // FALSE = Webvisu in Browser closed
ELSE
   HMI.bActive := TRUE; // TRUE = Webvisu in Browser opened
END_IF
 
Um nur auszuwerten, ob mindestens 1 Client vorhanden ist, muß man nicht komplett zählen wieviele Clients vorhanden sind - die WHILE-Schleife kann man auch schon beim ersten gefundenen Client verlassen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Z.B.
Code:
VAR
    pClient    : POINTER TO VisuElems.VisuElemBase.VisuStructClientData;
END_VAR
// Test Webvisu whether HMI is open in the browser
VisuElems.g_ClientManager.BeginIteration();
HMI.bActive:= FALSE; 
WHILE (pClient := VisuElems.VisuElemBase.g_ClientManager.GetNextClient()) <> 0 AND NOT HMI.bActive DO
    HMI.bActive:= pClient^.GlobalData.ClientType = VisuElems.VisuElemBase.Visu_ClientType.WebVisualization;
END_WHILE [COLOR=#222222][FONT=Verdana]// ; ?
[/FONT][/COLOR]// Stop Machine if HMI is closed
Da in TwinCat3 anscheinend "C-mässig" Zuweisungen in Abfragen möglich sind, wird vielleicht ebenso "C-mässig" die Abfragerei abgebrochen, sobald ihr Ergebnis feststeht.
Dann könnte sogar folgendes genügen?
Code:
VAR
    pClient    : POINTER TO VisuElems.VisuElemBase.VisuStructClientData;
END_VAR
// Test Webvisu whether HMI is open in the browser
VisuElems.g_ClientManager.BeginIteration();
HMI.bActive:= FALSE; 
WHILE (pClient := VisuElems.VisuElemBase.g_ClientManager.GetNextClient()) <> 0 AND NOT (HMI.bActive := pClient^.GlobalData.ClientType = VisuElems.VisuElemBase.Visu_ClientType.WebVisualization) DO // ; ?
END_WHILE [COLOR=#222222][FONT=Verdana]// ; ?[/FONT][/COLOR]
// Stop Machine if HMI is closed
 
Zurück
Oben