Aktionen
Der Editor einer Aktion: Identität und Ort, der Block des Skripts, was ein Skript lesen und schreiben darf, jede Prüfmeldung, der Befehl Ausführen und sein Journal, Aktivieren und Deaktivieren, Kopieren und Löschen und die Grenzen eines Laufs.
Eine Aktion ist ein Block aus JavaScript-Anweisungen, der den Adressraum liest und Variablen der Art Merker sowie Tags schreibt. Aktionen sind der Schreibweg von Logic: Sie laufen auf Anforderung (Ausführen), über einen Auslöser oder aus einer Schaltfläche im Dashboard, die an sie gebunden ist. Wählen Sie eine Aktion unter dem Abschnitt Actions der Spalte von Logic (oder legen Sie eine mit Neu… > Neue Aktion an), um ihren Editor zu öffnen; Lesen setzt Logic anzeigen voraus, Bearbeiten Logic konfigurieren, Ausführen Logic bedienen.
Die Kopfzeile zeigt die Marke der Aktion, den Namen, die Zeile "Ein Skript, das Sie auf Anforderung ausführen oder das ein Auslöser für Sie ausführt und das Variablen und Tags schreibt." und eine Pille Deaktiviert, solange die Aktion aus ist. Die Spalte des Formulars enthält IDENTITÄT und SKRIPT; die Schiene enthält LETZTER LAUF.
Identität
| Feld | Was es ist | Werte / Standard | Wirkung |
|---|---|---|---|
| Name | Der angezeigte Name und die Beschriftung, unter der ein Lauf protokolliert wird. | Freier Text; eine neue Aktion heißt ActionN; ein leerer Name wird als Action gespeichert. |
Speichert bei jedem Tastendruck automatisch. Aktionen werden über ihre Identität angesprochen, Umbenennen schreibt also nichts um und macht nichts kaputt. |
| Zeile mit dem Ort | Wo die Aktion abgelegt ist, in Worten: Actions / Startup / Walk setpoint. |
Wird nur gelesen. | Eine Aktion hat keine Adresse; die Zeile ist ein Ort und nie etwas, das man in einen Ausdruck tippt. Ändern Sie sie mit Verschieben nach im Baum. |
| Beschreibung (wahlweise) | Freier Text. | Standardmäßig leer. | Keine. |
Skript
Die Karte SKRIPT ist der Editor für Skripte mit dem Hinweis "JavaScript-Anweisungen (let, if, for, Funktionen). Schreiben Sie Variablen der Art Merker über eine Zuweisung (Variables.Setpoint = 21.5;) und Tags mit Connector.Driver.Device.Tag.Write(value). Lesevorgänge sind nicht durch die Qualität geschützt: Prüfen Sie .State() und sichern Sie Lücken vor dem Rechnen mit ?? ab." Das Skript speichert bei jedem Tastendruck automatisch und wird jede halbe Sekunde geprüft; die Meldung erscheint unter dem Hinweis. Die Prüfung führt das Skript nie aus.
Ein Skript ist gewöhnliches JavaScript im strengen Modus (lokale Werte, if, Schleifen, Funktionen, Math, Date, JSON) über demselben Adressraum und derselben Lesefläche wie Ausdrücke, mit zwei Unterschieden. Lesevorgänge sind nicht durch die Qualität geschützt: Eine Lücke liest als null, prüfen Sie also .State() und sichern Sie das Rechnen mit ?? ab; einen schlechten Messwert zu behandeln ist genau das, wofür Aktionen da sind. Und ein Skript darf Variablen der Art Ausdruck lesen (ihren veröffentlichten Wert); nur ein Ausdruck darf nicht auf sie verweisen.
Was eine Aktion schreiben darf
Genau zwei Formen verändern die Anlage, und beide gehen durch den protokollierten Schreibkanal:
| Schreibvorgang | Form | Ziel |
|---|---|---|
| Zuweisung an einen Merker | Variables.Setpoint = 21.5; oder Variables.Forno.Setpoint = 21.5; |
Eine Variable der Art Merker, Ordnerebenen eingeschlossen. Der Wert wird in den Ausgabetyp der Variablen gewandelt und für die Remanenz vorgemerkt, wenn die Variable remanent ist. |
| Schreibvorgang auf einen Tag | Connector.Simulated.Pump.Cmd.Write(true); |
Ein lebender Tag. Der Wert ist ein technischer Wert: Er läuft rückwärts durch die Wertkette des Tags bis zu dem Rohwert, den das Gerät nimmt. |
Ein Schreibvorgang wirkt sofort: Was vor einem Fehlschlag angewendet wurde, bleibt angewendet, und das Journal zeigt jeden Schreibvorgang als alten auf neuen Wert unter der Quelle Aktion. Ein fehlgeschlagener Schreibvorgang wirft und bricht diesen Lauf ab, mit dem Grund in seinem Ergebnis:
- "Das Schreiben auf 'X' wurde abgelehnt: Der Wert ist nicht endlich." (NaN oder unendlich)
- "'Tag' ist im Connector nicht angelegt." (ein deaktiviertes Gerät oder ein Tag, den der eingebettete Server nicht trägt)
- "'value' konnte für 'Tag' nicht umgewandelt werden." (der Wert passt nicht zu dem Datentyp, den der Tag schreibt)
- "'X' ist von '
<holder>' schreibgeschützt." (ein laufendes Rezept oder eine Verriegelung hält die Quelle) - "Das Schreiben auf 'Tag' ist fehlgeschlagen. Läuft der Server?" (der eingebettete Server nimmt den Schreibvorgang nicht an)
- "Die Variable 'X' wurde nicht gefunden." und "'Variables.X' wird berechnet: geschrieben werden nur Speichervariablen."
Was die Prüfung ablehnt
| Meldung | Ursache |
|---|---|
| Ein Skript ist erforderlich. | Der Editor ist leer. |
| Fehler im Skript: … | Der Text lässt sich nicht lesen. |
| Adressen müssen fest sein: Auf 'Root' wird mit einem berechneten Segment zugegriffen. | Variables[name] oder irgendein Segment, das kein Literal ist. |
| Unvollständige Adresse '…'. | Ein Verweis, der zu kurz ist, um einen Punkt zu benennen. |
| 'X' wurde nicht gefunden. | Ein Lesevorgang oder ein Ziel einer Zuweisung, das auf nichts auflöst. |
| Weisen Sie der Variable selbst zu: Variables.Name = value. | Die linke Seite von = nennt ein Element oder geht tiefer, als die Adresse einer Variablen reicht. |
| 'X' ist eine Ausdrucksvariable: Sie wird berechnet und nie geschrieben. | Eine Zuweisung an eine Variable der Art Ausdruck. |
| Datenpunkte unter 'Connector' sind nur lesbar. Tags schreiben Sie mit Connector.Driver.Device.Tag.Write(value). | Eine Zuweisung an eine andere Wurzel als Variables (Process hat seine eigene Meldung). |
| Datenpunkte von Process sind in Aktionen nur lesbar; Laufbefehle und vorbereitende Schreibvorgänge werden von Skripten nicht unterstützt. | Eine Zuweisung an einen Punkt von Process oder ein Write darauf. |
| Laufbefehle von Process lassen sich nicht aus Aktionen aufrufen; Befehlspunkte stellen nur lesbare Werte zur Bereitschaft bereit. | Ein Aufruf von Process.<Model>.<Unit>.Commands.Start() oder irgendeinem anderen Befehlspunkt; ein Punkt unter Commands liest allein, ob der Befehl jetzt ausgeführt werden könnte. |
| Die Operatoren ++ und -- werden auf Datenpunkten nicht unterstützt. Verwenden Sie Variables.Name = Variables.Name.ValueToReal() + 1. | Variables.N++. |
| Write(value) ist das Schreiben eines Tags: Connector.Driver.Device.Tag.Write(value). | Write an etwas aufgerufen, das keine Adresse eines Tags ist. |
Lokale Werte in JavaScript (let x = 1; x = x + 1;) bleiben von diesen Regeln unberührt.
Ausführen
Ausführen ist der führende Befehl der Leiste über einer offenen Aktion; er wird nur für eine Rolle mit Logic bedienen gezeichnet und ist mit "Runtime gestoppt" ausgegraut, solange die Station nur lesend ist (die Projektierungssperre graut ihn nicht aus: Ausführen ist Bedienen und nicht Konfigurieren). Hat die Rolle auch Logic konfigurieren, wird zuerst der Entwurf im Editor gespeichert, und der Lauf führt die gespeicherte Definition aus; ohne diese Berechtigung führt der Lauf die dauerhafte Definition aus (die Felder werden nur gelesen, die beiden gehen also nie auseinander).
Jeder Lauf läuft auf der einen Warteschlange der Logik mit einer frischen Maschine für das Skript, zwischen zwei Läufen dringt also kein Zustand herüber, und ein Lauf verschränkt sich nie mit einem Zyklus, einer anderen Aktion oder einem Schreibvorgang des Bedieners. Ein Lauf wird jenseits von 500 ms ("Das Skript wurde abgebrochen: Es lief über das Zeitlimit von 500 ms hinaus (Endlosschleife?)."), 100.000 Anweisungen oder 4 MB Speicher abgebrochen, jeweils mit einer Meldung, die die Grenze nennt. Eine deaktivierte Aktion schlägt fehl, ohne zu laufen ("Die Aktion ist deaktiviert."); eine gestoppte Runtime antwortet "Die Runtime der Logik läuft nicht." Das Aktionsprotokoll meldet "Lauf OK in 12 ms." oder "Lauf fehlgeschlagen: <Grund>". Nur der Fehlschlag erreicht die Konsole von Ereignisse, unter dem Namen der Aktion und zusammen mit dem, was sie aufgerufen hat: Manuell beim Befehl, der Name des Auslösers bei einem geplanten Lauf. Er wird beim ersten Mal als Warnung protokolliert, zusammengefasst, solange er mit derselben Ursache weiter fehlschlägt, und noch einmal vermerkt, wenn er sich erholt, und diese Zeile der Erholung ist der einzige Eintrag, den ein erfolgreicher Lauf dort je schreibt. Ein Lauf, der einfach gelingt, und jeder Wert, den er schreibt, wird allein in die ausführliche Aufzeichnung geschrieben: Ein Skript, das in jedem Zyklus schreibt, erzeugt Werte zu Tausenden, und eine Konsole voll davon ist eine Konsole, in der niemand die Neuigkeiten der Station lesen kann.
Die Schiene LETZTER LAUF zeigt, wann die Aktion zuletzt lief (oder "Nie gelaufen."), "Dauer: N ms", den letzten Fehler in einem warnenden Hinweis und die Erinnerung "Läufe werden auf der einen Warteschlange der Logik ausgeführt. Nur ein fehlgeschlagener Lauf erreicht die Konsole der Ereignisse; ein Lauf, der gelingt, und jeder Wert, den er schreibt, bleiben der ausführlichen Aufzeichnung vorbehalten. Auslöser rufen Aktionen nach Zeitplan auf." Die Schiene gehört zur laufenden Aktion: Ein automatisches Speichern leert sie nie; ein Neustart der Runtime tut es.
Befehle
| Befehl | Wirkung | Ausgegraut, wenn | Nicht gezeichnet, wenn |
|---|---|---|---|
| Ausführen | Speichert den Entwurf (mit Logic konfigurieren) und reiht einen Lauf ein. | Runtime gestoppt. | Der Rolle fehlt Logic bedienen. |
| Aktivieren / Deaktivieren | Legt Aktiviert um; eine deaktivierte Aktion lehnt Ausführen ab und lässt jeden an sie gebundenen Auslöser leer laufen. | Station gesperrt oder nur lesend. | Der Rolle fehlt Logic konfigurieren. |
| Kopieren | Verdoppelt die Aktion an die Wurzel Actions unter einem freien Namen und öffnet die Kopie, die keinen Lauf aufgezeichnet und keinen Auslöser gebunden hat. | Station gesperrt oder nur lesend. | Der Rolle fehlt Logic konfigurieren. |
| Aktion löschen | Fragt "'X' löschen? Damit verschwindet die Aktion. Das lässt sich nicht rückgängig machen." Ein daran gebundener Auslöser bleibt ungebunden zurück und wird nicht gelöscht. | Station gesperrt oder nur lesend. | Der Rolle fehlt Logic konfigurieren. |
Der Bereich der Wurzel Actions führt jede Aktion mit ihrem Zustand in der Spalte Wert auf: "Aktiviert · letzter Lauf <wann>", mit "· Fehler", wenn der letzte Lauf fehlschlug, oder "Deaktiviert".
Was Aktionen nicht tun
Sie erteilen keine Befehle für Läufe von Process, bereiten keinen Ablauf vor und fügen keinen Kommentar zu einem Lauf hinzu (diese Punkte sind nur lesende Werte über Bereitschaft und Vorbereitung); sie quittieren keine Alarme; sie laufen nicht nebeneinander; sie halten zwischen zwei Läufen keinen Zustand und teilen keine Funktionen; und sie werden nicht durch Wertänderungen oder Bedingungen ausgelöst, sondern allein durch Ausführen, durch das Intervall eines Auslösers oder durch eine Schaltfläche im Dashboard.