Logic
Die Seite Logic, ihre Spalte Adressraum, die Ordner, die Befehlsleiste, der Zyklus und der Schreibkanal hinter jedem Bereich und die drei Berechtigungen, die entscheiden, was die Seite zeichnet.
Logic ist der dritte Eintrag der Navigationsleiste. Sie öffnet sich für jede Rolle mit Logic anzeigen, und ihre Kopfzeile liest "Definieren Sie Variablen (abgeleitete oder schreibbare Werte) und Aktionen (Skripte, die sie schreiben), zusammengesetzt über dem Adressraum." Sie ist eine Master-Detail-Seite (wie die Seiten funktionieren): links eine Spalte mit der Überschrift Adressraum, rechts eine Befehlsleiste und ein Detailbereich. Alles, was Sie hier bearbeiten, wird beim Tippen automatisch gespeichert; es gibt auf der ganzen Seite keine Schaltfläche zum Speichern.
In diesem Bereich
| Seite | Inhalt |
|---|---|
| Der Adressraum | Die sieben reservierten Wurzeln, wie eine Adresse geschrieben und bereinigt wird, das Filterfeld und die drei Wege, eine Adresse einzugeben. |
| Variablen | Der Editor einer Variablen: Identität und Adresse, die Arten Ausdruck und Merker, die Karte Wert, Wert setzen. |
| Ausdrücke | Die Sprache der Ausdrücke, die Lesefläche eines Punkts, die Regeln, die der Auswerter erzwingt, der Editor für Skripte. |
| Aktionen | Der Editor einer Aktion, was ein Skript schreiben darf, jede Prüfmeldung, Ausführen und Aktivieren/Deaktivieren. |
| Auslöser | Der Editor eines Auslösers und der Zeitplan der Intervalle. |
| Alarme | Der Editor eines Alarms, der Zustandsautomat, die Meldung, Quittieren und Alle quittieren. |
| Von anderen Seiten | Die Wurzeln System, Server, Connector und Process, der Bereich eines Punkts und der Hinweis, der die Seite nennt, die sie bearbeitet. |
Die Wurzel Assets derselben Spalte ist eine Gruppe für sich: Assets behandelt Bilder, Icons, Farben, Symbole und Verbindungstypen.
Die Spalte Adressraum
Die Spalte führt die Wurzeln des Adressraums unter zwei Überschriften auf. Hier definiert enthält, was diese Seite anlegt und bearbeitet: Variables, Alarms, Actions, Triggers und Assets. Von anderen Seiten enthält, was sie nur zeigt: System, Server, Connector und Process. Jede Wurzel unter der ersten Überschrift trägt eine Anzahl (Variables und Alarms zählen ihre Definitionen, Actions und Triggers ihre, Assets die Summe seiner fünf Kategorien), und die Wurzel Alarms, jeder Alarmordner und jede Alarmzeile tragen einen farbigen Punkt mit der schlimmsten Priorität, die sie halten und die aktiv ist oder auf Quittierung wartet; der Punkt räumt sich in dem Augenblick weg, in dem der Alarm beantwortet ist.
Der Baum ist träge: Ein Zweig lädt, wenn Sie ihn aufklappen. Laufende Werte werden nie im Baum gezeichnet; der Detailbereich des gewählten Knotens zeigt sie, zweimal je Sekunde aufgefrischt.
| Bedienelement | Wirkung |
|---|---|
| Filtern… | Engt den Baum auf die Zeilen ein, deren Name den Text enthält, ohne Rücksicht auf Groß- und Kleinschreibung. Ein Ordner überlebt, wenn irgendein Nachkomme passt, und klappt zu seinen Treffern auf; die Wurzel Assets engt sich auf die Kategorien ein, deren Name passt, oder kommt ganz, wenn nur ihr eigener Name passt; eine Wurzel des Adressraums, deren eigener Name passt, bleibt aufgeführt und lädt ihren Zweig beim Aufklappen, während die Abschnitte Actions und Triggers nur die passenden Zeilen aufführen. |
| Neu… (Fuß der Spalte) | Öffnet das Menü zum Anlegen: Neue Variable, Neue Aktion, Neuer Auslöser, Neuer Alarm, dann Neuer Ordner mit einem Ziel je Abschnitt (Variables, Alarms, Actions, Triggers). Alles, was hier entsteht, landet an der Wurzel seines Abschnitts unter dem ersten freien Namen der Reihen Variable1, Action1, Trigger1, Alarm1 oder Folder1 und öffnet sich zum Bearbeiten. Nur für eine Rolle mit Logic konfigurieren gezeichnet; mit dem Grund ausgegraut, solange die Station gesperrt ist. |
| Alle erweitern / Alle einklappen | Öffnet jeden Zweig (und lädt jede Ebene beim Öffnen) oder schließt alles zurück auf die Wurzeln. |
| Rechtsklick | An einer Wurzel eines Abschnitts, an einem Ihrer Ordner oder an einer Zeile einer Definition: wählt die Zeile und öffnet ihr Menü (unten). An einem Knoten von einer anderen Seite öffnet sich nichts. |
Das Rechtsklickmenü trägt, je nach Zeile und Rolle: Neue Variable / Neue Aktion / Neuer Auslöser / Neuer Alarm (in den Ordner oder die Wurzel, die Sie angeklickt haben), Neuer Ordner (an einem Ordner, der schon drei Ebenen tief liegt, nicht angeboten), Quittieren (an Alarmzeilen, mit Logic bedienen), Verschieben nach (ein Untermenü mit der Wurzel des Abschnitts und jedem Ordner, in den die Zeile darf), Kopieren, Löschen und an einem Ordner Ordner umbenennen und Ordner entfernen. Eine Rolle ohne Logic konfigurieren sieht überhaupt kein Menü, außer dem Eintrag Quittieren an einer Alarmzeile, wenn sie Logic bedienen hat.
Der Detailbereich ist leer, bis Sie etwas wählen: "Wählen Sie einen Knoten, um ihn anzusehen: Variablen, Aktionen, Auslöser und Alarme öffnen ihren Editor. Legen Sie einen mit Neu an."
Die Befehlsleiste
Die Leiste zeichnet die Befehle des gewählten Knotens. Was die Rolle nie erlaubt, wird nicht gezeichnet; was die Situation gerade jetzt ablehnt, bleibt gezeichnet, ausgegraut, mit dem Grund in seinem Tooltip: "Die Konfiguration ist gesperrt, solange eine Einheit läuft." während eines Vorgangs der Projektierung, "Runtime gestoppt", solange die Station nur lesend läuft.
| Auswahl | Führende Gruppe | Nachfolgende Gruppe (Gefahr) |
|---|---|---|
| Einer Ihrer Ordner | Neue Variable / Aktion / Auslöser / Alarm (die Art, die sein Abschnitt hält), Neuer Ordner (an der Grenze der Tiefe ausgegraut mit "Dieser Ordner ist schon so tief, wie Ordner geschachtelt werden."), Ordner umbenennen | Ordner entfernen |
| Eine Variable | Kopieren | Variable löschen |
| Eine Aktion | Ausführen, Aktivieren oder Deaktivieren, Kopieren | Aktion löschen |
| Ein Auslöser | Aktivieren oder Deaktivieren, Kopieren | Auslöser löschen |
| Ein Alarm | Quittieren, Aktivieren oder Deaktivieren, Kopieren | Alarm löschen |
| Die Wurzel Alarms | Alle quittieren | |
| Assets, Bilder | Bild importieren… | |
| Assets, Icons | Neues eigenes Icon | |
| Assets, Farben | Neue Farbe | |
| Assets, Symbole | Neues eigenes Symbol, Symbol importieren…, Chat-Anweisung kopieren | |
| Ein Knoten unter System, Server, Connector oder Process | Der Hinweis, dass anderswo bearbeitet wird, und seine Schaltfläche Öffnen |
Kopieren verdoppelt die gewählte Definition an die Wurzel ihres Abschnitts, unter dem eigenen Namen der Quelle, wenn er frei ist, sonst als Name (2), Name (3) und so fort, und öffnet die Kopie zum Bearbeiten; ein kopierter Alarm beginnt im Normalzustand, ein kopierter Auslöser beginnt ohne Zeitplan, eine kopierte Aktion hat keinen Lauf aufgezeichnet. Aktivieren und Deaktivieren legen das Kennzeichen Aktiviert der Definition über dasselbe automatische Speichern um wie jedes Feld. Jedes Löschen fragt zuerst ("'X' löschen? … Das lässt sich nicht rückgängig machen.") und meldet "Gelöscht." im Aktionsprotokoll; eine Variable oder einen Alarm zu löschen lässt jeden Ausdruck, jedes Skript, jede Bedingung und jede Verknüpfung im Dashboard, die seine Adresse genannt hat, unauflösbar zurück, was die Validierung auflistet.
Ordner
Jeder der vier Abschnitte lässt sich in Ordner gliedern. Ein Ordner gehört zu einem Abschnitt und hält nur Einträge dieses Abschnitts; er schachtelt sich höchstens drei Ebenen tief. Ein Ordner ist reine Gliederung: Er hat keine Berechtigung, keine Auswertung und keinen Zustand.
Bei Variables und Alarms bildet die Kette der Ordner die Adresse: Eine Variable in Forno liest Variables.Forno.Setpoint, eine in seinem Unterordner Zona1 liest Variables.Forno.Zona1.Setpoint. Eine Ebene eines Abschnitts ist ein einziger Namensraum aus Segmenten, den seine Ordner und seine Definitionen teilen: Zwei Ordner dürfen je einen Setpoint halten, aber nichts, was auf derselben Ebene liegt, darf auf dasselbe Segment führen, und der Editor lehnt einen solchen Namen schon beim Tippen ab und nennt die bereits vergebene Adresse. Actions und Triggers werden über ihre Identität angesprochen, ihre Ordner gliedern also nur den Baum, und ihre Bereiche zeigen statt einer Adresse eine Zeile mit dem Ort.
| Befehl | Was geschieht |
|---|---|
| Neuer Ordner | Legt einen leeren Ordner namens FolderN an und öffnet sein Namensfeld in der Zeile des Baums; das Feld leer oder unverändert zu verlassen behält diesen Namen. |
| Ordner umbenennen | Öffnet das Namensfeld in der Zeile. Jede Adresse unter dem Ordner zieht mit, jeder Verweis wird umgeschrieben, und das Aktionsprotokoll sagt, wie viele ("Ordner umbenannt; 3 Verweise aktualisiert."). |
| Verschieben nach | Legt einen Ordner oder eine Definition unter einen anderen Ordner desselben Abschnitts oder zurück an die Wurzel des Abschnitts; Adressen und Verweise folgen. Die Liste bietet nur die erlaubten Ziele an: nie den Ordner selbst, nie einen seiner eigenen Unterordner, nie einen anderen Abschnitt und nie eine Ebene, auf der seine Unterordner die Grenze der Tiefe überschreiten würden. |
| Ordner entfernen | Fragt zuerst und sagt, was sich bewegt: "Seine 3 Einträge gehen nach Variables; nichts wird gelöscht. Verweise auf die Adressen, die sich bewegen, werden aktualisiert." Die Einträge und Unterordner rücken eine Ebene nach oben; das Entfernen wird abgelehnt, wenn zwei von ihnen am Ziel zusammenstoßen würden. |
Der Zyklus und die Warteschlange
Ein Zyklus der Logik läuft alle 100 ms auf einer einzigen, der Reihe nach abgearbeiteten Warteschlange: Er wertet jede Variable vom Typ Expression aus, dann jede aktivierte Alarmbedingung, in dieser Reihenfolge, eine Bedingung liest also die Werte der Variablen aus diesem Zyklus. Läufe von Aktionen, Schreibvorgänge auf Merker, Schreibvorgänge auf Tags und Quittierungen laufen über dieselbe Warteschlange, ein Skript verschränkt sich also nie mit einem Zyklus oder einem anderen Skript. Ein eigener Durchlauf, ebenfalls alle 100 ms, wirft fällige Auslöser auf die Warteschlange. Die Verbraucher (Dashboards, Kanäle, diese Seite) lesen den veröffentlichten Zustand; nichts auf dieser Seite stößt eine Auswertung von Hand an.
Werte schreiben
Jeder Schreibvorgang geht durch einen Kanal, gleich, was ihn ausgelöst hat: die Zuweisung eines Skripts oder Write(...), das Feld Wert setzen einer Variablen der Art Merker, ein Bedienelement im Dashboard, ein Rezept von Process, der Agent, ein externer OPC UA-Client, der einen öffentlichen Knoten schreibt. Der Kanal lehnt einen Wert ab, der nicht endlich ist oder sich nicht in den Typ des Ziels wandeln lässt, lehnt eine Quelle ab, die ein laufendes Rezept oder eine Verriegelung hält (und nennt den Halter), protokolliert den Schreibvorgang als alten Wert auf neuen Wert unter seiner Quelle (Bediener, MCP, der Lauf) und wendet ihn auf der Warteschlange der Logik an. Ein Schreibvorgang, dessen Quelle eine Aktion ist, ist die Ausnahme: Er geht allein in die ausführliche Aufzeichnung und nie in die Konsole der Ereignisse, denn ein Skript, das in jedem Zyklus schreibt, erzeugt Werte zu Tausenden und würde die Neuigkeiten der Station darunter begraben. Was die Konsole von einer Aktion trägt, sind ihre Fehlschläge. Ein Schreibvorgang auf einen Tag nimmt den technischen Wert und durchläuft die Wertkette des Tags rückwärts bis zu dem Rohwert, den das Gerät nimmt. Die Einzelheiten stehen auf Variablen und Aktionen.
Berechtigungen und Sperren
| Berechtigung | Was sie hier erlaubt |
|---|---|
| Logic anzeigen | Die Seite zu öffnen und alles darauf zu lesen, die laufenden Werte eingeschlossen. |
| Logic konfigurieren | Variablen, Aktionen, Auslöser, Alarme und Ordner anzulegen, zu bearbeiten, umzubenennen, zu verschieben, zu kopieren, zu aktivieren, zu deaktivieren und zu löschen und die Bibliothek der Assets zu pflegen. |
| Logic bedienen | Einen Wert eines Merkers zu schreiben, eine Aktion auszuführen, Alarme zu quittieren, hier, auf Dashboards und auf der Seite Ereignisse. |
Eine Rolle mit allein Logic anzeigen liest die ganze Seite: Die Editoren sind unter einem Hinweis inaktiv ("Ihre Rolle kann Logic anzeigen, aber nicht konfigurieren (Variablen, Aktionen, Auslöser, Alarme und Assets).") und kein Befehl zum Konfigurieren oder Bedienen wird gezeichnet. Eine Rolle mit Bedienen, aber ohne Konfigurieren behält Ausführen, Quittieren, Alle quittieren und Wert setzen aktiv. Solange eine Einheit von Process die Station hält, zeigt die Seite den Hinweis auf die Projektierungssperre, und jeder Befehl und jedes Feld zum Konfigurieren ist ausgegraut; Ausführen, Quittieren und Wert setzen bleiben verfügbar. Solange die Runtime gestoppt ist, lehnen sowohl Konfigurieren als auch Bedienen mit "Runtime gestoppt" ab; Baum und Bereiche bleiben lesbar, tragen aber keine laufenden Daten. Der Katalog der Bits steht auf Berechtigungen.
Was die Seite nicht tut
Es gibt kein Speichern und kein Rückgängig: Ein Tastendruck ist eine gespeicherte Änderung (das Aktionsprotokoll sagt "Gespeichert."), und ein abgelehntes Speichern lädt das Feld auf das zurück, was die Station hält. Definitionen, die der Agent über seine eigenen Werkzeuge anlegt oder löscht, frischen eine offene Spalte nicht von selbst auf; der Zweig wird neu gelesen, wenn diese Seite das nächste Mal in diesem Abschnitt etwas anlegt, kopiert oder löscht. Die Historie der Alarme, die Konsole der Ereignisse und die Dashboards wohnen auf ihren eigenen Seiten.