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:

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.

Objekt-Beschreibungstexte 1:

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:

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:

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

Indizierung

Objekt-Beschreibungstexte 2:

Manuell definierte Indices (Unabhängig vom Einsatzzweck) werden immer im erzeugten Text angezeigt.

Objekt-Beschreibungstexte 3:

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.

Pump1 : FB_BA_View := (iLabel:=SomeLabel, sObjectName := '{Idx=10}');

Pump2 : FB_BA_View := (iLabel:=SomeLabel);

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:

Use-cases

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

Idx

Unsigned number

Function Index

Idx

Unsigned number

Syntax

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:

  1. Texte überschreiben
    Falls definiert, wird ein manuell initialisierter Titel verwendet:
    fbSensor : FB_BA_AO_IO := (sObjectName:='Tmp03', sDescription:='Temperature sensor 3');
  2. 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);
  3. 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}