Definition: Beispiel Einheitenklassen

Das folgende Beispiel zeigt drei typische Anwendungen für Einheitenklassen:

Szenario

Das Szenario beschreibt folgenden Fall:

Eine von der SPS aufgenommene Strecke von 0 … 1000 mm soll in der Applikation dargestellt werden. Dabei stehen zwei verschiedene Sensortypen mit folgenden Ausgabebereichen zur Verfügung:

Typ

Messbereich

Ausgabewertebereich

A

0 … 2000 mm

0 … 32000

B

0 … 100 inch

0 … 32000

In der Applikation soll der einzusetzende Sensor über eine variablenabhängige Einheitenklasse umgeschaltet werden können.

Außerdem ist die landesspezifische Darstellung der Einheit (cm/inch) nachzuvollziehen. Hierzu wird eine sprachabhängige Einheitenklasse verwendet.

Als Erweiterung soll zusätzlich eine Umschaltung zwischen cm/mm/inch/mil gezeigt werden. Die Umschaltung erfolgt über eine zweite variablenabhängige Einheitenklasse.

Definitionen

Als Definitionen werden für das Beispiel benötigt:

Das Blockschaltbild zeigt den systematischen Aufbau des Beispiels:


Design

Das Design des Beispiels umfasst die einzelnen Ansichten und die Steuerelemente zum Umschalten der Einheiten.


Für das Design werden folgende Elemente benötigt:

Arbeitsschritte

Zur Vereinfachung ist die Reihenfolge der durchzuführenden Schritte so angeordnet, dass sich die Definitionen und Objekte einfach miteinander verknüpfen lassen:

Definitionsebene

  • Führen Sie folgende Schritte in der Projektdatei aus:

  1. Legen sie zwei interne Variablen vom Datentyp "VT_I2" an. Markieren Sie dazu den Projektexplorerknoten VariablenWKanäleWIntern. Öffnen sie den Tabelleneditor zu dem Kanal " Intern" durch einen Doppelklick auf den Knoten. Markieren Sie den Tabelleneditor durch einen Mausklick und fügen Sie die beiden Variablendefinitionen durch Drücken der Taste F8 ein. Ändern Sie die Namen der beiden Variablen auf "DistanceSensorAdaptionSwitch" und "DistanceSensorExtendedSwitch".

  2. Legen Sie eine variablenabhängige Einheitenklasse an. Wechseln Sie dazu im Projektexplorer zum Knoten VariablenWEinheitenklassenWvariablenabhängig. Drücken Sie im Projektexplorer direkt die Taste F8 zum Anlegen einer neuen Definition. Geben Sie über die Eigenschaftenseiten als Name "DistanceSensorAdaption" und als Umschaltvariable "DistanceSensorAdaptionSwitch" an.

  3. Legen Sie eine zweite variablenabhängige Einheitenklasse an. Geben Sie als Name "LengthConversionExtended" und als Umschaltvariable "DistanceSensorExtendedSwitch" an.

  4. Markieren Sie den Knoten der Einheitenklasse "DistanceSensorAdaption" und fügen sie im Tabelleneditor eine neue Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    X1

    0

    X2

    1

    Y1

    0

    Y2

    1

  5. Fügen Sie in die Einheitenklasse "DistanceSensorAdaption" eine zweite Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    X1

    0

    X2

    12599

    Y1

    0

    Y2

    16000

  6. Wechseln sie im Projektexplorer zur Einheitenklasse "LengthConversionExtended" und fügen sie hier im Tabelleneditor eine neue Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    X1

    0

    X2

    16000

    Y1

    0

    Y2

    100

  7. Fügen sie zur Einheitenklasse "LengthConversionExtended" eine zweite Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    Umschaltkennung

    1

    X1

    0

    X2

    16000

    Y1

    0

    Y2

    39,37

    Einheitentext

    in

  8. Fügen sie zur Einheitenklasse "LengthConversionExtended" eine dritte Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    Umschaltkennung

    2

    X1

    0

    X2

    16000

    Y1

    0

    Y2

    16000

    Einheitentext

    mm

  9. Fügen sie zur Einheitenklasse "LengthConversionExtended" die vierte benötigte Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    Umschaltkennung

    3

    X1

    0

    X2

    16000

    Y1

    0

    Y2

    39370

    Einheitentext

    mil

  10. Legen Sie eine sprachabhängige Einheitenklasse an. Wechseln Sie dazu im Projektexplorer zum Knoten VariablenWEinheitenklassenWsprachabhängig. Drücken Sie im Projektexplorer direkt die Taste F8 zum Anlegen einer neuen Definition. Ändern Sie den Namen der Einheitenklasse in "LengthConversion".

  11. Markieren sie den Knoten der Einheitenklasse "LengthConversion" und fügen sie im Tabelleneditor eine neue Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    Umschaltkennung

    German (1031)

    X1

    0

    X2

    16000

    Y1

    0

    Y2

    1000

    Einheitentext

    cm

  12. Fügen sie zur Einheitenklasse "LengthConversion" die zweite benötigte Einheitendefinition mit folgenden Parametern ein:

    Parameter

    Wert

    Umschaltkennung

    English (1033)

    X1

    0

    X2

    16000

    Y1

    0

    Y2

    39,37

    Einheitentext

    in

  13. Browsen Sie die umzurechnende Variable in Ihr Projekt. Fügen Sie dazu über den Projektexplorerknoten VariablenWKanäle einen neuen Kommunikationskanal vom Typ "VisiWin(.NET) Treiber" an. Legen Sie im Parameter Treibername den "Sample Treiber" fest. Öffnen Sie über den Kontextmenüeintrag Variablen browsen... des neu eingefügten Treiberkanal-Knoten den Browser-Dialog. Wählen Sie hier die Variable DataTypesWReal aus und bestätigen die Auswahl über die Taste OK.

  14. Benennen Sie die Variable über den Parameter Alias um in "RawValue".

  15. Duplizieren Sie die Variable. Wählen Sie dazu den Eintrag Duplizieren im Kontextmenü der Definition im Tabelleneditor.

  16. Ändern Sie den Alias der so kopierten Variablen auf "SensorIndependent" und wählen Sie über die Eigenschaftenseiten im Parameter Einheitenklasse (Prozess) die Definition "DistanceSensorAdaption" aus.

  17. Duplizieren Sie die Variablendefinition "SensorIndependent" und geben Sie hier als Alias den Namen "SensorIndependent_Lng" an. Legen Sie als "Einheitenklasse (Anzeige)" "LengthConversion" fest.

  18. Duplizieren Sie die Variablendefinition "SensorIndependent" noch einmal und geben Sie hier als Alias den Namen "SensorIndependent_Ext" an. Legen Sie als "Einheitenklasse (Anzeige)" "LengthConversionExt" fest.

