Die Wertkette
Die typisierte Umrechnung, die jedes Tag teilt, vom Rohwert zum technischen Wert, die zwei Regeln für ungültige Messwerte, die Aktionen bei Werten außerhalb des Bereichs, die Umformungen bei Boolean und String und wie ein Schreibvorgang die Stufen rückwärts durchläuft.
Jedes Tag teilt eine typisierte Kette der Umrechnung, die aus dem Rohwert den technischen Wert macht. Die Kette wohnt im Tag selbst: Die Karte Umrechnung auf der Seite Tags und die Tabelle des Geräts zeigen dieselben Stufen, und der Wert, der in Logic, auf Dashboards, in der Aufzeichnung und in dem landet, was die Station veröffentlicht, ist der, der die letzte Stufe verlässt. Der öffentliche OPC UA-Knoten trägt den Rohwert.
Zuerst der Rohwert
Die Kette beginnt beim Rohwert, gewandelt in den Datentyp des Tags, nicht beim eigenen Objekt des Treibers: Ein Treiber, der einem Tag vom Typ Int32 3,7 reicht, liest oben auf der Karte 4, und jede Stufe rechnet mit dieser 4 weiter. Ein Messwert, den der erklärte Typ überhaupt nicht halten kann (Text, wo eine Zahl erklärt ist), ist ein leerer Messwert, nie eine ersatzweise Null. Die Stufen rechnen mit reellen Zahlen, und am anderen Ende nimmt der technische Wert seinen Typ an:
| Tag | Technischer Wert |
|---|---|
| Ganzzahliger Datentyp, Skalierung und Kalibrierung ausgeschaltet, oder eingeschaltet mit Faktor 1 und Versatz 0 (so entsteht jedes Tag) | Die ganze Zahl selbst, im Datentyp des Tags. |
| Ganzzahliger Datentyp, Skalierung oder Kalibrierung ändert den Wert | Eine reelle Zahl (Double), gerundet von der Stufe Dezimalstellen: Ein Tag vom Typ Int16, das eine Temperatur mal zehn hält, liest am Gerät 235 und mit Skalierung 0,1 den Wert 23,5. |
| Float oder Double | Der Datentyp des Tags, ein Tag vom Typ Float rundet also auf das, was ein Float darstellen kann. |
Der Datentyp bleibt das, was das Gerät und der öffentliche OPC UA-Knoten tragen. Skalierung oder Kalibrierung ein- oder auszuschalten ändert den Typ des technischen Werts von diesem Moment an: Was die Aufzeichnung schon aufgezeichnet hat, bleibt, wie es aufgezeichnet wurde, und ein Kanal behält den Typ, den er festlegt, ein Kanal Ganzzahl zeichnet also den auf die nächste ganze Zahl gerundeten Wert auf und ein Kanal Dezimalzahl behält die Dezimalstellen. Die Karte Umrechnung schließt mit dem gelieferten Wert und sagt, wenn ein ganzzahliger Typ, den Skalierung und Kalibrierung lassen, wie er ist, die Dezimalstellen einer Grenze wegrundet, auf die die Stufe Grenzen begrenzt.
Die Stufen
Bei numerischen Typen ist die Kette eine Reihe von Stufen, jede mit ihrem eigenen Kontrollkästchen; eine ausgeschaltete Stufe reicht ihre Eingabe durch, und die Karte zeigt am Ende jeder Stufe den laufenden Wert, sodass Sie einen Messwert live durch die Rechnung verfolgen können:
| Stufe | Standard | Wirkung |
|---|---|---|
| Skalierung | ein | skaliert = roh × Faktor + Versatz. Der Faktor ist standardmäßig 1, der Versatz 0. Ein Faktor von 0 wird dort abgelehnt, wo er eingetippt wird ("Ein Skalierungsfaktor von 0 würde jeden Messwert auf null setzen. Geben Sie den Faktor ein, mit dem multipliziert wird (1 lässt den Wert unverändert)."), weil er jeden Messwert auf null setzen würde und die Vorschau und die gespeicherte Kette nie auseinandergehen dürfen. |
| Kalibrierung | aus | Ein zweites lineares Paar, auf den skalierten Wert angewendet: kalibriert = skaliert × Faktor + Versatz. Getrennt von der Skalierung gehalten, damit eine Justage vor und nach der Prüfung die Rechnung des Messbereichs nicht stört, und über eine eigene Berechtigung geregelt; siehe Kalibrierung. Ein Faktor von 0 wird auf dieselbe Weise abgelehnt. |
| Ungültiger Messwert | immer gezeigt | Zwei Regeln für Messwerte, die keine brauchbare Zahl tragen (unten). Kein Kontrollkästchen: Sein "Aus" ist selbst eine der Antworten. |
| Grenzen | aus | Beurteilt den Wert gegen Min. (standardmäßig 0) und Max. (standardmäßig 100) und wendet die gewählte Aktion bei Werten außerhalb des Bereichs an (unten). Die Schranken werden vereinheitlicht, ein Min über Max scheitert also nie: Die kleinere der beiden ist die Untergrenze. |
| Dezimalstellen | ein | Rundet auf Dezimalstellen Stellen, standardmäßig 2, angenommen von 0 bis 15. |
Beide linearen Stufen tragen einen Assistenten Zweipunkt, der das Paar aus zwei Referenzpunkten berechnet; er ist Schritt für Schritt auf Kalibrierung beschrieben.
Das Gerät hat ohne Zahl geantwortet
Ein offenes Thermoelement, ein Kanal ohne Fühler: Der Messwert ist angekommen, die Anlage spricht, aber die Messung ist NaN. Nur bei numerischen Tags, und die Qualität bleibt in beiden Fällen gut:
| Regel | Wirkung |
|---|---|
| Unverändert durchreichen (Standard) | Das NaN reist unberührt weiter und überspringt die Stufe Grenzen ganz, welche Aktion diese Stufe auch trägt: Grenzen beurteilen Zahlen, und hier gibt es keine. Unendlich ist kein NaN und läuft weiterhin am Rand des Bereichs an. |
| Durch einen Wert ersetzen | Die erklärte Zahl tritt ab dieser Stufe an die Stelle und geht wie jeder Messwert in Grenzen, Nachkommastellen und die abschließende Wandlung ein. |
Das Gerät hat nicht geantwortet
Eine Zeitüberschreitung, ein durchtrenntes Kabel, eine ausgeschaltete Anlage, eine Ausnahme im Treiber. Bei jedem Typ, wobei einem Tag, das Text, einen Zeitstempel, eine Kennung oder einen Block Bytes liest, nur die ersten beiden Regeln angeboten werden: Ein erklärter Ersatzwert ist eine Zahl, und ein Messwert dieser Typen ist keine.
| Regel | Wirkung |
|---|---|
| Den Fehler zeigen (Standard) | Das Tag liest leer, und seine Qualität wird schlecht, der Fehlschlag zeigt sich also überall zugleich. |
| Den letzten guten Wert halten | Der letzte Messwert, der angekommen ist, bleibt ohne Verfall stehen, bis die Anlage wieder antwortet. Die Zeitstempel zeigen weiter auf diesen Messwert, denn dann wurde die Zahl gemessen. Vor dem ersten Messwert wird nichts gehalten; das Tag liest dann leer. |
| Durch einen Wert ersetzen | Die erklärte Zahl wird so dargestellt, wie sie erklärt ist: Es gibt keinen Messwert, der die Stufen durchlaufen könnte, sie wird also weder skaliert noch kalibriert noch gerundet, sondern nur in den Typ des technischen Werts gewandelt. Angeboten bei den numerischen Typen und bei Boolean, deren Messwert aus einer Zahl werden kann; nicht bei String, DateTime, Guid und ByteString. |
Ein Ersatzwert ist nie stumm: Die Karte Live-Wert schreibt, warum ("Letzter guter Wert, gehalten, solange das Gerät nicht antwortet."), der Punkt für den laufenden Wert wird gelb, der eingebettete OPC UA-Server veröffentlicht den Wert mit einem Status für Ersatzwerte statt mit einem einfachen Good, und ein Agent, der das Tag mit tag_read liest, erfährt, welcher Ersatzwert es ist (substitution). Er bleibt so lange veröffentlicht, wie die Regel es verlangt: Ein Gerät, das weiterhin nicht antwortet, lässt einen externen Client nicht zwischen Ersatzwert und Lesefehler hin und her springen, was dieser Client liest, ist also das, was der Bereich zeigt. Der Messwert selbst nimmt den Punkt in dem Augenblick zurück, in dem das Gerät antwortet, und ebenso den Ersatzwert auszuschalten. Einen Ersatzwert zu wählen heißt, Verfügbarkeit zu wählen, Alarme und Ausdrücke beurteilen den Punkt also weiter, als hätte er einen Wert; was das kostet, wird offen zurückgezahlt, denn das Journal hält den fehlgeschlagenen Lesevorgang weiterhin fest, und der Zustand des Geräts meldet es weiterhin als offline. Ein Ersatzwert beantwortet "Was soll dieser Punkt zeigen", nie "Ist die Anlage da". Vor einem erklärten Ersatzwert außerhalb der eingeschalteten Grenzen wird dort gewarnt, wo er eingetippt wird: "Außerhalb der Grenzen (0 bis 100): der Wert, der eine fehlgeschlagene Lesung ersetzt."
Ein Messwert, der verstummt, zählt als fehlgeschlagener Lesevorgang. Wenn während des Abfrageintervalls des Tags plus 10 Sekunden kein neuer Messwert eintrifft, etwa wenn ein Gerät die Verbindung annimmt und dann nicht mehr antwortet, gilt die Regel oben, als wäre der Lesevorgang fehlgeschlagen, für alles, was das Tag liest: Ausdrücke der Logic, Dashboards, was aufgezeichnet wird, und Agenten. Mit Den Fehler zeigen liest das Tag leer, und seine Qualität wird schlecht, während der eingebettete OPC UA-Server den letzten Wert des Geräts am Knoten mit UncertainLastUsableValue statt Good hält, sodass ein externer Client die Zahl sieht, die er hatte, und erfährt, dass nichts sie erneuert; mit einem Ersatzwert wird dieser wie oben dargestellt und veröffentlicht. Alarme halten ihren Zustand, solange die Qualität schlecht ist, wie immer. Die Karte Live-Wert sagt, warum ("Seit dem Zeitstempel der Anwendung ist kein neuer Messwert eingetroffen. Das Tag wertet das als fehlgeschlagene Lesung."), die Zeitstempel datieren weiterhin den letzten eingetroffenen Messwert, und der nächste eintreffende Messwert bringt das Tag zurück.
Ein Tag mit Nur schreiben hat keine dieser Regeln. Die Station liest es nie, also kann kein Lesevorgang an ihm fehlschlagen: Bis die Station es beschreibt, hat das Tag keinen Wert und sagt das auch, ohne Ersatzwert, ohne gelben Punkt und ohne dass an seiner Stelle etwas über OPC UA veröffentlicht wird, und der Bereich zeichnet diese Zeile für ein solches Tag nicht. Eine Regel, die gewählt wurde, als das Tag gelesen wurde, bleibt gespeichert und wird ignoriert, solange das Tag Nur schreiben ist; sie gilt wieder, sobald der Zugriff Nur lesen oder Lesen und schreiben ist.
Werte außerhalb des Bereichs
Die Aktionen der Stufe Grenzen für einen Wert außerhalb von Min und Max:
| Aktion | Wert wird | Qualität |
|---|---|---|
| Kein Wert | Eine Lücke (kein Wert). | gut |
| Begrenzen (Standard) | Die nächstgelegene Schranke. | gut |
| Fehler und kein Wert | Eine Lücke. | schlecht (Grenzverletzung) |
| Fehler und begrenzen | Die nächstgelegene Schranke. | schlecht (Grenzverletzung) |
| NaN | NaN. | gut. Nur bei Tags vom Typ Float und Double angeboten, deren Typ es darstellen kann; es lässt einen Kanal von Process den ungültigen Wert einordnen. Eine Aktion NaN, die ein Schreibvorgang eines Agenten oder eine eingespielte Sicherung an einem ganzzahligen Tag hinterlassen hat, fällt auf die Lücke Null zurück. |
Eine Grenzverletzung fließt in die wirksame Qualität des Tags ein, der Punkt für den laufenden Wert, Ausdrücke in Eigenschaften und Alarme sehen den Wert außerhalb der Grenzen also ohne weiteres Zutun als schlecht, und die Karte Umrechnung schreibt "Der Wert 130 liegt außerhalb der Grenzen (0 bis 100)." Es bleibt ein Zustand des Prozesses und kein Problem der Verbindung, und der Zustand des Geräts zählt es deswegen nicht als offline.
Boolean, String und andere Typen
Nicht numerische Typen haben ihre eigenen Umformungen auf derselben Karte Umrechnung:
- Wahrheitswert: Invertieren meldet die logische Negation des Rohwerts.
- String: Teilstring ab (ab 0) und Länge (leer = bis Ende) schneiden ein Fenster aus der rohen Zeichenkette; eine leere Länge läuft bis zum Ende, und Schranken außerhalb des Bereichs werden begrenzt, statt fehlzuschlagen.
- Jeder andere Typ (DateTime, Guid, ByteString) geht unverändert durch. Seine Karte Umrechnung trägt nur die Stufe Ungültiger Messwert, mit der Regel für ein Gerät, das nicht geantwortet hat, und ein Tag mit Nur schreiben dieser Typen zeigt keine Karte.
Den Fehler zu zeigen und den letzten guten Wert zu halten gilt bei jedem Typ; durch einen Wert zu ersetzen wird nur bei numerischen Tags und bei Boolean angeboten, ein Tag vom Typ String, DateTime, Guid oder ByteString führt es also nicht auf. Ein Ersatz, der an einem Tag eines dieser Typen schon gespeichert ist, wie eine frühere Version ihn speichern konnte, wird wie das Zeigen des Fehlers befolgt, und wenn das Tag das nächste Mal gespeichert wird, im Bereich oder durch einen Agenten, tritt das Zeigen des Fehlers an seine Stelle. Die NaN-Regel gilt nur bei numerischen Tags.
Ein Schreibvorgang läuft die Kette rückwärts
Das Schreibfeld auf der Karte Live-Wert nimmt einen technischen Wert und durchläuft die eingeschalteten, umkehrbaren Stufen rückwärts, der Reihe nach: auf Min und Max begrenzen, wenn Grenzen eingeschaltet ist (ein Schreibvorgang wird immer begrenzt und nie verworfen, welche Aktion bei Grenzverletzung auch eingestellt ist), die Kalibrierung herausrechnen ((Wert − Versatz) ÷ Faktor), die Skalierung auf dieselbe Weise herausrechnen und dann in den Typ des Tags wandeln. Ein ganzzahliges Tag, dessen Skalierung oder Kalibrierung den Wert ändert, nimmt einen Bruchteil an: 123,4 auf ein Tag vom Typ Int16 mit Skalierung 0,1 schreibt 1234. Ohne eine solche Stufe wird ein Bruchteil, der in ein ganzzahliges Tag geschrieben wird, auf die nächste ganze Zahl gerundet, Hälften von null weg (2,5 schreibt 3). Das Runden verliert Information und wird nicht rückgängig gemacht. Eine Eingabe vom Typ Boolean wendet Invertieren erneut an. Der Ausschnitt einer Zeichenkette betrifft nur die Anzeige, ein Schreibvorgang auf eine Zeichenkette sendet also den ganzen Wert wortgetreu; DateTime, Guid und ByteString gehen durch. Ein Wert, den ein externer OPC UA-Client am öffentlichen Knoten schreibt, ist bereits roh und durchquert nichts davon.