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_SECDetails über die Syntax der Definitionstypen sind im Kapitel Syntax der Moduldeklaration beschrieben.
- Toplevel_Tablegt fest, ob die Checkbox Erzeuge Toplevel-Reiter im HMI-Editor standardmäßig aktiviert ist oder nicht.
- Pagedefiniert eine Liste von verfügbaren Visualisierungsobjekten eines Submoduls.
- Embeddeddefiniert 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_Proxydefiniert eine Liste von verfügbaren Visualisierungsobjekten des Moduls. Die Liste wird nur dann verwendet, wenn ein- Decoupled-Modulin einen- Decoupled-Sloteingefü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 Sektion- Default_Allocation, siehe Sektion Slots). Die gewünschten Standardeinbettungen werden dazu in Untersektionen- Embeddingbeschrieben.- Voraussetzung: Das angegebene Visualisierungsobjekt und der Proxy müssen in der Liste der möglichen Einbettungen für dieses Modul enthalten sein (siehe oben: - Embeddedund- Embedded_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_SECDer 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 - instvom 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. - paVisuFBist ein Array von Pointern auf- AC_Visu_Base-Instanzen. Über die globale Visualisierungsvariable- CURRENTCLIENTIDkann auf die korrekte Instanz des aktuellen Clients zugegriffen werden. Die Frame-Umschaltung erfolgt über eine ST-Aktion der Form- paVisuFB[CURRENTCLIENTID]^.uiFrameIdx := iOwnFrameIndex ;- iOwnFrameIndexist 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 Funktion- GetModuleFrameIndex, die für beliebige Modulinstanzen (siehe- IModulein- AC_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 (siehe- IModulein- AC_Module_Base.library) ein Member- Environment.visus, das obigem- paVisuFB-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.