Objekt-Beschreibungstexte
Objekt-Beschreibungstexte werden genutzt, um eine eindeutige Benennung aller Objekte in der Projektstruktur zu erzeugen. (Diese wird DPAD oder auch BAS (Benutzer-Adress-Schlüssel) bezeichnet)
Jede Ebene innerhalb der Projektstruktur erhält einen Namen und einen Beschreibungstext.
Die Verkettung der Teilnamen aus der Projektstruktur ergibt den Namen und Beschreibungstext eines Objektes. Verkettete Texte entstehen unter Verwendung von Platzhaltern oder Labels.
Als Texte werden folgende Objekt-Parameter zusammengefasst:
- ObjectName
- Description
Die Texte eines Objektes werden nur automatisch generiert, wenn ein Platzhalter enthalten ist. Das ist typischerweise der Fall, wenn die SPS das erste Mal startet.
![]() | Da von nun an sämtliche Texte einen definierten Wert haben (welcher auch persistent gespeichert wird) findet ein erneutes Generieren nicht mehr statt! Texte werden ab diesem Zeitpunkt nur noch durch den Nutzer geändert! |
Labels
Ein Label-FB (z.B. in einer GVL) kann bei der Deklaration von ein oder mehreren Objekten verwendet werden, um dessen Texte automatisch zu generieren.
Es wird zwischen folgenden Label-Typen unterschieden:
- Einfache Labels (FB_BA_Label)
Bieten die Möglichkeit zur Definition von Texten zur allgemeinen Verwendung.
Das bedeutet, dass einfache Labels in allen Objekten, aber auch in weiteren Labels wiederverwendet werden können. - Zweifache Labels (FB_BA_Label2x)
Bieten die Möglichkeit zur Definition des Equipment-Identifiers eines Objektes.
Somit können dann sowohl Aggregate- als auch Funktions-Informationen beschrieben werden.
Jedem Objekt kann ein beliebiges (einfaches oder zweifaches) Label zugewiesen werden.
Jedem View sollte ein einfaches Label zugewiesen werden welches als Aggregate-Informationen interpretiert wird. Funktions-Informationen werden nicht von Views unterstützt.
Programmierung
Platzhalter
Platzhalter stellen einen später generierten Wert dar. Beispielsweise werden die Parameter ObjectName und Description wie folgt mit Standardplatzhaltern initialisiert:
sObjectName : T_MaxString := '{}';
sDescription : T_MaxString := '{}';
Bei der Objektinitialisierung analysiert der Textgenerierungsmechanismus einen Text auf definierte Platzhalter.
Nur wenn ein gültiger Platzhalter ermittelt wird, kann der Mechanismus ihn durch einen automatisch generierten Text ersetzen. Andererseits hätte ein manuell definierter Text einen Platzhalter ersetzt und würde nicht überschrieben.
Sobald die Texte generiert sind, enthalten Variablen keine Platzhalter mehr.
Auch wenn das Gerät neu gestartet wird und Parameter (persistente Variablen) gespeichert wurden, bleiben die aktuellen Texte bestehen (automatisch generiert, manuell definiert oder sogar zur Laufzeit von einem Bediener geändert) und werden nicht vom Textgenerierungsmechanismus überschrieben.
Einsatzzweck
- Stellvertretend
Ein Platzhalter (Hier ein Index) wird stellvertretend für einen Wert eingesetzt:sDescription := '{Idx}'
- Definierend
Ein Platzhalter (Hier ein Index) wird eingesetzt um einen bestimmten Wert zu definieren:sDescription := '{Idx=10}'
Indizierung
- Automatische Indizierung
Für Objekte der letzten beiden Ebenen der Projektstruktur ist eine automatische Indizierung in der Projektvorlage eingestellt. D.h. dass der Parameter ObjectName zusätzlich zu einem definierten Namen auch eine fortlaufende Index Nummer erhält. Indices (z.B. für Aggregate) werden automatisch hinter den Text angehangen.
Während Indices für den Parameter ObjectName im Normalfall immer erzeugt werden, erscheinen Description-Indices in Abhängigkeit der aktuellen Einstellung). - Manuelle Indizierung
Die Indizierung kann durch Platzhalter und deren entsprechende Index-Attribute vorgegeben werden.
![]() | Manuell definierte Indices (Unabhängig vom Einsatzzweck) werden immer im erzeugten Text angezeigt. |
![]() | Ein vorgegebener Index wird automatisch auch für Parameter nachfolgender Objekte verwendet, falls diese nicht auch explizit einen Index definieren. Beispiel: Da für Pump1 ein Index von 10 definiert wird, wird für Pump2 automatisch der Index 11 verwendet.
|
Manuell vergebene Indices müssen sorgfältig vergeben werden da diese nicht vom Mechanismus validiert werden!
Verkettung
Die Texte eines Objektes werden unter bestimmten Bedingungen mit Texten von Parent-Objekten verkettet:
- Parent-Einstellung
- Einstellungen im verwendeten DPAD-FB
- Manuelles Überschreiben mittels Index-Attributen
- Globale Einstellungen
- Platzhalter mit Verkettungs-Verbot
Use-cases
- Anwendungsfall 1
Ein Platzhalter bezieht sich auf einen bestimmten Parameter.
Beispiel: Initialisierung des ObjectNamesObjectName := '{}'
- Anwendungsfall 2
Ein Platzhalter repräsentiert einen anderen Parameter.
In diesem Fall muss der Platzhalter mit seinem entsprechenden Kürzel angesprochen werden.
Beispiel:sDescription := '{} - ID {InstID}'.
Parameter
Parameter | Shortcut |
---|---|
Event Transition Text | EvtTrans |
Present Value | PrVal |
Device Type | DevType |
Instance ID | InstID |
Object Name | ObjName |
Description | Descr |
Attribute
Attribute werden typischerweise in der Applikation (Zum Beispiel in einem Template) verwendet, da dort die Applikations-spezifischen Details bekannt sind, nicht aber die Betreiber-spezifischen Details.
Attribute | Shortcut | Type |
---|---|---|
Aggregate Index |
| Unsigned number |
Function Index |
| Unsigned number |
- Index-Attribute
Ob ein Index sich auf ein Aggregat oder eine Funktion bezieht ist abhängig von der Reihenfolge. - Ein alleinstehender Index bezieht sich auf die Funktion.
- Zwei Indices beziehen sich auf das Aggregat (Index 1) und die Funktion (Index 2)
Syntax
- Platzhalter:
{}
- Platzhalter, der einen Parameterwert überschreibt (z.B.
sObjectName := '{MyValue}'
):{Value}
- Platzhalter, als repräsentierendes Attribut (z.B.
sDescription:= '{Idx}'
):{Attribute}
{Attribute1,Attribute(n),...} - Platzhalter, als definierendes Attribut (z.B.
sDescription:= '{Idx=10}'
):{Attribute=Value}
{Attribute1=Value,Attribute(n)=Value,...} - Platzhalter, als definierendes Attribut welcher einen Parameter Wert überschreibt (z.B.
sDescription:= '{Pump{Idx=10}}'
):{Value{Attribute=Value}}
- Platzhalter mit mehreren Attributen:
{Placeholder{Attribute1=Value,Attribute2=Value}}
- Platzhalter, als repräsentierender Parameter (e.g.
sDescription:= '{} {InstID}'
):{Parameter}
- Platzhalter, der die Verkettung mit Elternelementen verweigert. Es wird der Einstiegspunkt der Verkettung definiert. Ab diesem Punkt werden nur Platzhalter der Kinderelemente verkettet:
!{}
- Platzhalter, der bestimmte Attribute verweigert (ausschalten von Attributen):
{Value{!Attribute}}
Beispiele
Parameter ObjectName mit definiertem Platzhalter (vertettet automatisch generierte Werte):sObjectName := '{}'
Verkettet Parameter ObjectNamemit überschriebenen Wert:sObjectName := '{AAA01_BB01}'
Verkettet Parameter Description mit Platzhalter und fest definierten Zusatzinformationen, die nicht ersetzt werden:sDescription := '{} North'
Verkettet Parameter Description mit einem Platzhalter und erweitert ein stellvertretendes index-attribut (Es wird der Indexwert vom ObjectName übergeben):sDescription := '{Idx}'
Verketteter Parameter ObjectName mit Platzhalter inklusive definierendem Index-Attribut:sObjectName := '{Idx=10}'
Verketteter Parameter ObjectName mit Platzhalter inklusive stellvertretendem (Aggregat) und definiertem (Funktion) Index-Attribut:sObjectName := '{Idx,Idx=10}'
Verketteter Parameter Description mit überschriebenem Wert und einem definiertem (Funktion) Index-Attribut:sDescription := '{Pump{Idx=5}}'
Verketteter Parameter Description mit Platzhalter und einem stellvertretenden Parameter:sDescription := '{} - ID {InstID}'
ObjectName mit Standardplatzhalter aber ohne Verkettung (Verkettung verweigert):sObjectName := '!{}'
Verketteter Parameter ObjectName mit überschriebenem Wert, aber ohne Index-attribut (Attribut verweigert):sDescription := '{PU{!Idx}}'
Fehlermeldungen
Bezeichnung | Text | Beschreibung |
---|---|---|
[T23] | Internal error on parsing placeholder "...": Defined value and attributes at once! | Das gleichzeitige Definieren von Platzhalter-Werten und -Attributen ist unzulässig da ein Definierter Wert das Anwenden von Attributen verhindert. |
Generieren von Texten
Die folgende Reihenfolge wird verwendet, um zu entscheiden, wie ein Platzhalter ersetzt wird:
- Texte überschreiben
Falls definiert, wird ein manuell initialisierter Titel verwendet:fbSensor : FB_BA_AO_IO := (sObjectName:='Tmp03', sDescription:='Temperature sensor 3');
- Labels
Wenn Titel nicht überschrieben werden, kann ein Label angewendet werden:SomeLabel : FB_BA_Label := (sName:='PU', sDescription:='Pumpe');
Pump : FB_BA_View := (iLabel:=SomeLabel); - SymbolName
Wenn nichts definiert ist, werden die folgenden Standardwerte verwendet: - ObjectName erhält die Information vom symbolpath.
- Description erhält die Information vom symbolname.
Samples
Initialisierung mittels Labels
Übertragung der, im Label definierten Texte, auf Objekte.
{region 'Labels in GVL "MyLabels"'}
MV : FB_BA_Label := (sName:='MW', sDescription:='Messwert');
TFl : FB_BA_Label := (sName:='TFL', sDescription:='Vorlauftemperatur');
TRt : FB_BA_Label := (sName:='TRL', sDescription:='Rücklauftemperatur');
PreHtr : FB_BA_Label := (sName:='LE', sDescription:='Lufterhitzer');
TFl_MV : FB_BA_Label2x := (iAggregate:=TFl, iFunction:=MV);
TRt_MV : FB_BA_Label2x := (iAggregate:=TRt, iFunction:=MV);
{endregion}
{region 'Objects in some program'}
PreHtr : FB_BA_View := ( iLabel:=MyLabels.PreHtr);
TFl : FB_BA_AI_Raw := (iParent:=PreHtr, iLabel:=MyLabels.TFl_MV);
TRt : FB_BA_AI_Raw := (iParent:=PreHtr, iLabel:=MyLabels.TRt_MV);
{endregion}