Anlagenbefehle (Befehlsregister)
PlantPulse legt über das Schreiben von Werten in Tags (Steuerschreiben) eine weitere Ebene: «Was kann mit dieser Anlage getan werden?». Dies ist das Befehlsregister.
Der Bediener schreibt keine 1200 in TAG_CNC01_SPEED_SP, sondern wählt «Geschwindigkeit einstellen (SET_SPEED)» und gibt nur die Geschwindigkeit ein. Welche Tags in welcher Reihenfolge beschrieben werden und unter welchen Bedingungen dies erlaubt ist, wird vom Administrator im Voraus definiert.
Wenn Sie hier [Ausführen] drücken, wird der Wert tatsächlich in die SPS geschrieben. Testen Sie unbedingt mit einer Simulatorverbindung oder an einer gestoppten Anlage. Es gibt kein automatisches Rollback – selbst wenn die Sequenz mitten drin fehlschlägt, werden die zuvor geschriebenen Werte nicht zurückgesetzt (dies ist ein Design zur Bewahrung des Prüfprotokolls).
Wo befindet sich das?
Wählen Sie im Asset-Bildschirm (/asset/tree/index) den Knoten ANLAGE (EQUIPMENT) aus, öffnet sich unten ein Tab.
| Tab | Funktion |
|---|---|
| Befehle | Definierte Befehle auswählen und ausführen · Verlauf der letzten Befehle |
| Register | Befehle definieren (registrieren, bearbeiten, löschen) · Asset-Statement |
Die Definition befindet sich im Panel «Befehlsregister» im Tab Register. Der Tab heißt nicht «Befehle», sondern «Register», sodass man anfangs leicht im falschen Tab sucht.
Wer kann sehen? Wer kann ausführen?
Der Zugriff ist in drei Ebenen geschützt.
| Ebene | Wo | Was wird gefiltert |
|---|---|---|
| ① URL-Filter | /asset/*/command* in security-rule.xml | Nur ADMIN · MANAGER – für andere ist die URL selbst blockiert |
| ② Bildschirm & Controller | Befehlsausführungs-Panel im Befehls-Tab | Nur für ADMIN / MANAGER sichtbar. Andere Rollen sehen nur den Verlauf unten. Der Server antwortet mit 401 bei nicht authentifiziert, 403 bei nicht ADMIN/MANAGER |
| ③ Pro Befehl | Erlaubte Rollen in der Definition | Für jeden Befehl wird separat festgelegt, «wer ihn ausführen darf». Bei Nichtberechtigung REJECTED_FORBIDDEN |
Selbst wenn Sie Ebene ② passieren, kann Ebene ③ Sie blockieren – das bedeutet, dass die Einschränkung auf Befehlsebene weiter verschärft werden kann.
Die Zugriffskontrolle ist als «ADMIN oder MANAGER» beschrieben, aber MANAGER ist eine Rolle, die auf dem Benutzerregistrierungsbildschirm nicht vergeben werden kann (es gibt nur ADMIN·API·USER zur Auswahl). Wenn Sie sie über die API erzwingen, kann sich das Konto nach dem Login nicht anmelden – siehe Benutzerverwaltung.
Daher ist de facto nur ADMIN in der Lage, diesen Bildschirm zu verwenden. Auch die «erlaubten Rollen» in der Definition sind nur bei ADMIN und API wirksam.
Befehle definieren – Register-Tab
Klicken Sie auf [Befehl registrieren], öffnet sich der Definitionsdialog. Folgen Sie der Anleitung auf dem Bildschirm: «Definieren Sie die semantischen Befehle für dieses Asset. Konfigurieren Sie Parameter, Vorbedingungen und die sequenziell ausgeführten Tag-Schreibschritte.»
Basisinformationen
| Feld | Pflicht | Beschreibung |
|---|---|---|
| Befehlstyp | ✅ | Semantischer Bezeichner – Werte wie START · STOP · SET_SPEED |
| Befehlsname | ✅ | Name, der im Auswahlfeld angezeigt wird |
| Erlaubte Rollen | Checkboxen ADMIN · MANAGER · API. «Rollen, die diesen Befehl ausführen dürfen» | |
| Reihenfolge | Sortierreihenfolge in der Liste (kleiner = zuerst) | |
| Aktiv | Wenn deaktiviert, erscheint der Befehl nicht im Auswahlfeld. Die Definition bleibt erhalten |
Das Berechtigungsgate ist fail-closed – wenn die Rolle des Antragstellers nicht in der 허용 역할-Liste steht, wird abgelehnt. Wenn die Liste leer ist, ist die Liste leer, also erhält selbst ADMIN REJECTED_FORBIDDEN.
Parameter
Hier definieren Sie die Werte, die der Bediener zur Ausführungszeit eingibt. Jede Zeile enthält Name · Typ · Minimum · Maximum · Optionen · Pflicht.
| Typ | Prüfung |
|---|---|
| Number | Wird als Zahl geparst und muss ein endlicher Wert sein (NaN·Infinity werden unabhängig vom Bereich abgelehnt). Wenn 최소/최대 vorhanden sind, muss der Wert dazwischen liegen (Grenzen inklusive) |
| Boolean | true / false (Groß-/Kleinschreibung wird ignoriert) |
| Enum | Einer der in 옵션 aufgeführten Werte |
| String | Keine Prüfung |
- Wenn Pflicht und leer, wird abgelehnt (
REJECTED_PARAM). - Optionale Parameter: Wenn leer, wird die Typprüfung übersprungen; wenn ein Wert eingegeben wird, wird er geprüft.
- Ein Befehl ohne Parameter ist ebenfalls möglich.
Befehlsfluss – Schrittfolge
Der Bereich Befehlsfluss im Definitionsdialog ist ein visueller Editor. Ziehen Sie Knoten aus der linken Palette („Klick = am Ende hinzufügen · Ziehen = dazwischen einfügen“) und füllen Sie die Werte im rechten Inspektor aus.
[시작] → [쓰기] → [지연] → [읽기 확인] → [종료]
| Knoten | Inspektor-Felder | Funktion |
|---|---|---|
Schreiben (write) | Tag · Wertausdruck · Vorbedingung (Interlock) | Schreibt einen Wert in das Tag |
Lesen zur Bestätigung (read_back) | Tag · Operator · Erwarteter Wert · Stabilisierungszeit · Abfrageintervall · Toleranz | Liest erneut, ob der geschriebene Wert tatsächlich übernommen wurde |
Verzögerung (delay) | Verzögerung (ms) | Wartet bis zum nächsten Schritt |
Der Wertausdruck ist entweder ein Literal oder eine Parameterreferenz – gemäß Bildschirmhilfe: «Literalwert oder Ausdruck. {param} wird durch den gleichnamigen Befehlsparameter ersetzt.» {speed} · 1 · SET {speed} RPM sind alle möglich.
Leere Felder bei Lesen zur Bestätigung verwenden Standardwerte – Stabilisierung 2000 ms · Abfrage 200 ms · Toleranz 0.0. Da SPS-Werte Zeit zum Einpendeln brauchen, absorbiert dieses Stabilisierungsfenster Abweichungen, wenn direkt nach dem Schreiben erneut gelesen wird.
In der Tag-Liste des Schreibknotens sind nur Tags enthalten, die zur Anlage gehören, deren rw W oder RW ist und deren tag_type SETPOINT oder COMMAND ist. Die Tag-Listen für Lesen zur Bestätigung und Vorbedingungen sind uneingeschränkt (da es sich um Lesen handelt).
Wenn das gewünschte Tag nicht in der Liste ist, ändern Sie zuerst Lesen/Schreiben und Tag-Typ im Tag-Eigenschaften-Tab.
Vorbedingungen und Interlocks
Jede Bedingung hat drei Felder: Tag · Operator · Wert, plus ein zusätzliches Interlock-Kontrollkästchen. Die Operatoren sind eq · ne · gt · gte · lt · lte.
| Kein Interlock | Interlock | |
|---|---|---|
| Vor Ausführungsbeginn | Prüfung ✅ | Prüfung ✅ |
| Direkt vor jedem Schreibschritt | Keine Prüfung | Erneute Prüfung ✅ |
Wenn die Sequenz Verzögerungen oder Lese-Bestätigungen enthält, entsteht eine Zeitlücke zwischen Startzeitpunkt und tatsächlichem Schreibzeitpunkt. Was, wenn in dieser Zeit das Sicherheitstor geöffnet wird? Nur Interlock-Bedingungen werden direkt vor dem Schreiben erneut geprüft; wenn sie nicht mehr zutreffen, wird das Schreiben nicht ausgeführt und die Sequenz abgebrochen.
Bedingungen wie «Tür geschlossen = TRUE» oder «Not-Aus = FALSE» müssen als Interlock definiert werden.
Auch fehlerhafte Bedingungsdefinitionen werden nicht durchgelassen. Wenn ein Tag oder Operator fehlt oder das Parsen fehlschlägt, wird nicht stillschweigend übersprungen, sondern mit REJECTED_PRECONDITION blockiert – ein fail-closed-Design, um Sicherheitsgates nicht zu umgehen.
Befehle ausführen – Befehls-Tab
- Wählen Sie im Auswahlfeld des Befehls-Tabs – nur aktive Definitionen, in der Reihenfolge. (Wenn «Keine aktiven Befehle vorhanden» angezeigt wird, aktivieren Sie sie im Register.)
- [Ausführen] – Wenn Parameter definiert sind, erscheint zuerst der Parametereingabe-Dialog (die passenden Steuerelemente werden automatisch generiert – Number mit min/max, Enum als Auswahl, Boolean als wahr/falsch).
- Bestätigungsdialog – «Möchten Sie den Befehl ○○ für das Asset ○○ ausführen?» mit Parameterzusammenfassung. Zur Verhinderung von Fehlbedienung – lesen Sie hier unbedingt den Asset-Namen.
- Das Ergebnis wird im Panel angezeigt – schrittweise mit Tag · Operation · Angeforderter Wert · Gemessener Wert · Erfolg · Fehler.
Ausführungsreihenfolge (festgelegt)
정의 로드 → 에셋 확인 → 자산락 → 권한 → 파라미터 → 태그 스코프 → 사전조건
↓
종결 판정 ← 스텝 시퀀스(쓰기 직전 인터록 재검증) ←
Die Asset-Sperre serialisiert Befehle für dieselbe Anlage vollständig. Befehle für verschiedene Anlagen werden parallel ausgeführt.
Ergebnisstatus und Maßnahmen
| Status | Bedeutung | Wo nachsehen |
|---|---|---|
SUCCESS | Alle Schritte erfolgreich | – |
FAILED | Fehler in einem Schritt, dort gestoppt | Spalte «Fehler» in der Ergebnistabelle. Frühere Schreibvorgänge sind bereits übernommen |
REJECTED_NOT_FOUND | Definition fehlt · gehört zu anderer Anlage · inaktiv | Im Register prüfen, ob aktiviert |
REJECTED_FORBIDDEN | Ihre Rolle ist nicht in den erlaubten Rollen des Befehls | Erlaubte Rollen in der Definition |
REJECTED_PARAM | Parameter entsprechen nicht der Spezifikation | Pflichtfehler · Bereich · Enum-Wert |
REJECTED_TAG_SCOPE | Das Tag des Schritts gehört nicht zur Anlage oder ist nicht schreibbar geworden | Wenn Tags nach der Definition neu zugewiesen oder rw geändert wurden |
REJECTED_PRECONDITION | Vorbedingung nicht erfüllt – oder die Vorbedingungsdefinition selbst ist fehlerhaft | Aktuellen Wert des Bedingungs-Tags |
REJECTED_BUSY | Ein anderer Befehl läuft auf derselben Anlage (HTTP 409) | Nach kurzer Zeit erneut drücken |
FAILED ist nicht «nichts ist passiert»REJECTED_* wurde vor Beginn des Schreibens blockiert, daher hat sich der Anlagenzustand nicht geändert. Im Gegensatz dazu wurde FAILED in der Sequenz gestoppt, sodass frühere Schreibvorgänge bereits übernommen sind. Überprüfen Sie in der Ergebnistabelle, wie weit es gekommen ist, und setzen Sie es bei Bedarf manuell zurück.
Nur REJECTED_BUSY und REJECTED_NOT_FOUND werden nicht in den Verlauf aufgenommen (Konflikt vor Übertragung · Routing-Fehler).
Sequenzgrenzen
| Element | Grenze |
|---|---|
| Gesamte Sequenz | 30.000 ms – wenn überschritten, wird der Schritt nicht ausgeführt und FAILED (op deadline) |
| Lesen zur Bestätigung | Stabilisierungszeit (Standard 2.000 ms) |
| Schreiben | Edge HTTP-Timeout |
Lesen zur Bestätigung liest mehrfach per Polling, aber das Schreiben wird nur einmal ausgeführt. Eine erneute Ausgabe wurde bewusst blockiert, da dies das Risiko einer Teilanwendung birgt – bei Fehlern muss ein Mensch entscheiden und erneut ausführen.
Wo bleibt der Verlauf?
Abgeschlossene Ausführungen werden als Standard-asset_command veröffentlicht und landen in der Verlaufstabelle (tm_asset_command) · UNS · Timeline · Cache. Fehler und Ablehnungen werden auch im Diagnoseprotokoll erfasst (Diagnose).
Die «Liste der letzten Befehle» unten im Befehls-Tab zeigt auch Befehle, die vom Statement ausgegeben wurden – Zeitstempel · Statement-Name · Schlüssel · Wert (JSON).
Häufig gestellte Fragen
F. Das Befehlsausführungs-Panel wird nicht angezeigt.
A. Ihre Rolle ist nicht ADMIN (oder das nicht zuweisbare MANAGER). USER·API sehen nur den Verlauf unten.
F. Im Auswahlfeld steht «Keine aktiven Befehle vorhanden». A. Es gibt keine Definitionen oder alle sind inaktiv. Aktivieren Sie sie im Register-Tab.
F. Die Tag-Liste im Schreibschritt ist leer.
A. Es gibt keine Tags für diese Anlage, die rw W/RW und tag_type SETPOINT/COMMAND erfüllen. Ändern Sie es im Tag-Eigenschaften-Tab.
F. Ich erhalte ständig REJECTED_BUSY.
A. Ein anderer Befehl derselben Anlage läuft noch. Prüfen Sie in der Liste der letzten Befehle, ob ein Befehl mit langen Verzögerungen oder Lese-Bestätigungen läuft.
F. Ich habe ausgeführt, aber der Wert scheint sich nicht geändert zu haben. A. Sehen Sie in die Spalte Gemessener Wert der Ergebnistabelle. Wenn ein Lesen-zur-Bestätigung-Schritt vorhanden ist, ist dies der tatsächlich erneut gelesene Wert. Wenn kein solcher Schritt vorhanden ist, wissen Sie nur, dass geschrieben wurde, nicht ob es übernommen wurde – fügen Sie bei wichtigen Befehlen eine Lese-Bestätigung hinzu.
Verwandte Bildschirme
- Fabrikverwaltung – Einstellungen für
rw·tag_typevon Tags - Anlagen – Anlagenliste und Datenabfrage
- Diagnose – Diagnoseprotokoll für Fehler und Ablehnungen
- Sicherheitsrichtlinie – Rollen und Berechtigungen