# Eingabe

> Werteingabe des Bedieners, die auf einen Datenpunkt geschrieben wird: das Feld nimmt an, was der Datenpunkt annimmt, und weist den Rest mit dem Grund ab.

**Eingabe** ist das Eingabefeld des Bedieners: ein Entwurf, der dem Bediener gehört, und eine
Taste **Setzen**, die ihn durch den einen Schreibkanal der Station an einen Datenpunkt sendet.
Sie zeichnet keinen eigenen Messwert; wer den Wert des Datenpunkts neben dem Feld haben will,
setzt einen [Wert](component-value) daneben, und das Feld zu benennen ist eine
[Beschriftung](component-label). Sie ist eine Komponente der Kategorie *Bedienung*; eine neue
belegt 4 × 1 Zellen.

Der Entwurf gehört dem Bediener: das lebende Auffrischen überschreibt nie, was getippt wurde, und
eine abgewiesene Eingabe bleibt im Feld stehen, die Berichtigung ist also eine Bearbeitung und
kein erneutes Tippen.

## Daten {#data}

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Adresse | Die verwurzelte Logic-Adresse des geschriebenen Datenpunkts: eine Merkervariable, ein schreibbares Tag, ein Vorbereitungsfeld einer Einheit (`Next.<field>`) oder der Datenpunkt für den Kommentar eines Laufs (`Commands.Comment`). Hier wird nichts ausgeschlossen: was das Eingabefeld dann annimmt, wird am Datenpunkt selbst abgelesen. | Freier Text; Vorschläge aus der Liste der lebenden Datenpunkte | leer |

