Skip to main content

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.

. Spezifikation:
  • 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 ein Decoupled-Modul in einen Decoupled-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 Sektion Default_Allocation, siehe Sektion Slots). Die gewünschten Standardeinbettungen werden dazu in Untersektionen Embedding 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 und 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.

Beispiel 23. Beispiel
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.

. Für die Schnittstelle der Visualisierungsobjekte gelten folgende Regeln:
  • 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 auf AC_Visu_Base-Instanzen. Über die globale Visualisierungsvariable CURRENTCLIENTID kann auf die korrekte Instanz des aktuellen Clients zugegriffen werden. Die Frame-Umschaltung erfolgt über eine ST-Aktion der Form

    paVisuFB[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 Funktion GetModuleFrameIndex, die für beliebige Modulinstanzen (siehe IModule in 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 IModule in 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.