Bei den vier Variablendefinitionen ist die ItemID identisch. Damit greift die Visualisierung über alle Variablendefinitionen auf den selben Wert in der Kommunikationskomponente zu.

Warum diese komplexe Vorgehensweise?

Wird ein Variablenwert über eine Einheitenklasse (Prozess) zwischen Kommunikationskomponente und Variablenserver umgerechnet, steht der Rohwert aus der Kommunikationskomponente nirgendwo mehr zur Verfügung. Die einzige Möflichkeit, die Umrechnung der Einheitenklasse (Prozess) in der Ansicht zu umgehen, ist die Definition einer zweiten Variablen, die keine Einheitenklasse (Prozess) verwendet, aber auf die gleiche Variable in der Kommunikationskomponente zugreift. Um die Umrechnung in der Applikation zu zeigen, wird in den folgenden Schritten (siehe Design) auch der nicht umgerechnete Wert als Anzeigewert in der Applikation implementiert.

Testlauf

  • Führen Sie folgende Schritte aus, um das Projekt zu testen:

  1. Starten Sie das Projekt über F5 und navigieren Sie zur entsprechenden Ansicht.

  2. Geben Sie in vinRawValue den Wert "12599" als Maximum für den Typ-B-Sensor ein.

  3. Drücken Sie auf swtAdaptSensor, um den Typ-B-Sensor zu adaptieren und den umgerechneten Wert in "vinSensorIndependent" anzuzeigen.

  4. Klicken Sie die Schaltflächen für die Sprachumschaltung um im Steuerelement "vinLangDepDist" die Darstellung in inch oder cm zu beobachten.

  5. Klicken Sie die Schaltfläche swtNormal_Milli in Kombination mit den sprachsteuernden Schaltflächen, um in "vinLangDepDistExt" zusätzlich die Umschaltung in [cm], [mm], [in.] und [mil.] zu betrachten.

  6. Um den schreibenden Zugriff auf Variablen mit Einheitenumschaltungen zu testen, geben Sie bei unterschiedlichen Schaltflächenkonstellationen Werte in den Steuerelementen "vinSensorIndependent", "vinLangDepDist", "vinLangDepDistExt" ein. Beachten Sie dabei auch, dass bei einer Umschaltung einer Einheitenklasse immer der Rohwert erhalten bleibt und alle anderen ermittelten Werte neu in die Anzeige geladen werden.