Definition: Beispiel Einheitenklassen
Das folgende Beispiel zeigt drei typische Anwendungen für Einheitenklassen:
-
Sensoranpassung
-
Sprachumschaltbare Einheitenumschaltung
-
Variablenabhängige Einheitenumschaltung in der Anzeige am Beispiel mm/cm/Mil/inch
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:
-
Zwei interne Variablen, die jeweils als Steuervariablen die variablenabhängigen Einheitenklassen umschalten
-
Die drei oben genannten Einheitenklassen
-
Eine externe Variable aus dem Demo-Treiber, die den umzuschaltenden Wert simuliert
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:
-
Vier Eingabeelemente (NumericVarIn), die die einzelnen Stufen der Umrechnungen zeigen (SPS-Wert, normierter Wert der Sensoranpassung, sprachumgeschalteter Wert, Wert der variablenabhängigen Umrechnung cm/mm/inch/mil)
-
Zwei Schaltflächen (Button) für die Sprachumschaltung
-
Zwei Schalter (Switch), die die Steuervariablen der variablenabhängigen Einheitenklassen manipulieren.
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:
-
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".
-
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.
-
Legen Sie eine zweite variablenabhängige Einheitenklasse an. Geben Sie als Name "LengthConversionExtended" und als Umschaltvariable "DistanceSensorExtendedSwitch" an.
-
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
-
Fügen Sie in die Einheitenklasse "DistanceSensorAdaption" eine zweite Einheitendefinition mit folgenden Parametern ein:
Parameter
Wert
X1
0
X2
12599
Y1
0
Y2
16000
-
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
-
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
-
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
-
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
-
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".
-
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
-
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
-
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.
-
Benennen Sie die Variable über den Parameter Alias um in "RawValue".
-
Duplizieren Sie die Variable. Wählen Sie dazu den Eintrag Duplizieren im Kontextmenü der Definition im Tabelleneditor.
-
Ä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.
-
Duplizieren Sie die Variablendefinition "SensorIndependent" und geben Sie hier als Alias den Namen "SensorIndependent_Lng" an. Legen Sie als "Einheitenklasse (Anzeige)" "LengthConversion" fest.
-
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:
-
Starten Sie das Projekt über F5 und navigieren Sie zur entsprechenden Ansicht.
-
Geben Sie in vinRawValue den Wert "12599" als Maximum für den Typ-B-Sensor ein.
-
Drücken Sie auf swtAdaptSensor, um den Typ-B-Sensor zu adaptieren und den umgerechneten Wert in "vinSensorIndependent" anzuzeigen.
-
Klicken Sie die Schaltflächen für die Sprachumschaltung um im Steuerelement "vinLangDepDist" die Darstellung in inch oder cm zu beobachten.
-
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.
-
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.