Unter der Adresse druckt der Bereich, was das Feld gerade annimmt ("Dieses Feld nimmt eine Zahl,
0 bis 100, mit 1 Nachkommastelle auf."), ein Datenpunkt mit zwei Zuständen ist also schon vor
dem Lauf des Bildes daran zu sehen, dass die Zeile zu je einer Taste je Zustand wird.

## Was das Eingabefeld annimmt {#what-the-box-takes}

Die Art der Eingabe wird **vom Datenpunkt abgeleitet**, nie daneben gewählt: eine Kategorie, die
Sie gegen den Datenpunkt angeben könnten, wäre eine zweite Erklärung, frei darin, der zu
widersprechen, die der Datenpunkt bereits abgibt.

| Der Datenpunkt | Das Eingabefeld | Verhalten |
|---|---|---|
| Ein Wahrheitswert-Datenpunkt | Je eine Taste je Zustand (**Ein** / **Aus**) statt eines Feldes | Eine Berührung ist die ganze Anweisung. Die Tasten tragen absolute Werte, sie bleiben also auch bei schlechter Qualität benutzbar, anders als der [Schalter](component-toggle), der den Messwert kennen muss, den er umkehrt. Keine der beiden Tasten zeigt den Zustand des Datenpunkts. |
| Ein Ganzzahl-Datenpunkt | Ein Feld für ganze Zahlen | Eingaben mit Nachkommastellen werden abgewiesen; die Bildschirmtastatur bietet Ziffern an. Ein ganzzahliges Tag, dessen Skalierung oder Kalibrierung den Wert verändert, nimmt eine Dezimalzahl: sein technischer Wert ist reell. |
| Ein Datenpunkt mit reeller Zahl (Dezimalzahl) | Ein Feld für Zahlen | Beurteilt gegen das Band und die erklärten Stellen, wenn **Setzen** gedrückt wird, nie je Tastendruck; die Bildschirmtastatur bietet einen Ziffernblock mit Trennzeichen an. |
| Text, ein Zeitpunkt, ein Datenpunkt zur Vorbereitung oder für Kommentare, oder eine Adresse, auf die noch nichts antwortet | Ein Feld für freien Text | Das Band und die Nachkommastellen werden nicht gelesen, und der Bereich sagt das. |

## Zahl {#number}

Das Band und die Feinheit, die der Bediener *zusätzlich zum* Datenpunkt angibt:

| Feld | Was es tut | Werte | Vorgabe |
|---|---|---|---|
| Minimum | Die niedrigste Zahl, die das Feld sendet. Leer lässt diese Seite des Bandes offen. | Eine beliebige Zahl oder leer | leer |
| Maximum | Die höchste Zahl, die das Feld sendet. Leer lässt diese Seite offen. Ein Minimum über dem Maximum lässt keine Zahl dazwischen, und der Bereich warnt, dass das Feld jede Eingabe abweisen würde. | Eine beliebige Zahl oder leer | leer |
| Dezimalstellen | Wie fein eine Eingabe ist, die das Feld sendet. Leer sendet jede getippte Genauigkeit. Ein Datenpunkt, der zählt, nagelt sie auf 0 fest, was auch gespeichert ist. Die Stellen werden am Wert gefragt, nicht an den Ziffern: `12,500` ist `12,5`, angehängte Nullen einer Tastatur werden also nie abgewiesen. | 0 bis 15 oder leer | leer |

Ein Tag, das eigene Grenzen erklärt (seine Umrechnungsstufe **Grenzen** ist eingeschaltet), engt
alles ein, was hier angegeben ist: das Feld nimmt nur an, was die typisierte Wertkette unverändert
durchtragen würde.

Eine Eingabe außerhalb des Bandes, zu fein oder überhaupt keine Zahl wird **mit dem Grund
abgewiesen, und nichts wird geschrieben**. Die Zahl ist eine Anweisung an die Anlage, und eine
andere, an der Grenze genommen, wäre die Station, die für den Bediener entscheidet. Das ist mit
Absicht das Gegenteil der eigenen Konfigurationsfelder des Editors, die eine Eingabe außerhalb
des Bandes am nächsten Rand nehmen und das sagen.

## Was ein Schreiben bedeutet {#write-semantics}

- **Merkervariable**: der Entwurf wird gegen die Ausgabekategorie der Variablen geprüft und dann
  durch den Schreibkanal der Logik geschrieben. Ein leeres Feld schreibt einen leeren Wert.
- **Schreibbares Tag**: der Entwurf geht als technischer Wert in den Schreibkanal und wird
  vorher nie auf den Knotentyp des Tags gebracht. Der Kanal rechnet Kalibrierung und Skalierung
  auf dem Weg zur Leitung zurück (die Umrechnungskette des Tags rückwärts), also kommt 0,5 auf
  einem Int16-Tag mit Skalierung 0,1 als 5 am Gerät an. Ein Wert, den der Knotentyp nach der
  Rückrechnung nicht aufnehmen kann (eine negative Zahl in einem vorzeichenlosen Typ, eine über
  dem Maximum des Typs), wird mit dem Bereich des Typs abgewiesen, und nichts wird geschrieben.
- **`Next.<field>`**: legt den Text im Vorbereitungsbereich der Einheit für den nächsten Lauf ab.
  Vorbereiten ist Vorbereitung und kein Schreibzugriff auf die Anlage: kein Kanal, kein
  Journaleintrag. Die Rückmeldezeile sagt "Vorbereitet".
- **`Commands.Comment`**: hängt einen Kommentar zum Lauf an (oder im Leerlauf eine Anmerkung nach
  dem Lauf), an den aktiven Zusammenhang der Einheit, dem angemeldeten Bediener zugeschrieben;
  das Feld leert sich, und die Rückmeldezeile sagt "Kommentar hinzugefügt". Ein leerer Kommentar
  wird abgewiesen.

Die vorübergehende Rückmeldezeile meldet jeden Ausgang und verfällt nach wenigen Sekunden. Die
Berechtigung wird beim Druck erneut geprüft. In einer Zelle ohne Zeile für sie und ohne Titel in
der Ecke über dem Bedienelement nimmt die Antwort das Wort der Taste **Setzen** ein, solange
sie steht (über einem Datenpunkt mit zwei Zuständen das Wort der gedrückten Taste), eine
Ablehnung in der Fehlerfarbe. Die Taste behält ihre Breite, was sie nicht fasst, wird also mit
Auslassungspunkten gekürzt, mit der ganzen Antwort im Tooltip, und das Feld rückt nie.

Das Feld ist es, das auf die Anlage wartet, nicht die Logic: Die Zeile meldet deshalb, was aus dem
Wert geworden ist, und nicht bloß, dass er gesendet wurde. Eine Ablehnung steht in den Worten
dessen, der sie ausgesprochen hat: in den eigenen der Station für das, was sie vor dem Senden
entschieden hat ("'Setpoint' wurde nicht geschrieben: das Gerät ist nicht verbunden.") und in denen
der Anlage oder ihres Treibers für das, was auf der Leitung geschah. Ein Wert, den eine neuere
Eingabe auf demselben Datenpunkt vor dem Senden überholt hat, ist keine Ablehnung und sagt nichts:
Der neuere Wert ist der, den die Anlage bekommt.

## Berechtigungen und die Sperre {#permissions-and-the-lock}

Eine Variable oder ein Tag zu schreiben verlangt die Berechtigung der Rolle, Dashboards zu
bedienen; die Datenpunkte zur Vorbereitung und für Kommentare sind Änderungen an Process und
verlangen stattdessen die Berechtigung, Abläufe auszuführen. Ein gesperrter Druck zeichnet das
gemeinsame Sperrzeichen mit dem Grund im Tooltip, und das Feld selbst ist gesperrt, solange die
Sperre gilt (siehe die [Seite der Dashboards](home)). Ein gebundener Datenpunkt, der nicht liest,
trägt das gemeinsame Zeichen für den misslungenen Messwert; die Tasten des Kennzeichens und das
Textfeld bleiben benutzbar, denn ihre Anweisung hängt nicht vom Messwert ab.

Die gemeinsamen Abschnitte Darstellung, Kennung, Position und Ebene und Aktionen sind auf
der [Seite der Komponenten](components#the-shared-property-sections) beschrieben.
