Sektion: Visu
SEC Visu //optional: yes, modifier: [UPDATE] Toplevel_Tab; //optional: yes, type: bool Embedded := [%PAGE_VISU%, <visu1>,...]; //optional: yes, type: VisuList Embedded_Proxy := [%PAGE_VISU%, <visu1>,...]; //optional: yes, type: VisuList Page =: [<visu1>, <visu2>,...]; //optional: yes, type: VisuList SEC DefaultEmbeddings //optional: yes SEC Embedding : <visu identifier> //optional: yes, modifier: [HIDE, UPDATE] VisuName := <visu name>; //optional: no, type: literal Target := <target name>; //optional: yes, type: literal ProxyVisuName := <visu name>; //optional: yes, type: literal LinkId := <linkID>; //optional: yes, type: literal END_SEC END_SEC SEC Toplevel_Tab_Hotkey //optional: yes Hotkey := <keycode>; //optional: no, type: literal Modifiers := <modifier>; //optional: yes, modifier: [SHIFT, CONTROL, ALT] END_SEC END_SEC
Details über die Syntax der Definitionstypen sind im Kapitel Syntax der Moduldeklaration beschrieben.
Toplevel_Tab
legt fest, ob die Checkbox Erzeuge Toplevel-Reiter im HMI-Editor standardmäßig aktiviert ist oder nicht.Page
definiert eine Liste von verfügbaren Visualisierungsobjekten eines Submoduls.Embedded
definiert eine konkrete Liste der verfügbaren Visualisierungsobjekte des Submoduls, die in andere Visualisierungsbilder eingebettet werden.Der Platzhalter
%PAGE_VISU%
anstelle des Visualisierungsnamens ermöglicht, dass die erzeugten Visualisierungsbilder optional in andere Seiten eingebettet werden.Embedded_Proxy
definiert eine Liste von verfügbaren Visualisierungsobjekten des Moduls. Die Liste wird nur dann verwendet, wenn einDecoupled-Modul
in einenDecoupled-Slot
eingefügt wird und nicht unter derselben Steuerung wie seine Vater-Modulinstanz (also als Proxy) erzeugt wird.Für Module, die ein anderes Module importieren, kann anstelle des Visualisierungsnamens der Platzhalter
%NONE%
eingesetzt werden. Dies bewirkt ein Verstecken der importierten Visualisierungen. Dieses Vorgehen ist für sowohl für die Liste der Visualisierungsbilder als auch für eingebettete (Proxy-)Visualisierungsbilder möglich.Sektion
DefaultEmbeddings
: Diese Sektion dient der Angabe von Standardeinbettungen, die dann auf der Registerkarte HMI eines Submoduls bereits vorkonfiguriert erscheinen (ähnlich der SektionDefault_Allocation
, siehe Sektion Slots). Die gewünschten Standardeinbettungen werden dazu in UntersektionenEmbedding
beschrieben.Voraussetzung: Das angegebene Visualisierungsobjekt und der Proxy müssen in der Liste der möglichen Einbettungen für dieses Modul enthalten sein (siehe oben:
Embedded
undEmbedded_Proxy
).Sektion
Toplevel_Tab_Hotkey
: Diese Sektion definiert ein Tastaturkürzel als Standardeinstellung für eine Toplevel-Seite. Tastaturkürzel dürfen nicht mehrfach verwendet werden. Diese Einstellung kann im Moduleditor in der Registerkarte HMI angepasst werden.
SEC Visu Toplevel_Tab ; Page := [VISU_CNC_Machine_1, VISU_CNC_Machine_2]; Embedded := [%PAGE_VISU%]; SEC DefaultEmbeddings SEC Embedding : No1 VisuName := SubModule_Emb; Target := '../../TopLevel_2'; END_SEC SEC Embedding : No2 VisuName := SubModule_Emb_2; //ProxyVisuName := SubModule_Emb_1; Target := '';// leave empty for next ancestor END_SEC END_SEC SEC Toplevel_Tab_Hotkey Hotkey := T; Modifiers := SHIFT | CONTROL; END_SEC END_SEC
Der Visualisierungsname ist der Name des entsprechenden Visualisierungsobjekts, wobei Groß- und Kleinschreibung keine Rolle spielt. Das Visualisierungsobjekt muss sich in der selben Hierarchieebene befinden wie der Funktionsbaustein des Moduls.
Alle Visualisierungsobjekte und eingebetteten Visualisierungsobjekte können eine VAR_IN_OUT-Variable mit Namen
inst
vom Typ des Modulfunktionsbausteins oder einer Basisklasse haben (Groß- und Kleinschreibung beim Variablennamen spielt keine Rolle).VAR_IN_OUT
inst : <MODULE_FB> ;
END_VAR
Alternativ zu der hier beschriebenen Möglichkeit mit VAR_IN_OUT kann auch eine VAR_INPUT-Variable verwendet werden. Diese Variable muss folgende Anforderungen erfüllen:
Name:
inst
Typ: Interface, das der Modulfunktionsbaustein implementiert
Eingebettete Visualisierungsobjekte können zusätzlich zwei weitere Variablen haben (Groß- und Kleinschreibung bei den Parameternamen spielt keine Rolle):
VAR_INPUT
paVisuFB : POINTER TO POINTER TO AC_Visu_Base ;
iOwnFrameIndex : INT ;
END_VAR
Es müssen entweder beide oder keine dieser Variablen vorhanden sein. Diese beiden Variablen geben eingebetteten Visualisierungen die Möglichkeit, den zentralen Frame in der Toplevel-Visualisierung umzuschalten.
paVisuFB
ist ein Array von Pointern aufAC_Visu_Base
-Instanzen. Über die globale VisualisierungsvariableCURRENTCLIENTID
kann auf die korrekte Instanz des aktuellen Clients zugegriffen werden. Die Frame-Umschaltung erfolgt über eine ST-Aktion der FormpaVisuFB[CURRENTCLIENTID]^.uiFrameIdx := iOwnFrameIndex ;
iOwnFrameIndex
ist der Index, den das Visualisierungsbild des eigenen Moduls in diesem Toplevel-Frame hat. (Falls das eigene Modul kein Visualisierungsbild definiert ist dieser Index -1.)Außer den oben genannten Variablen darf die Schnittstelle keine weiteren VAR_INPUT, VAR_OUTPUT oder VAR_INOUT Variablen aufweisen.
Die
AC_Visu_Base
-Instanzen bieten zusätzlich noch die FunktionGetModuleFrameIndex
, die für beliebige Modulinstanzen (sieheIModule
inAC_Module_Base.library)
den Index ihres Visualisierungsbilds in der Toplevelvisualisierung zurück gibt (falls überhaupt ein Visualisierungsbild vorhanden ist). Damit ist es möglich, zu beliebigen Visualisierungensbilder im Modulinstanz-Baum zu springen. Um die Navigation auch innerhalb des Codes von Modulen zu ermöglichen, besitzt das Environment der Module (sieheIModule
inAC_Module_Base.library
) ein MemberEnvironment.visus
, das obigempaVisuFB
-Pointer entspricht.
Tipp
Um die Variable CURRENTCLIENTID
verwenden zu können, muss die Bibliothek VisuGlobalClientManager
eingebunden werden (Kategorie „Intern|Visu“).
Die erste Visualisierung wird als Standardeinstellung verwendet.