Prüfpläne als calScript¶
Ein Prüfplan lässt sich statt im Schritt-Editor auch als Text schreiben:
calScript. Der Text wird beim Speichern in dasselbe
calserver.procedure-Dokument übersetzt, das auch der Editor erzeugt. Lauf,
Erfassung, Bewertung und Kalibrierschein bleiben unverändert; jede bestehende
Vorlage lässt sich umgekehrt als Skript lesen und wieder speichern.
Wie Prüfplan, Treiber und Ablesung (von Hand, über den Messplatz, mit der Kamera) zusammenspielen, erklärt das Konzept; die Geräteseite steht unter Treiberprofile und Dialekte.
Beispiel¶
calscript 0
plan "Fluke 23 — Kalibrierung mit Fluke 5520A"
group "Sichtprüfung"
info "Prüfling und Normal 30 Minuten akklimatisieren."
confirm "Gehäuse und Buchsen unbeschädigt"
confirm "Keine Batteriewarnung"
end
group "Gleichspannung 320 mV"
image "anschluss-v-ohm.svg"
result numeric
prefix m
unit V
range 320
resolution 0.1
tol 0.3% + 1 D
uncertainty 0.03
k 2
rule "ILAC-G8 w = U"
measure 100 "100 mV"
measure 200 "200 mV"
measure 300 "300 mV" @ 50 Hz aux "Bereichsende"
end
rate "Zustand der Messleitungen" map "1-2:fail|3-5:pass"
message "Kalibrieretikett anbringen"
Beispielpläne¶
Sieben vollständige Pläne liegen calServer bei. Im Schritt-Editor öffnet sie die Skript-Ansicht unter Mehr › Beispiel öffnen; ein Beispiel ersetzt den Text erst nach Rückfrage und wird gespeichert wie jeder andere Plan. Der Kommentarkopf jedes Beispiels sagt, was es zeigt, welche Treiberprofile der Messplatz braucht und woher die Messunsicherheit kommt.
| Beispiel | Arbeitsweise | Zeigt vor allem |
|---|---|---|
| 1 Tischmultimeter 6½ Stellen | vollautomatisch: Runner stellt den Kalibrator (source cal) und liest den Prüfling (read device uut) |
Gerätebindung als Gruppenvorgabe, repeat, Modifier, ask/if yes/else mit anderer Messfunktion je Zweig, if fail, Halt an Meldungen |
| 2 Handmultimeter mit IR-Schnittstelle | halbautomatisch: Drehschalter von Hand, Runner hält an jeder Meldung | Frage wählt die Ablesequelle (IR-Adapter oder Kamera), Gruppen in einem if-Block, Toleranz mit Digits |
| 3 Handmultimeter ohne Schnittstelle | Kamera: Kalibrator von Hand, Webcam liest | read camera, capture auto und confirm, Kamera mit repeat, read manual als Ausnahme, md, if no |
| 4 Feinmessmanometer 10 bar | rein manuell | Serien mit direction up/down und Umkehrspanne, Referenz von Hand mitgelesen (ref manual), feste Messunsicherheit mit k und rule, ref none, result noyes, rate, verschachteltes if, if pass … else |
| 5 Kalibrator als Prüfling | vollautomatisch mit getauschten Rollen: Prüfling gibt (source uut), Referenzmultimeter misst (ref device dmm) |
Treiberprofil ohne Rolle, frei benannte Rolle, Ablesung des Normals als Bezug, stable, ppm plus Absolutwert mit Einheit |
| 6 Temperaturfühler im Kalibrierbad | Sammellauf: ein Bad, ein Referenzthermometer, mehrere Prüflinge an den Kanälen eines Mehrkanal-Thermometers | ref device thermo, stable mit absolutem Band, source bath, contrib des Bades, direction mit Umkehrspanne, optional |
| 7 Fluke 289, Ablesung wählbar | dieselben Punkte über den Runner (IR-Adapter), per Kamera oder von Hand; die Ablesung wählt der Prüfer im Vorlauf | read device uut \| camera \| manual mit source cal in jeder Wahl, jeder Punkt nur einmal im Plan, Halt an Meldungen, optional |
Die Toleranzen sind Beispielwerte nach Art eines Datenblatts. Vor dem
produktiven Einsatz gehören sie gegen das gültige Datenblatt des Prüflings
geprüft. Die Dateien liegen im Repository unter
laravel/resources/calscript/examples/; ein Test stellt sicher, dass sie ohne
Hinweis kompilieren, das Formatieren und den Weg über die Tabelle überstehen
und zusammen jedes Sprachmittel zeigen.
Editor¶
Das Skript ist seit Dokumentversion 4 die Quelle eines Prüfplans; Tabelle und Karten sind zwei Ansichten desselben Plans. Der Schritt-Editor (Prozeduren › Prüfpläne, „Neu erstellen" oder „Schritte bearbeiten" im Zeilenmenü, ebenso im Reiter Prüfpläne einer Prozedur) hat dafür rechts oben einen dritten Schalter Skript. Der Wechsel übersetzt live: aus der Tabelle ins Skript und zurück. Ein Skript mit Fehler lässt sich nicht in die Tabelle wechseln; der Fehler steht an seiner Zeile.
Beim Speichern entscheidet die aktive Ansicht, was gespeichert wird. In der Skript-Ansicht geht der Text an den Server, so wie er dasteht, mit Kommentaren und Leerzeilen; die Schrittzeilen werden daraus kompiliert und liegen im Dokument daneben, damit Laufzeit, Bewertung, Schein und Export nichts merken. In Tabelle und Karten gehen die Zeilen an den Server, und er leitet das Skript daraus ab. Kommentare eines früher geschriebenen Skripts gehen dabei verloren; der Editor sagt das beim Wechsel. Wer eine Vorlage öffnet, deren Schritte er nicht angefasst hat, sieht in der Skript-Ansicht das gespeicherte Skript mit allen Kommentaren.
Links steht der Text mit Zeilennummern, rechts die Vorschau mit den Schrittzeilen, die der Server daraus macht. Text und Vorschau füllen die Höhe des Fensters; der Griff zwischen beiden verschiebt die Aufteilung, und der Browser merkt sich die Breite. Das Augen-Symbol oben in der Vorschau blendet sie aus, dann nimmt der Text die ganze Breite („Vorschau" in der Werkzeugleiste holt sie zurück). In einem schmalen Fenster steht die Vorschau unter dem Text. Das Fenster-Symbol in der Werkzeugleiste legt Skript und Vorschau über das ganze Fenster (Vollbild), etwa auf der Vorlagenseite, wo es keinen Dialog zum Maximieren gibt; dasselbe Symbol oder Escape außerhalb des Editors beendet es.
Beginnt der Plan mit einem langen Kommentarkopf (ein MET/CAL-Import bringt oft 30 bis 40 Zeilen Autor, Quellen und Hinweise), springt die Ansicht beim Öffnen und nach dem Import darüber hinweg, die Einfügemarke bleibt am Anfang. Solange der Kopf im Bild ist, steht oben rechts „Zum Planbeginn“. Einklappen lässt sich der Kopf im Text nicht, aus demselben Grund wie die Gruppen (siehe unten).
Die Vorschau aktualisiert sich kurz nach jeder Eingabe („Prüfen" stößt sie
sofort an). Ein Syntaxfehler steht mit seiner Zeile unter dem Text; „Zur
Zeile" setzt die Einfügemarke dorthin, die Zeile ist im Text rot getönt und
die Zeilennummer markiert. Die Vorschau bleibt dabei stehen: sie zeigt
gedämpft den Stand vor dem Fehler und sagt, in welcher Zeile er steckt, statt
bei jedem Tippfehler leer zu werden. Hinweise des Compilers (etwa %r ohne
range) tönen ihre Zeile gelb und verhindern das Speichern nicht. Unter dem
Text steht ihre Zahl („12 Hinweise aus der Prüfung"); ein Klick klappt die
Liste auf, ein Klick auf einen Eintrag springt zur Zeile. F8 springt zum
nächsten Fehler oder Hinweis, Umschalt+F8 zum vorigen. Rechts neben dem Text
markiert eine schmale Leiste, wo im ganzen Skript Fehler (rot), Hinweise
(gelb) und Suchtreffer (orange) liegen; ein Klick auf eine Marke springt
dorthin.
Eine Gruppe, die Fragen stellt (ask), aber keinen bewerteten Schritt hat
(measure, confirm, rate), meldet der Compiler als Hinweis: sie bekommt
kein Ergebnis, der Prüfer klickt sie nur durch. Die Vorschau markiert ihren
Kopf mit „ohne Ergebnis“. Gruppen nur mit Meldungen (Vorbereitung, Aufbau)
sind gewollt und bleiben ohne Hinweis.
Der Text ist eingefärbt: Anweisungen, Eigenschaften, feste Wörter
(numeric, device), Zeichenketten, Zahlen und Kommentare haben je eine
Farbe; ein erstes Wort, das weder Anweisung noch Eigenschaft ist, bekommt eine
rote Welle, noch bevor der Server es ablehnt. Die Farben sind Lesehilfe, die
Prüfung bleibt beim Server. Die Einfärbung ändert nur Farben, nie Schnitt
oder Breite: Anweisungen sind nicht fett, Kommentare nicht kursiv. Ein fetter
Schnitt ist je nach Schrift und Zoom um Bruchteile breiter, und die
Einfügemarke lag dann ein Zeichen neben dem sichtbaren Text.
Bleibt der Mauszeiger kurz auf einer Anweisung, einer Eigenschaft oder einem
ihrer Werte stehen, erklärt ein Kärtchen das Wort mit Beispielschreibweise und
listet die möglichen Werte mit Bedeutung: bei ref etwa device, manual,
camera und none, bei result, read, capture und if die festen Wörter, bei tol
und über einem Toleranzterm die Toleranzschreibweisen. Über einem Wert ist der
gewählte hervorgehoben. Mit der Tastatur steht dieselbe Erklärung samt Werten
unten in der Statuszeile, sobald die Marke auf dem Wort steht.
Beim Tippen am Zeilenanfang erscheint eine Liste der passenden Anweisungen und
Eigenschaften mit kurzer Erklärung; hinter result, ref, read und
capture die zulässigen Wörter, hinter prefix die SI-Vorsätze, hinter
unit die Einheiten der Vorschlagsliste, direkt hinter tol und hinter einem
+ die Schreibweisen eines Toleranzterms. Unter der Liste zeigt eine Vorschau,
was der markierte Vorschlag bedeutet und welche Werte danach möglich sind, also
schon beim Aussuchen von ref die Auswahl device, manual, camera, none.
Pfeiltasten wählen, Enter oder Tab übernimmt, Escape schließt; Strg+Leertaste
holt die Liste ausdrücklich. Die Maus wählt einen Vorschlag erst, wenn sie sich
bewegt; geht die Liste unter einem ruhenden Zeiger auf, bleibt der erste
markiert. Anweisungen, die
eine Zeichenkette erwarten, kommen mit Anführungszeichen, die Marke steht
dazwischen.
„Einfügen" setzt einen Baustein hinter die aktuelle Zeile (oder in eine leere hinein): eine Gruppe mit Messpunkten, einen Messpunkt, eine Bestätigung, eine Bewertung, eine Meldung, einen Kommentar oder eine mehrzeilige Prüfanweisung. Der erste Platzhalter ist markiert und wird überschrieben. „Syntax" öffnet einen Spickzettel mit allen Anweisungen, Eigenschaften und der Toleranzschreibweise.
Formatieren bringt den Text in die Standardform: eine Anweisung je Zeile, Gruppeninhalt eingerückt, Eigenschaften in fester Reihenfolge, eine Leerzeile vor jeder Gruppe. Kommentare bleiben erhalten; eine Kommentarzeile steht danach vor dem Schritt, der ihr folgt, ein Kommentar hinter einer Anweisung als eigene Zeile vor ihrem Schritt. Der Server prüft, dass der formatierte Text denselben Plan ergibt, und lässt den Text sonst unverändert.
Vorschau und Text sind verbunden: ein Klick auf eine Zeile der Vorschau setzt die Einfügemarke auf die Zeile des Schritts im Skript, und der Schritt, in dessen Zeilen die Marke steht, ist in der Vorschau markiert; die Vorschau rollt mit, auch bei tausenden Schritten. Unter dem Text stehen Zeile und Spalte der Marke und, wenn die Marke auf einer Anweisung oder Eigenschaft steht, eine Zeile Erklärung dazu.
Die Vorschau zeigt je Schritt Nummer, Typ, Beschreibung, Sollwert, Toleranz,
die daraus gerechneten Grenzen und ein Symbol für die Ablesung (Gerät,
Kamera, von Hand). Sie liest sich wie ein Baum: Schritte einer Gruppe sind
unter ihrem Kopf eingerückt, Schritte in einem if-Block eine Ebene weiter,
mit der Antwort, unter der sie laufen („bei Ja“, „bei Nein“, „bei bestanden“,
„bei nicht bestanden“); die volle Bedingung steht im Tooltip und in den
Details. Schritte mit einem Hinweis des Compilers tragen ein Warndreieck.
Gruppen lassen sich am Pfeil einklappen, die Knöpfe oben klappen alle ein
oder aus; der Kopf einer eingeklappten Gruppe zeigt die Zahl ihrer Schritte.
Die Auswahl oben filtert: nur Messpunkte, nur Fragen und Bestätigungen, nur
Schritte mit Bedingung oder nur Schritte mit Hinweis. Die Gruppenköpfe der
passenden Schritte bleiben stehen, damit der Zusammenhang erhalten bleibt.
Darunter stehen die Details zum markierten Schritt: auch das, was der
Schritt von seiner Gruppe erbt (gekennzeichnet), Bereich, Auflösung,
Unsicherheit, Wiederholungen, Ablesequelle, Auswertung, Bedingung und
Prüfanweisung.
Der Schalter Ablauf oben in der Vorschau geht den Plan so durch, wie ihn
der Prüfer am Messplatz sieht: Schritt für Schritt, Gruppenköpfe nur als
Überschrift. Bei einer Frage (ask) wählt man Ja oder Nein, bei
Bestätigungen Bestanden oder Nicht bestanden. An einem Messpunkt steht ein
Feld für die Probe-Ablesung (bei repeat N sind es N Felder): beim Verlassen
des Feldes rechnet calServer den Punkt wie in der Messwertaufnahme und zeigt
Grenzen, Abweichung und Urteil (Bestanden, Nicht bestanden oder bedingt);
„Auswerten“ rechnet sofort. Steht ein Wert im Feld, entscheidet allein diese
Auswertung: „Weiter: Bestanden“ (oder ein zweites Enter) geht mit dem Urteil
weiter, if pass|fail folgt ihm, die Knöpfe zum Wählen sind dann weg. Nur
ohne Ablesung bleibt die Wahl Bestanden oder Nicht bestanden, um nur den Weg
zu sehen. Bewertungsschritte (rate) nehmen eine Probe-Bewertung mit Sternen
und zeigen das Urteil ihrer Bänder. Schritte, deren
Bedingung danach nicht zutrifft, werden übersprungen und genannt. So prüft
man, ob ein if … else … end dorthin führt, wo es soll. Gespeichert wird
dabei nichts. „Ab Marke starten" beginnt beim Schritt unter der Marke, „Im
Skript zeigen" springt zurück in den Text.
Unter Optionen im Skript stellt man am Messpunkt ein, wie er gelesen
wird: von Hand oder mit der Kamera, bei der Kamera die Übernahme (jede
Ablesung bestätigen oder grüne Werte automatisch) und die Zahl der
Wiederholungen. Die Ansicht schreibt das als Eigenschaft an den Schritt ins
Skript (read camera, capture auto, repeat 3, unter einer Kamera- oder
Gerätegruppe read manual) und lässt weg, was nur wiederholen würde, was die
Gruppe vorgibt. Der Text bleibt die einzige Quelle; was im Ablauf geändert
wird, steht danach im Skript wie getippt. Liest der Punkt an einem Gerät
(read device), wird die Bindung im Skript geändert, nicht hier.
Grenzen, die erst mit der Ablesung entstehen. Ohne ref (Bezug UUT
Indicated) bezieht sich ein Prozentanteil der Toleranz auf den Ablesewert des
Prüflings. Mit ref device, ref manual oder ref camera (Bezug REFERENCE)
liegen die Grenzen um die Ablesung des mitmessenden Normals, mit jedem Anteil
der Toleranz; der Prozentanteil gilt auch hier vom Wert des Prüflings. Beide
Grenzen gibt es erst, wenn abgelesen ist: Vorschau, Probelauf und Prüfablauf
zeigen vorher „aus dem Ablesewert“ statt eines Bands auf dem Sollwert und
rechnen die Grenzen aus der Ablesung (bei Wiederholung aus dem Mittelwert).
Der Prüfablauf fragt die Referenz neben dem Wert des Prüflings ab und
speichert ohne sie nicht. Mit source uut und einer Referenz (messendes
Normal, Bezug NOMINAL) gilt der Prozentanteil vom Sollwert, die Grenzen
stehen dann vorab fest; ebenso ohne Referenz bei Anteilen in U, / oder
D.
Grenzen in Anzeigestellen. Untere und obere Grenze stehen in den Stellen
der Auflösung des Schritts (ohne Auflösung in mindestens drei Stellen und
denen von Sollwert und Toleranz) und sind zum Sollwert hin gerundet: eine
Grenze, die die Anzeige nicht darstellen kann, wird nie großzügiger als die
Toleranz. Das Guard Band steht in den Stellen von Grenze und Unsicherheit;
Toleranzausnutzung und Genauigkeitsverhältnis (TAR) rechnen aus der
ungerundeten Toleranz, denn die Rundung gehört zur Anzeige des Prüflings,
nicht zur Fähigkeit des Verfahrens. Vorschau,
Probelauf und Erfassung rechnen so wie der Server beim Speichern; eine
gemeinsame Prüfdatei hält beide Rechnungen deckungsgleich. Null ist eine
gültige Grenze (5 ± 5), und ohne Zahl im Messwert gibt es kein Urteil.
Das Rechner-Symbol oben in der Vorschau startet den Probelauf über die
geprüften Schritte des Skripts. Er läuft auf der Seite, an der Stelle des
Editors, und sieht aus und reagiert wie der echte Prüfablauf: dieselbe
Erfassungstabelle, Enter übernimmt und springt zum nächsten Punkt, Fragen
(ask) lassen sich beantworten und schalten die Zweige (if yes|no|pass|fail)
wie im Lauf, Kopf und Fortschritt zeigen erfasst, offen und das Gesamturteil.
Der Cursor steht im Schritt unter der Marke. Ein Punkt mit repeat N bekommt
N Felder; bewertet wird der Mittelwert, erst wenn alle N Ablesungen stehen.
Kommt für einen solchen Punkt nur ein Wert (etwa über die API), gilt er für
alle N Ablesungen.
Gespeichert wird nichts, und gerechnet wird mit den Toleranzen des Plans:
Spezifikation des Prüflings, Normale und Vorlauf gibt es erst in einer
Kalibrierung. Die Kamera-Ablesung steht wie im Lauf über die Taste
„Kamera-Ablesung“ über der Tabelle bereit; sie füllt das Feld, ein
Beweisbild bleibt im Probelauf nicht, und die Plausibilität gegen die
Toleranz prüft erst der echte Lauf. Die Probeantworten bleiben stehen, bis der Editor
geschlossen wird; „Probeantworten zurücksetzen“ verwirft sie. „Im Editor
zeigen“ an einer Zeile und „Zurück zum Editor“ führen zurück an die Stelle im
Skript bzw. in der Tabelle. Auch der Knopf „Probelauf“ des Schritt-Editors
rechnet in der Skript-Ansicht mit dem Skript, nicht mit dem Stand der Tabelle.
Steht die Marke auf group, if, else oder end, leuchten die übrigen
Zeilen desselben Blocks auf; Alt+Bild↑ und Alt+Bild↓ springen an Anfang und
Ende des Blocks, um den die Marke steht, ein zweites Mal eine Ebene höher.
Einklappen lassen sich Gruppen nur in der Vorschau, nicht im Text selbst.
Für lange Skripte, etwa aus einem MET/CAL-Import mit tausend Zeilen, gibt es
zwei Wegweiser. „Inhalt" blendet links neben den Zeilennummern das
Inhaltsverzeichnis ein: plan und jede group mit der Zahl ihrer Schritte;
ein Klick springt zur Zeile, die Gruppe, in der die Marke steht, ist markiert.
Ob das Verzeichnis offen ist, merkt sich der Browser. „Suchen" (oder
Strg+F im Editor) öffnet eine Suchzeile über dem Text; eine markierte Stelle
wird zum Suchwort. Alle Treffer sind im Text gelb getönt, der aktuelle kräftig;
Enter springt zum nächsten, Shift+Enter zum vorigen, Escape schließt die Suche
und setzt die Marke zurück in den Editor. Groß- und Kleinschreibung spielt
keine Rolle. Eingefärbt und nummeriert wird nur der sichtbare Ausschnitt des
Textes, deshalb bleibt der Editor auch bei mehreren tausend Zeilen flüssig.
Tastatur im Editor: Enter behält die Einrückung der Zeile (hinter group
eine Stufe tiefer), Tab rückt ein und Shift+Tab aus (mit Auswahl zeilenweise),
Strg+# kommentiert die markierten Zeilen aus und wieder ein (Strg+/ geht
auch), Alt+↑/↓ verschiebt Zeilen, Strg+G springt zu einer Zeilennummer, F3 zum
nächsten Suchtreffer. Wer das Feld mit der Tastatur verlassen will, drückt
zuerst Escape und dann Tab. Strg+S speichert. „Tastenkürzel" unter dem Text
zeigt die Liste; seltene Befehle (Formatieren, Gehe zu Zeile, MET/CAL-Import)
stehen in der Werkzeugleiste unter „Mehr". Der Name des Prüfplans
kommt aus plan "…"; das Namensfeld im Dialog überschreibt ihn.
MET/CAL-Prozedur importieren¶
„MET/CAL-Prozedur importieren" (Skript-Ansicht, unter „Mehr") nimmt die Textdatei einer
Prozedur (.mc) und übersetzt sie serverseitig in ein Skript der
Sprachversion 0. Übersetzt werden der Kopf (erster INSTRUMENT-Name wird
plan, Autor, Revision und Datum werden Kommentare), HEAD als Gruppe
(steht Text in geschweiften Klammern, wird nur der zur Überschrift, denn wie
in MET/CAL geht nur er ins Ergebnis; HEAD -2 {…} wird eine Untergruppe, die
den Namen ihrer Hauptgruppe vorn trägt, etwa „AC VOLTS › 50 V Range“, und eine
Gruppe ohne einen einzigen Schritt entfällt),
DISP und MESS als Meldung, EVAL als Ja/Nein-Bestätigung und die
Bewertungszeilen der Kalibrator-FSCs (Nennwert mit Vorsatz und Einheit,
Bereich, Toleranz in %, %r und absolut; ppm wird in Prozent
umgerechnet) als measure. Die Schreibweise des Nennwerts wird die
Auflösung (190.00mV ergibt resolution 0.01). Bei einer Quelle (5500,
5520, 5700 …) liest der Prüfer den Prüfling ab, der Bezug ergibt sich von
selbst; bei einem messenden Normal (8508, 3458 …) schreibt der Import
source uut mit ref manual dmm: der Prüfling gibt den Sollwert aus, das
Normal wird abgelesen. RSLT =Text wird ein Kommentarschritt (auf dem
calServer-Schein steht er nicht), ein Setup-Test mit Nennwert (MOD4 S) wird
die Meldung „5011 einstellen: 30 Vpp (1kH)“. Eine eingerückte Anweisung ohne
Schrittnummer direkt nach der Spaltenkopfzeile wird gelesen und im Bericht
genannt. Einheitensymbole werden übersetzt (Z wird Ω,
H wird Hz, T wird s, degC wird °C, pct wird %).
Verzweigungen werden Blöcke (ADR 2026-10-31 „Entscheidungen im Plan“):
OPBR wird eine Frage (ask, mehrzeilig wie DISP; -z und [NO] ändern
nur Zahlenwert und Schaltfläche in MET/CAL und entfallen). Ein JMPT, JMPF
oder JMPZ direkt nach OPBR oder einem Bediener-EVAL wird ein Block über
die Zeilen bis zur Zielschrittnummer, mit der Antwort, bei der nicht
gesprungen wird (JMPF 1.006 nach OPBR: die Zeilen bis 1.006 laufen bei
Ja). Steht als letzte Zeile des Blocks ein JMP weiter nach vorn, wird der
Rest bis dorthin der else-Zweig. JMP t.sss PASS oder FAIL nach einer
Bewertung wird if fail beziehungsweise if pass. IF/ELSE/ENDIF auf
MEM1 (auch über eine MATH-Kopie wie PUT("x", MEM1)) wird if/else/
end. Ein EVAL ohne eigene Frage nimmt den Text des vorangehenden MESS
als Frage, wie es das MET/CAL-Handbuch vorsieht. MEMI wird der Hilfstext des
folgenden MEMC/MEMCX (dort gibt der Prüfer den Wert ein), eine Anweisung,
wenn die Prozedur die Eingabe danach nur in einer Bedingung prüft (Auswahl
„1 = …, 2 = …“), sonst ein Messschritt ohne Sollwert.
Ballast aus Hersteller-Paketen (ADR 2026-11-03 „MET/CAL-Import ohne
Ballast“): Was beim Import schon feststeht, rechnet der Import aus, statt es
als Kommentar stehen zu lassen. MATH mit festen Werten (@Model = "289")
setzt die Variable; [V @Model], [MEM2] und Register mit festem Wert werden
im Text eingesetzt. Bedingungen auf feste Werte, IF 0, PSUB/PSUBI (Name,
unter dem die Unterprozedur aufgerufen wurde), ISVAR, ZCMP und EMPTY
entscheidet der Import: es bleibt nur der Zweig, der gilt. Hängt eine
Bedingung an einem Wert, den MET/CAL erst zur Laufzeit liest (Antwort des
Geräts, ini-Datei), ist der Zweig in einer Unterprozedur ein Fehler- oder
Sonderfall (Schnittstellenfehler, Batteriestand, falsches Modell): Meldungen
und Fragen darin entfallen, Messpunkte bleiben. Eine Frage, die im Plan nichts
steuert („Befehl erneut senden?“, „Bei Fehlern anhalten?“), entfällt ebenso.
Standby, Operate und Reset eines Kalibrators sind keine Messpunkte und
entfallen. Stellt der Kalibrator denselben Wert ein, den das folgende
MEMC/MEMCX bewertet, ist das ein Messpunkt (Hilfstext „Normal: 5502E;
Anzeige eingeben …“), nicht zwei. Ein WAIT vor einem Messpunkt wird dessen
Einschwingzeit (Geräteablesung) oder ab 10 s der Hinweis „Vor dem Ablesen
20 s warten“; kürzere Pausen vor einer Handablesung entfallen, sonst steht die
Zeit in der Anweisung davor. Jede dieser Entscheidungen steht im Bericht.
Bedienprüfungen mit EVAL -e: Fluke-Pakete stellen bei Bedienprüfungen
(Hintergrundbeleuchtung, Tasten, Durchgangspiepser) mehrere OPBR -z-Fragen,
kopieren jede Antwort in ein Register (MATH L[1] = MEM1) und bewerten erst am
Ende mit EVAL -e L[1] && L[2] : Text: bestanden, wenn alle Antworten Ja
sind. Der Import macht daraus Bestätigungen (confirm, Ja = bestanden), statt
Fragen ohne Urteil stehen zu lassen. Fehlt an einer Frage -z, ist Nein in
MET/CAL −1 und zählt im Ausdruck als wahr: dort bestand der Test auch bei
Nein. Gemeint war fast immer Ja = bestanden, so übernimmt es der Import auch,
meldet die Stelle aber im Bericht („bitte prüfen“). Ein & (in MET/CAL
Textverkettung, kein logisches Und) bleibt Kommentar, mit dem Grund im
Bericht. Eine Frage, die schon einen Block steuert, bleibt Frage.
Bereichsprüfung nach einer Eingabe: folgt auf ein MEMI ohne
MEMC ein EVAL -e (MEM >= a) && (MEM <= b) (auch mit >/< oder
a <= MEM), bekommt der Eingabeschritt die Mitte des Bereichs als Nennwert
und die halbe Breite als absolute Toleranz, die Auflösung aus den Stellen der
Grenzen. Prüfte MET/CAL mit < oder >, galt die Grenze selbst dort als
nicht bestanden; der Bericht sagt das dazu.
Kalibratorzeilen über mehrere Zeilen: lange Anweisungen in benannter Form
(Mode = ACI; Coil = 50; in der ersten, +Curr = 300 A; … in der nächsten
Zeile mit gleicher Schrittnummer) liest der Import als eine Anweisung. Mehrere
Zeilen ohne benannte Parameter bleiben Kommentar, weil nicht klar ist, welche
gilt.
Nennwert aus dem Register: steht in der Nennwertspalte nur eine Einheit
(5502E mV 1%), rechnete MET/CAL den Sollwert vorher aus. Der Messpunkt kommt
trotzdem in den Plan, als „Nennwert von Hand setzen (mV)“ ohne Nennwert, damit
er nicht verloren geht; der Bericht nennt jede Stelle. Ein MEMCX mit nur einer
Einheit nimmt, wenn möglich, den Wert, den das Normal zuletzt ausgegeben hat
(5730A 10V und danach MEMCX V 0.01% ergibt Nennwert 10 V); die
Normal-Zeile ohne Toleranz wird dann zur Meldung „5730A einstellen: 10 V“,
damit der Punkt nicht doppelt im Plan steht. Passt die Einheit nicht, wird
nichts geraten.
Warten und Gerätesteuerung: WAIT mit Text (-t 00:05:00 Warmlaufen
lassen) wird die Meldung „Warten: 5:00 min (Warmlaufen lassen)“, eine stille
Pause (WAIT [D2000]) entfällt, ebenso Messmodus- und Bereichszeilen messender
Normale (M8508, M9100, M3458 …), das Rücksetzen eines Normals (*,
auch mit MOD4 S), LABEL und TARGET sowie ein JMPL als Verteiler einer
Sammeldatei (PSUBI(…)) oder als Sprung bei Schnittstellenfehler. Das
übernimmt der Messplatz oder der Import selbst; der Bericht zählt es unter
„weggelassen“.
Texte in Meldungen und Fragen: eckige Klammern mit einer Zahl sind in
MET/CAL ein Zeichen nach seinem ASCII-Code, keine Formatierung (Quelle:
MET/CAL-Hilfe, Abschnitt „Numeric Literals“). Fluke-Pakete schreiben [32]
(Leerzeichen) an den Zeilenanfang, damit die Einrückung erhalten bleibt, und
[7] für einen Piepton. Der Import setzt druckbare Zeichen ein, lässt
Steuerzeichen weg und kürzt die Einrückung; aus [32] ACHTUNG! wird
ACHTUNG!. Eine Anzeigeverzögerung ([D1000]) entfällt, geschweifte Klammern
fallen weg. Platzhalter für Laufzeitwerte ([MEM], [V Name], [S1]) haben
in calScript noch kein Gegenstück: sie bleiben im Text stehen, und der Bericht
nennt jede Stelle. Fortsetzungszeilen einer Anzeige werden echte Zeilen;
mehrzeilige Meldungen stehen im Skript als """-Block, auch mit
Leerzeilen dazwischen.
Versionsprüfung: IF NOT(VERSIONCHECK("8.1")), gefolgt von END und
ENDIF, bricht in MET/CAL ab, wenn die Laufzeit zu alt ist. In calServer gibt
es diese Laufzeit nicht; die drei Zeilen fallen weg, auch in Unterprozeduren.
Alles, was Sprachversion 0 nicht kennt (MATH, Sprünge rückwärts oder über
Blöcke hinaus, Sprünge mit Prozedurname, IF auf andere Register oder mit
ELSEIF, andere EVAL -e-Ausdrücke, MEM2, RSLT ohne =, CALL, ASK,
Register, Nennwert- und Vergleichstests mit MOD4, Toleranzen aus TOL oder
Registern), bleibt als
Kommentarzeile # metcal <Schritt> <Zeile> an seiner Stelle im Skript stehen,
mit dem Grund im Bericht.
Der Nacharbeitsbericht unter der Vorschau zählt auf, welche Zeilen
übersetzt, kommentiert oder weggelassen wurden (ein leeres HEAD, das nur die
Anzeige löscht, ein RSLT =, das nur eine Leerzeile ins Ergebnis schreibt,
END und die oben genannte Gerätesteuerung). Enthält eine Prozedur gar nichts Abbildbares,
etwa eine Hülle aus MATH und CALL, sagt der Import das und verweist auf
den Projektimport. Nichts wird
stillschweigend verändert: eine Zeile
ist übersetzt, kommentiert, oder der Import bricht mit Zeilenangabe ab. Die
Originalprozedur gehört nicht ins Repository und nicht in die Dokumentation;
der Import arbeitet mit der Datei auf deinem Rechner.
Prüfling über die Schnittstelle: Liest die Prozedur den Prüfling über
IEEE, IEEE2, SCPI, VISA oder PORT und bewertet den Wert mit MEMC
oder MEMCX, wird der Messpunkt automatisch: read device uut, die Funktion
aus Einheit und Modifier (VDC, VAC, ADC, AAC, OHM, OHM4, CAP,
FREQ) und, wenn ein Setup-Test des Kalibrators (MOD4 S) genau diesen
Nennwert ausgibt, source cal; die Meldung „5520 einstellen …“ entfällt
dann. Die Befehle selbst stehen nicht im Skript, sondern in einem
Entwurf des Treiberprofils für den Prüfling: Schnittstelleneinstellungen
(Baudrate, Abschlusszeichen, Zeitlimit), Rücksetzbefehle als init, je
Funktion die Messbefehle, bei mehreren Bereichen je Bereich eine eigene Folge
(ranges), und ein Umrechnungsfaktor, wenn ein MATH MEM = MEM * 1000 den
Wert in die Einheit des Nennwerts brachte (scale, sonst rechnet der Runner
selbst in die Grundeinheit). Eine Wartezeit vor dem Lesen ([D500]) wird
settle am Punkt. Die Busbefehle bleiben als # metcal-Kommentar im Skript
stehen, damit man sieht, woher der Punkt kommt; im Bericht sind sie
„übersetzt“.
Automatisch wird nur, was sich sicher übertragen lässt. Handablesung mit
Grund im Bericht bleibt ein Punkt, wenn der Wert von einem Normal kommt
(Adresse [@8508], [@3458], [@LFCTR] oder ein Normal aus dem Kopf), ein
Befehl einen Laufzeitwert enthält ([MEM], [V Kanal]), ein MATH mit dem
gelesenen Wert rechnet, nach dem Lesen noch Befehle folgen, das Normal einen
anderen Wert ausgibt, als der Punkt bewertet, oder sich Bereiche und
Einstellungen widersprechen. Geraten wird nichts.
Den Entwurf speichert der Einzelimport erst auf Knopfdruck („Als inaktiven
Entwurf speichern“, Recht workstation_edit), der Projektimport legt ihn
beim Anlegen der Pläne an. In beiden Fällen ist er inaktiv, mit dem
Gerätetyp der Spezifikation, und ein vorhandenes Profil mit derselben
Kennung bleibt unverändert. Vor dem ersten Lauf prüfst du die Befehle am
Gerät, ergänzt die Kennung (idn) und schaltest das Profil unter
Treiberprofile ein. Hintergrund:
ADR 2026-11-01.
Kamera statt Handablesung: Punkte, die der Prüfer vom Display des
Prüflings abliest (nicht source uut, keine Ablesequelle), zählt der Import
und bietet unter dem Bericht „Display-Punkte per Kamera ablesen“ an. Das
übersetzt dieselbe Datei noch einmal mit read camera uut an diesen
Punkten; automatische Punkte bleiben am Bus. Im Projektimport ist das ein
Häkchen über der Liste, die Spalte „Ablesung“ zählt je Plan automatische,
Kamera- und Display-Punkte. Für einen Plan, der schon im Editor steht, macht
dasselbe das Ziel „Ablesung zuordnen“ in „Prüfplan mit KI optimieren“.
Bericht und Skript sind verbunden: ein Klick auf eine Berichtszeile (oder
der Pfeil am Zeilenende) setzt die Marke an ihre Stelle im Skript, bei einer
kommentierten Zeile auf ihr # metcal, sonst auf den Schritt, der aus ihr
entstanden ist oder ihr folgt. Solange der Bericht offen ist, markiert ein
Strich am linken Rand der Zeilennummern jede nicht übersetzte Stelle. Bei
eingefügten Unterprozeduren ist das die einzige Spur im Text, denn ihre
Lücken stehen nicht als Kommentar im Skript.
MET/CAL-Projekt importieren¶
Eine Prozedur kommt selten allein: die Hauptprozedur ruft mit CALL
Unterprozeduren auf (Sicherheitshinweis, Aufwärmzeit, ein Messbereich je
Datei). „MET/CAL-Projekt“ in der Prüfplanliste (/procedure/templates) nimmt
deshalb das ganze Projekt: ein Fluke-Paket (ZIP mit Manifest und Quell-ZIP),
ein ZIP mit .mc-Dateien oder mehrere .mc-Dateien auf einmal. Der normale
„Importieren“-Knopf führt eine .mc-Datei oder ein ZIP ebenfalls in diese
Vorschau; ein ZIP ohne MET/CAL-Prozedur (ein calServer-Paket) geht wie bisher
in den Paketimport.
- Hauptprozedur ist jede Prozedur, die keine andere im Projekt aufruft. Jede gewählte Hauptprozedur wird ein eigener Prüfplan.
- Unterprozeduren werden Bausteine, wenn sie in jedem Plan des
Imports dasselbe Skript ergeben und mindestens einen Messschritt mitbringen
(siehe Untergruppen und Bausteine). Der Plan
bindet sie mit
use "Name" version 0.1ein, statt ihre Schritte zu wiederholen. Gibt es den Baustein schon mit gleichem Inhalt, nimmt der Import ihn wieder; mit anderem Inhalt bekommt er eine neue Version, die ältere Pläne nicht berührt. Hängt das Ergebnis vom Aufruf ab (PSUBI, Variablen des Aufrufers) oder liefe der Plan mit Baustein anders, bleibt die Unterprozedur an der Stelle ihresCALLeingefügt, auch verschachtelt; Kommentarzeilen markieren dann Anfang und Ende. Die Vorschau nennt je Unterprozedur, was mit ihr geschieht, und die Option „Unterprozeduren als Bausteine anlegen“ schaltet das ab. Eine Unterprozedur wird nie ein eigener Plan. HEAD -2wird eine echte Untergruppe (subgroup) unter der Gruppe davor; ohne Gruppe davor steht sie als Gruppe.- Gesucht wird wie in MET/CAL über jeden
INSTRUMENT-Namen einer Prozedur, ohne Groß- und Kleinschreibung. - Ein Aufruf auf eine Prozedur, die nicht im Projekt liegt, bleibt als
# metcal … CALL …im Skript und steht in der Vorschau. Ebenso eine Rekursion (A ruft B ruft A) und alles, was tiefer als 8 Aufrufe läge; dort bricht auch MET/CAL ab. - Sammeldateien: Fluke bündelt Hilfsprozeduren in einer Datei mit
mehreren
INSTRUMENT-Namen und einem Verteiler vorn (JMPL <Marke> PSUBI("…")). Eingefügt wird nur der Abschnitt, den der aufgerufene Name erreicht, von seiner Marke bis zum nächstenEND. Was in einer Unterprozedur hinter einemENDsteht, erreicht MET/CAL nur per Sprung; es bleibt draußen. - Hilfsprozeduren in Bedingungen lesen Messwerte oder zeigen Fehler bei
Bedarf. Ein
CALLin einemIF-Zweig wird nur eingefügt, wenn er einen Messschritt mitbringt; eine reine Fehleranzeige stünde sonst in jedem Lauf. Der Bericht nennt den Aufruf. MEMC/MEMCX(Bewertung eines über die Schnittstelle gelesenen Werts) wird ein Messschritt mit Nennwert und Toleranz; den Wert gibt in Sprachversion 0 der Prüfer ein. Die Schnittstellenbefehle (IEEE,IEEE2) stehen im Bericht.- Der Dateikopf einer Unterprozedur (Autor, Copyright) kommt nicht in den Plan, und wer dieselbe Unterprozedur mehrfach aufruft, findet ihre Hinweise im Bericht nur einmal.
- Eine Prozedur „Sub …“, die niemand im Paket aufruft, ist meist ein übrig gebliebener Helfer; die Vorschau zeigt sie, wählt sie aber nicht vor.
- Trägt ein Name mehrere Dateien, gewinnt die erste, und die Vorschau sagt es. Eine Datei, die sich nicht lesen lässt, wird übersprungen und genannt.
Die Vorschau zeigt je Hauptprozedur die Zahl der Schritte, die eingefügten
Unterprozeduren und den Nacharbeitsbericht. Bedingte Zweige (IF, JMPL)
übersetzt Sprachversion 0 nicht: eine Hülle, die je nach Auswahl
verschiedene Unterprozeduren ruft, enthält nach dem Import alle Zweige
hintereinander. Der Bericht nennt die kommentierten Sprünge; welche Schritte
der Plan wirklich braucht, entscheidest du beim Nacharbeiten.
Wie beim Einzelimport wird jede Hauptprozedur eine Option
metcal-<prozedur> (Art Verwendung) im Entwurf der Spezifikation des
Gerätetyps; gibt es für den Typ noch keine, entsteht sie. Die Zeilen der
Option ergeben sich über alle Prozeduren, die per CALL laufen: ein
Messpunkt einer Unterprozedur steht an der Stelle ihres Aufrufs, eine
Unterprozedur bekommt keine eigene Option. Den Typ schlägt die Vorschau aus
dem INSTRUMENT-Namen und aus den Prüflingen im Manifest des Pakets vor.
Ohne Typ entsteht nur der Prüfplan. Jede Zeile trägt ihre Fundstelle
(Schritt, FSC und ob der Sollwert oder die Ablesung bewertet wird), ein
Prüfpunkt steht als Punktzeile, auch negativ. Ein erneuter Import derselben
Prozedur ersetzt die Option im Entwurf. Ist sie schon freigegeben,
ersetzt der Import nichts stillschweigend, sondern fragt: neue Version
(die Option wird im Entwurf der nächsten Revision ersetzt; bis zu dessen
Freigabe zählt die freigegebene Revision) oder neuer Name (eine weitere
Option daneben). Der Projektimport fragt einmal vorab für alle Pläne, ob er
eine neue Version anlegt oder die freigegebene Option behält; „behalten“
meldet sie im Ergebnis. Freigegeben wird eine Option wie jede andere
Spezifikation von einer Person. Der importierte Plan trägt kein tol,
sobald seine Prozedur eine Option geworden ist: Die Toleranz kommt aus der
gewählten Option, und bis zu deren Freigabe bewertet der Plan nichts. Im Plan
gewönne tol immer über die Spezifikation, die Option käme nie zum Zug
(Konzeptprüfung 2026-11-03). Nur ohne Gerätetyp oder wenn die Spezifikation
nicht angelegt werden konnte, behält der Plan tol. Für Bausteine gilt
dasselbe: Haben alle Pläne einer Unterprozedur eine Option, trägt der Baustein
kein tol; rufen Pläne mit und ohne Option sie, bleibt sie eingefügt. Siehe
Spezifikationen.
Unter der Haube ist der Editor seit 2026-11-03 CodeMirror 6: Text, Marke, Farben und Zeilennummern sind eine Fläche, Klick und Tippen landen dort, wo man hinsieht, und Strg+Z nimmt auch die Editorhilfen (Enter mit Einrückung, Tab, Kommentieren, Vervollständigung) einzeln zurück. Hervorhebung, Vervollständigung und Tooltip kommen weiter aus den calScript-eigenen Helfern; eine zweite Grammatik gibt es nicht. Begründung: ADR 2026-11-03 „Editorbaustein für calScript“.
Entwurf mit KI¶
„KI-Entwurf" in der Skript-Ansicht (und in Tabelle und Karten) entwirft aus Gerät, Spezifikationen und Prüfvorgaben ein Skript dieser Sprachversion, mit Gruppen, Serien und auf Wunsch den Rollen des Messplatzes. Der Compiler prüft es, das Modell bessert bei einem Fehler bis zu zweimal nach. Der Entwurf ersetzt das Skript oder wird ohne zweiten Kopf angehängt; gespeichert wird von Hand. Einzelheiten: Prozedurvorlagen, Entwurf mit KI, Hintergrund: ADR 2026-10-29.
Aufbau¶
Jede Zeile ist eine Anweisung oder eine Eigenschaft des zuletzt begonnenen
Schritts. Einrückung ist Kosmetik, # beginnt einen Kommentar. Ein manueller
Prüfplan ist eine Liste, das Dokument dahinter auch; die einzige Struktur
darüber sind Gruppen mit Untergruppen, Bausteine und Entscheidungen
(if-Blöcke an einer Frage oder einer Bewertung, siehe unten). Freie Ausdrücke, Variablen oder Schleifen gibt
es nicht.
| Anweisung | Schritttyp im Plan | Bedeutung |
|---|---|---|
calscript 0 |
– | Sprachversion, erste Zeile (optional, empfohlen) |
plan "Name" |
– | Name der Vorlage |
standard Rolle "Gerätetyp" |
– | Vorgesehener Gerätetyp einer Rolle, vor dem ersten Schritt, je Rolle einmal |
group "Titel" |
Header | Abschnitt; trägt Vorgaben für die Schritte darunter, bis zum nächsten group oder end |
subgroup "Titel" |
Header (group_level: 2) |
Zweite Ebene in einer Gruppe; erbt deren Vorgaben, bis zur nächsten subgroup, group oder end |
module "Name" |
– | statt plan: das Skript ist ein Baustein, siehe unten |
use "Name" [version 1.0] |
die Schritte des Bausteins | Baustein einbinden; ohne version gilt die jüngste freigegebene Version |
measure [Sollwert] ["Beschreibung"] |
Manual Test | Messpunkt, erbt Ergebnistyp, Einheit und Toleranz der Gruppe |
measure Sollwert Sollwert … ["Beschreibung"] |
Manual Test je Sollwert | Serie, siehe unten |
confirm "Beschreibung" |
Manual Test (TEXT(Y=PASS)) |
Ja/Nein-Prüfung; result noyes dreht die Logik |
ask "Frage?" |
Manual Test (CHOICE(Y/N)) |
Ja/Nein-Frage ohne Urteil; die Antwort steuert if yes / if no, siehe unten |
if yes / if no / if pass / if fail |
Bedingung (condition) der Schritte darin |
Block bis else oder end; yes/no meint die letzte Frage, pass/fail die letzte Bewertung |
else |
– | Gegenzweig desselben Blocks |
rate "Beschreibung" |
Rating | Bewertung mit map "1-2:fail\|3-5:pass" |
message "Text" |
Message | Hinweis an den Prüfer, kein Ergebnis |
comment "Text" |
Comment | Interne Anmerkung |
end |
– | schließt die innerste offene Gruppe oder den innersten if-Block (bei Gruppen optional) |
Eigenschaften stehen auf eigenen Zeilen unter dem Schritt oder hinter der
Anweisung auf derselben Zeile (measure 100 "100 mV" @ 50 Hz). Nur tol,
stable und contrib nehmen den Rest der Zeile.
| Eigenschaft | Spalte im Plan | Hinweis |
|---|---|---|
step 7.001 |
Prüfschritt-Nr. | nur nötig, wenn die automatische Nummer (Gruppe 1, 2, …; Schritte 1.001, 1.002, …) nicht passt; die Schritte danach zählen von ihr weiter (7.002, 7.003 …), und jede Nummer darf im Plan nur einmal vorkommen |
value 100 |
Sollwert | bei measure auch als erstes Argument; ein + davor (measure +100) ist erlaubt, wie in MET/CAL die Bewertungsgröße |
@ 50 Hz, modifier 50 Hz |
Modifier | zweite Größe, unter der der Sollwert gilt (Frequenz, Temperatur …): Zahl mit Einheit, auch @1kHz; siehe unten |
aux "2-Draht" |
Hilfsfeld | Freitext, wird nicht bewertet |
info "…" |
Prüfanweisung | HTML erlaubt; lange Texte als """-Block |
md "…" |
Prüfanweisung (Markdown) | Alternative zu info |
image "name.svg" |
Bilder | mehrfach, höchstens 10 |
result numeric / yesno / noyes |
Ergebnistyp (config) |
NUMERIC, TEXT(Y=PASS), TEXT(N=PASS) |
ref device dmm, ref manual thermo |
Bezug (config, Bindung) |
ein Normal der Rolle misst mit, seine Ablesung ist der Bezug (REFERENCE): vom Messplatz, von Hand oder ref camera thermo per Kamera; mit source uut NOMINAL; siehe unten |
ref none |
Bezug (config) |
kein Bezug: der Wert wird erfasst, nicht bewertet; fehlt ref, ist der Sollwert der Quelle der Bezug (UUT INDICATED) |
config "…" |
config wörtlich |
statt result/ref |
prefix m, unit V |
SI-Vorsatz, Einheit | getrennt, damit m nie zweideutig ist |
range 320 |
Bereich | Bezug für %r |
resolution 0.1 |
Auflösung | Bezug für D |
tol 0.3% + 1 D |
Toleranz | siehe unten |
uncertainty 0.03 |
Messunsicherheit (U, k) | |
k 2 |
Erweiterungsfaktor | nur an group; gilt für jeden Punkt der Gruppe, gerechnet oder mit fester uncertainty, und steht neben U auf dem Schein (siehe Messunsicherheit) |
rule "ILAC-G8 w = U" |
Entscheidungsregel | nur an group; steht im Plan und seiner Revision; bewertet wird nach der Entscheidungsregel der Kalibrierung |
repeat 5 |
Wiederholungen | ganze Zahl 1 bis 100, nur an measure und group; siehe unten |
discard 2 |
Vorlauf verwerfen | ganze Zahl 0 bis 100, nur an measure und group; Ablesungen vor der Messreihe, die nicht zählen |
read manual, read device uut, read camera |
Ablesequelle | manual ist die Erfassung von Hand; device lässt den Messplatz ablesen; camera lässt die Webcam im Browser ablesen, der Prüfer bestätigt; mit source stellt der Messplatz dazu das Normal; mehrere mit | stellen die Ablesung zur Wahl im Vorlauf (read device uut \| camera \| manual, die erste ist die Vorgabe); siehe unten |
source cal, function "VOLT:DC", settle 2 |
Gerätebindung | nur zusammen mit read device, ref device, read camera oder read manual: Rolle, die den Sollwert ausgibt, Messfunktion, Einschwingzeit in Sekunden; source uut (der Prüfling gibt den Sollwert aus) steht ohne read, mit ref device, ref manual oder ref camera |
capture confirm, capture auto |
Kamera-Übernahme | nur zusammen mit read camera oder ref camera: confirm (Vorgabe) verlangt den Klick des Prüfers, auto übernimmt grüne Lesungen nach einer Doppelaufnahme ohne Klick |
stable thermo 0.01 °C 2 min max 30 min |
Stabilitätskriterium | nur am Messplatz: der Runner liest die Rolle (ohne Angabe die Referenz, ohne Referenz den Prüfling), bis die Spanne im Fenster im Band bleibt, höchstens bis zur Höchstzeit; das Band ist absolut, % lehnt der Parser ab |
direction up, direction down |
Messrichtung | auf- und abwärts am selben Sollwert bilden ein Paar; daraus entsteht beim Laden der Schritt „Umkehrspanne“ |
optional |
Punkt nach Option | der Punkt wird nur geladen, wenn die gewählte Option der Spezifikation ihn als Punktzeile verlangt |
contrib "Adapter" 0.02 mV rect |
Beitrag U3 bis U10 | Beitrag des Verfahrens zum Budget (Adapter, Leitung, Ankopplung), Wert mit Einheit: Halbweite einer Rechteck- (rect, Vorgabe) oder Dreieckverteilung (tri), Standardunsicherheit (u) oder erweiterte Unsicherheit mit k = 2 (k2); höchstens acht je Punkt |
accred no |
Akkreditierungsumfang | nimmt Messpunkte aus dem Akkreditierungsumfang, der Schein kennzeichnet sie mit „*“: vor dem ersten Schritt alle, an einer Gruppe ihre, an measure den einen; ohne =, siehe unten |
An einer Gruppe gelten result, ref, config, prefix, unit, modifier,
range, resolution, tol, uncertainty, k, rule, repeat, discard,
direction, optional, contrib und accred als Vorgabe für alle
Schritte bis zur nächsten Gruppe; ein Schritt darf jede davon für sich
überschreiben.
contrib am Punkt kommt zu denen der Gruppe hinzu, unter demselben Namen
ersetzt er den der Gruppe. Die Ablesung (read,
source, function, settle, capture, ref, stable) erbt ein Punkt als
Ganzes: Wer am Punkt eine eigene read-Zeile schreibt, ersetzt sie
vollständig und wiederholt darum ref und stable, sonst meldet der
Compiler einen Fehler. Das ist genau die Gruppenvererbung des Editors
(group_defaults).
Der Compiler prüft außerdem: tol, range, resolution, uncertainty,
prefix und unit gehören an measure oder eine Gruppe, value nur an
measure; step, range, resolution und k verlangen eine Zahl größer
null, uncertainty keine negative; prefix muss ein SI-Vorsatz sein (u
und das griechische μ werden zu µ). Ein measure wird numerisch
bewertet: result yesno/noyes gehört zu confirm, und unter einer Gruppe
mit result yesno braucht ein measure ein eigenes result numeric;
umgekehrt lehnt confirm ein result numeric ab. Rollen (read, source,
ref, stable, standard) sind keine Schlüsselwörter der Sprache und
unterscheiden sich nicht nur in der Groß- und Kleinschreibung; uut ist der
Prüfling und bekommt keine standard-Zeile. Gibt es standard-Zeilen,
meldet der Compiler als Hinweis Rollen ohne Zeile und Zeilen ohne
Verwendung.
Untergruppen und Bausteine¶
Ein großer Plan braucht zwei Dinge, die eine flache Liste nicht hat: eine zweite Gliederungsebene und Teile, die mehrere Pläne gemeinsam nutzen. Beides gibt es seit dem 2026-11-03 (ADR „Untergruppen und Bausteine“).
Untergruppen. subgroup "Titel" steht in einer Gruppe, erbt deren
Vorgaben und kann eigene setzen. Sie endet an der nächsten subgroup, an der
nächsten group oder an end. Mehr als zwei Ebenen gibt es nicht. Hat eine
Gruppe Untergruppen, stehen ihre eigenen Schritte vor der ersten Untergruppe;
danach kommen nur noch Untergruppen, sonst meldet der Compiler einen Fehler.
group "Gleichspannung"
result numeric
unit V
tol 0.1% + 2 D
confirm "Messleitungen an V und COM"
subgroup "Bereich 10 V"
range 10
resolution 0.001
measure 1 5 10 "{value} V"
subgroup "Bereich 100 V"
range 100
resolution 0.01
measure 50 100 "{value} V"
end
Kompiliert bleibt der Plan flach: die Untergruppe ist eine Überschrift wie jede Gruppe, mit den Vorgaben beider Ebenen und dem Titel „Gleichspannung › Bereich 10 V“. Laufzeit, Schein und DCC sehen keinen Unterschied, Editor und Vorschau zeigen die zweite Ebene eingerückt.
Bausteine. Ein Baustein ist ein eigenes Skript, das mit module "Name"
statt plan beginnt. Ein Plan bindet ihn mit use ein:
calscript 0
plan "Fluke 87V"
use "Sichtprüfung Handmultimeter" version 1.0
group "Gleichspannung"
unit V
tol 0.05% + 2 D
use "DCV Punkte 87V" version 2.1
- Gespeichert wird ein Baustein wie ein Plan (Prüfplanliste, Typ „calScript-Bausteine“), ohne Prozedur, mit Versionen, Genehmigung und Freigabe. Ein Name gehört zu genau einem Baustein; eine neue Fassung ist eine neue Version, kein zweiter Baustein mit gleichem Namen.
- Welche Version gilt:
version 2.1nimmt genau diese. Ohne Version gilt die jüngste genehmigte oder freigegebene; gibt es keine, die jüngste mit dem Hinweis „noch nicht freigegeben“. Der Editor schreibt beim Einfügen die Version immer aus, damit eine neue Bausteinversion den Plan nicht still ändert. - Eingebunden wird beim Prüfen und Speichern des Plans: die Schritte des
Bausteins stehen an der Stelle der
use-Zeile, im Plan durchnummeriert, mit den Vorgaben der umgebenden Gruppe und den Bedingungen eines umgebendenif. Die gespeicherte Planversion hält fest, welcher Baustein in welcher Version eingeflossen ist; eine spätere Bausteinversion ändert sie nicht. - Ebenen: Auf oberster Ebene bleiben die Gruppen eines Bausteins Gruppen,
in einer Gruppe werden sie Untergruppen. In einer Untergruppe darf ein
Baustein nur Schritte mitbringen. Bringt ein Baustein Gruppen mit, beginnt
nach der
use-Zeile eine neue Gruppe oder Untergruppe; was sonst folgte, gehörte zu seiner letzten Gruppe, und das meldet der Compiler. - Ein Baustein darf weitere Bausteine einbinden, bis vier Ebenen tief und nie
sich selbst. Ein Fehler im Baustein nennt Name, Version und Zeile im
Baustein und steht im Plan an der
use-Zeile. - Im Editor: „Einfügen › Baustein“ listet alle Bausteine mit ihren
Versionen. Steht die Marke auf einer
use-Zeile, öffnet „Mehr › Baustein öffnen“ ihn in einem neuen Tab; Speichern legt dort eine neue Version an. Das Inhaltsverzeichnis zeigtuse-Zeilen mit eigenem Symbol, die Vorschau markiert jeden Schritt aus einem Baustein. - Die Tabellenansicht kennt keine
use-Zeile: wer einen Plan mit Bausteinen aus der Tabelle speichert, bekommt die Schritte ausgeschrieben.
Modifier¶
Ein Sollwert gilt oft nur unter einer zweiten Größe: 10 V bei 50 Hz, 100 mA
bei 1 kHz, ein Widerstand bei 23 °C. MET/CAL nennt das den Modifier und
schreibt ihn in der benannten Parameterform mit @ (+Volt = 240 V;
@Freq = 50 Hz), in der Spaltenform als MOD1. calScript übernimmt das
Zeichen:
group "Wechselspannung"
unit V
modifier 1 kHz
measure 1 "1 V" # erbt 1 kHz
measure 10 "10 V" @ 50 Hz # eigener Modifier
measure +100 "100 V" @1kHz # `+` wie in MET/CAL, Leerzeichen egal
Der Modifier ist eine Zahl mit optionaler Einheit (50 Hz, 1 kHz,
23 °C); gespeichert wird er mit Leerzeichen zwischen Zahl und Einheit, egal
wie er geschrieben war. Vorsatz und Einheit kommen aus dem Einheiten-Lexikon
von calServer: 1 uV und 1 μV werden 1 µV, 50 hz wird 50 Hz,
3 daPa bleibt Dekapascal und 0.8 PF der Leistungsfaktor. Freitext
(Sinus, 2-Draht) gehört in aux. Im
Editor ist der Modifier eine eigene Spalte und, an einer Gruppe, eine
Vorgabe für die Punkte darunter; die Erfassung zeigt ihn hinter dem Sollwert
(10 V @ 50 Hz). Ein Kalibrator am Messplatz nimmt die Frequenz daraus,
wenn die Einheit Hertz ist. Der MET/CAL-Import schreibt beide Formen in
dieses Feld. Ein Plan mit Modifier wird als Dokumentversion 7 exportiert;
eine ältere Installation lehnt ihn ab, statt den Modifier stillschweigend zu
verlieren. Hintergrund:
ADR 2026-10-30 Modifier.
Serien¶
Mehrere Sollwerte hinter measure sind eine Serie: ein Messpunkt je Wert,
alle mit denselben Eigenschaften. {value} in der Beschreibung wird durch den
jeweiligen Sollwert ersetzt.
ergibt drei Messpunkte (100 Ω, 190 Ω, 300 Ω), jeder mit Hilfsfeld und
Unsicherheit. Die Nummern laufen automatisch weiter; step und value passen
deshalb nicht zu einer Serie. Ohne {value} tragen alle Punkte dieselbe
Beschreibung.
Im Plan kommt keine Serie an, nur die einzelnen Punkte. Die Tabellen-Ansicht
zeigt sie einzeln, und wer dort speichert, bekommt die Serie beim nächsten
Wechsel ins Skript zurück, sofern die Punkte sich nur im Sollwert unterscheiden
(Beschreibung mit dem Wert als ganzer Zahl, sonst gleich; gleiche
Eigenschaften; automatische Nummern). Eine Beschreibung mit Dezimalkomma
(1,9 kΩ) bleibt ein Einzelschritt, weil der Sollwert im Skript einen Punkt
trägt.
Entscheidungen¶
Ein Plan kann an einer Antwort oder einem Urteil verzweigen. Die Frage ist ein eigener Schritt, die Zweige sind Blöcke:
ask "Ist ein Zusatzmodul eingebaut?"
if yes
message "Schalter auf EXT stellen."
measure 1 "1 V"
else
message "Ohne Modul weiter."
end
confirm "Gehäuse unbeschädigt"
if fail
message "Schaden notieren, Kunde informieren."
end
ask stellt eine Ja/Nein-Frage und hält die Antwort fest (Spalte varq,
Y oder N), ohne zu bewerten: anders als confirm ändert eine Antwort
weder das Ergebnis des Schritts noch das Gesamtergebnis. if yes und if no
beziehen sich auf die nächste Frage davor, if pass und if fail auf die
nächste Bewertung davor (confirm oder measure), jeweils von innen nach
außen und über Gruppengrenzen hinweg. Die Bewertung muss ein Urteil liefern:
ein Messpunkt mit ref none wird festgehalten, nicht bewertet, und taugt
darum nicht als Ziel für if pass oder if fail; der Compiler lehnt das ab,
statt dass der Lauf vor dem Block für immer auf ein Urteil wartet. Blöcke
dürfen verschachtelt sein (höchstens acht tief); end schließt die innerste
offene Struktur. Ein if darf ganze Gruppen umschließen, dann hängt jede
davon an der Antwort. Der Plan bleibt dabei flach: eine group in einem
if-Block, der in einer Gruppe steht, beendet diese Gruppe, als stünde end
vor dem if. Nach dem Block geht es in ihr nur mit else, end oder einer
neuen group weiter; ein Schritt oder eine subgroup dort wäre im Plan
Teil der Gruppe aus dem Block, und der Compiler lehnt ihn ab. Der Formatierer
schreibt die Gruppe vor dem if zu Ende und öffnet den Block auf ihrer
Ebene.
Im Dokument trägt jeder Schritt im Block seine Bedingung (Dokumentversion 9,
Spalte condition: Prüfschritt-Nr. der Frage und die erwartete Antwort; bei
Verschachtelung alle). Im Lauf bleiben die Schritte beider Zweige offen, bis
die Antwort da ist; danach gelten die Schritte des anderen Zweigs als
übersprungen: der Assistent springt über sie, die Tabelle zeigt
„übersprungen“, der Runner misst dort nicht, Fortschritt und Gesamtergebnis
zählen sie nicht. Eine Bedingung auf eine Frage, die es nicht gibt, kann nie
erfüllt sein; der Schritt bleibt übersprungen statt heimlich Pflicht.
Mehr als Ja/Nein und bestanden/nicht bestanden gibt es bewusst nicht: keine Ausdrücke, keine Register, keine Rückwärtssprünge. Jede Entscheidung hängt an etwas, das im Lauf festgehalten ist, und bleibt so aus den Ergebnissen nachvollziehbar (ADR 2026-10-31 „Entscheidungen im Plan“).
Wiederholmessungen¶
repeat 5 an einem Messpunkt (oder an der Gruppe) heißt: der Punkt nimmt fünf
Ablesungen. Bewertet wird ihr Mittelwert, mit derselben Toleranz und
Entscheidungsregel wie ein Einzelwert. Die Einzelwerte bleiben erhalten,
zusammen mit der Standardabweichung (n−1), und stehen im Prüfablauf am Punkt.
In der Erfassungstabelle zeigt ein solcher Punkt N kleine Felder mit laufendem Mittelwert und Standardabweichung; Enter läuft durch die Felder, aus dem letzten heraus wird gespeichert.
Die API nimmt die Werte als readings statt varq
(POST /api/v2/test-steps/{id}/capture); der Server rechnet den Mittelwert.
Passt die Anzahl nicht zu repeat, antwortet sie mit 422. Wer einen
Einzelwert schickt, ersetzt frühere Ablesungen dieses Punkts. Ein Plan mit
Wiederholungen wird als Dokumentversion 5 exportiert; eine ältere Installation
lehnt ihn beim Import ab, statt die Wiederholungen stillschweigend zu verlieren.
Hintergrund:
ADR 2026-10-29.
Drei Ebenen: Labor, Gruppe, Messpunkt¶
Wie viele Ablesungen ein Messpunkt nimmt (repeat) und wie viele
Vorlauf-Ablesungen vorher verworfen werden (discard), kann an drei Stellen
stehen. Es gilt der innerste Wert:
- Messpunkt:
measure 10 repeat 3 discard 0 - Gruppe:
repeatunddiscardangroupgelten für alle Messpunkte bis zur nächsten Gruppe. - Laboreinstellung: Grundeinstellungen › Kalibrierung › Messreihen, „Ablesungen je Messpunkt“ und „Vorlauf-Ablesungen verwerfen“. Leer heißt keine Vorgabe.
group "Gleichspannung"
result numeric
unit V
tol 0.01%
repeat 4
discard 1
measure 1 "1 V"
measure 10 "10 V" repeat 8
measure 100 "100 V" discard 0
Die Laboreinstellung gilt nur für Messpunkte, die eine Zahl ablesen; Fragen, Bestätigungen und Meldungen bekommen nichts. Sie wird beim Laden des Plans in die Kalibrierung übernommen, eine spätere Änderung trifft laufende Kalibrierungen nicht. In der Schrittansicht des Editors steht neben „Wiederholungen“ und „Vorlauf-Ablesungen“, woher der Wert kommt (Messpunkt, Gruppe oder Laboreinstellung); die Tabelle zeigt einen Wert aus der Laboreinstellung mit Hinweis.
Vorlauf-Ablesungen liest der Runner am Messplatz (ab Version 0.15.0) und verwirft sie; sie zählen weder zum Mittelwert noch zur Streuung. Ein älterer Runner liest ohne Vorlauf. Referenzablesung, Stabilitätskriterium und Sammellauf liest erst der Runner 0.17.0 (siehe Referenz, Stabilität, Umkehrspanne und Sammellauf).
Aus MET/CAL¶
Der Import übernimmt VSET (gilt bis VSET * für alle folgenden Tests, auch
über eingefügte Unterprozeduren) und TSET (nur der nächste Test), auch
mehrere Zuweisungen in einer Zeile:
| MET/CAL | calScript | Anmerkung |
|---|---|---|
NMEAS = n |
repeat n |
NMEAS = 0 schaltet in MET/CAL nur die Unsicherheitsrechnung ab; der Import setzt eine Ablesung und vermerkt es |
NTHROW = n |
discard n |
-1 (Verhalten älterer Treiber) bleibt Kommentar |
UUT_RES = x |
resolution |
absolut in Grundeinheit, auf den Vorsatz des Punkts umgerechnet |
GB, GB_OVERFLOW |
rule "MET/CAL GB = …" an der Gruppe |
nur dokumentiert; calServer bewertet nach ILAC-G8 mit der Messunsicherheit |
[V @NMeas] u. Ä. |
nichts im Plan | der Wert kam aus der ini-Datei; es gilt die Laboreinstellung |
Haben alle Messpunkte einer Gruppe denselben Wert aus VSET, steht er einmal
an der Gruppe; Punkte mit TSET behalten ihren eigenen. Hintergrund:
ADR 2026-11-02.
Messunsicherheit¶
Ein Plan nennt die Messunsicherheit auf eine von zwei Arten:
- Fest:
uncertainty 0.012(am Punkt oder als Gruppenvorgabe) ist die erweiterte Unsicherheit U aus dem eigenen Budget des Labors. Sie gewinnt immer, wie die MET/CAL-Übersteuerung „Expanded Uncertainty“, die Methode heißtVorgabe.kan der Gruppe nennt den Erweiterungsfaktor, mit dem dieses U gebildet wurde, und steht daneben in der Messzeile.ruleist die Begründung der Bewertung: es steht im Plan und in seiner Revision, gerechnet wird damit nicht; die Zeile „Entscheidungsregel“ auf dem Schein ist ein eigener Auftrag (Beispiel 4). - Gerechnet: ohne
uncertaintyrechnet calServer beim Erfassen das Budget nach GUM: U1 aus der freigegebenen Spezifikation des Normals, in der Option, mit der es misst (seine Standardoption am Gerät, sonst die der Spezifikation), S1 aus der Streuung beirepeat, S2 ausresolution, dazu die Beiträge U3 bis U10, U = k · √(U1² + S1² + S2² + U3² + … + U10²), mindestens die CMC aus den Qualitätsvorgaben. k ist daskder Gruppe, sonst ab Werk aus den effektiven Freiheitsgraden (GUM Anhang G, etwa 95 %; ohnerepeat2), oder fest 2 als Laboreinstellung. Welches Normal U1 liefert, sagt die Rolle des Punkts: die Referenz (ref device dmm, auch von Hand oder per Kamera), sonst die Quelle (source cal), nieuut; ohne Rolle das eine Normal der Kalibrierung, das den Punkt abdeckt (Beispiele 1, 2, 3, 5, 6). Deckt kein Normal den Punkt, bleibt U leer, die Methode heißtkeine, der Punkt nennt den Grund, und die Abschlussprüfung hält die Freigabe an, solange er ein Urteil hat. Einzelheiten: Ergebnisse, Messunsicherheit nach GUM.
Die Beiträge U3 bis U10 haben je eine Herkunft, die der Schein nennt:
- Spezifikation eines Normals: Zeilen der Art „Beitrag“ in der Spezifikation des Normals hinter U1, etwa die Linearität eines Referenzthermometers. Liefert ein anderes Normal den Bezug als die Quelle (ein Bad stellt die Temperatur, ein Referenzthermometer misst sie), kommen auch die Beitragszeilen der Quelle hinzu: Homogenität und Stabilität gehören in die Spezifikation des Bades, nicht in den Plan.
- Plan:
contribnennt Beiträge des Verfahrens selbst, etwa Adapter, Leitungen oder die Wärmeableitung bei der vorgeschriebenen Eintauchtiefe (Beispiele 1 und 6). - Umkehrspanne: ist ein Paar aus
direction upunddirection downerfasst, geht der Betrag der Differenz h in beide Partner ein, als volle Breite einer Rechteckverteilung (u = h / (2 · √3), wie DKD-R 6-1). - Unsicherheitsmodell des Labors: Beiträge, die an der Umgebung hängen und in keinem Plan stehen sollen (Thermospannungen, Temperatureinfluss, Ankopplung), stehen unter Administration › Stammdaten & Struktur › Unsicherheitsmodelle, für das ganze Labor oder einen Prüflingstyp. Ein Modell kann auch einen ausgewiesenen Ersatz für das Normal tragen, wenn keine Spezifikation den Punkt deckt (Unsicherheitsmodelle).
Mehr als acht Beiträge je Punkt teilen sich U10, dort steht die Wurzel ihrer Quadratsumme; jeder bleibt einzeln im Budget.
Akkreditierungsumfang¶
Ob ein Messpunkt im Akkreditierungsumfang liegt, leitet calServer beim
Erfassen aus der Anlage in den Qualitätsvorgaben ab. Der Plan muss dazu nichts
sagen (Akkreditierungsumfang). Er kann Punkte nur
herausnehmen, mit accred no:
calscript 0
plan "Multimeter mit Klimaschrank"
group "Gleichspannung"
result numeric
unit V
tol 0.1%
measure 1 10 100 "{value} V"
measure 1000 "1000 V"
accred no # Aufbau für 1000 V nicht akkreditiert
group "Klimaschrank"
accred no # alle Messpunkte dieser Gruppe
result numeric
unit °C
tol 0.5
measure 23 "23 °C"
- Vor dem ersten Schritt nimmt
accred noalle Messpunkte des Plans heraus, etwa für eine Werkskalibrierung. - An einer Gruppe gilt es für ihre Messpunkte, auch in ihren
Untergruppen, an
measurefür den einen. - In einem Baustein vor dem ersten Schritt nimmt es die Messpunkte des Bausteins heraus, wo immer er eingesetzt wird.
- Der Schein kennzeichnet diese Punkte mit „*“, gleich was die Anlage sagt. Eine Wahl von Hand an der Kalibrierung gewinnt trotzdem.
accred yes gibt es nicht. Ob ein Punkt im Umfang liegt, sagt die Anlage;
ein Plan, der das behauptete, müsste bei jeder neuen Urkunde nachgezogen
werden. Geschrieben wird accred no, ohne =, wie jede Eigenschaft.
accred = no, accred=no und noaccred lehnt der Compiler ab und nennt die
richtige Schreibweise; dasselbe gilt für ein = hinter jeder anderen
Eigenschaft. An confirm, rate, message, comment und ask ist accred
ein Fehler, denn eine Bestätigung hat keinen Messpunkt.
Am Messplatz messen¶
read device uut sagt, dass der Messplatz den Wert abliest, statt dass ihn
jemand eintippt. uut und cal sind Rollen, keine Geräte: welches
Multimeter oder welcher Kalibrator mit welcher Adresse dahintersteht,
entscheidet der Lauf. uut ist das Gerät des Messplatzes, dessen
Inventareintrag kalibriert wird; jede andere Rolle ist das Gerät mit dem
Inventareintrag des Normals, das der Vorlauf dieser Rolle zugeordnet hat. Ein
Gerät am Messplatz (Administration, Messplätze, Geräte) trägt darum keine
Rolle, nur Adresse, Treiberprofil und Inventareintrag: derselbe Kalibrator
ist heute cal und morgen uut. So läuft derselbe freigegebene Plan auf
jedem Platz, an dem die Geräte stehen. „Am Messplatz ausführen“ zeigt vor dem
Start, welches Gerät welche Rolle spielt; eine Rolle ohne Gerät (kein
Inventareintrag, nicht am Platz, im Vorlauf nicht zugeordnet) bleibt mit
Grund offen, und ihre Punkte misst der Runner nicht. Hintergrund:
ADR 2026-10-31 Geräte ohne Rolle.
group "Gleichspannung"
result numeric
read device uut
source cal
function "VOLT:DC"
settle 2
measure 1 10 100 "{value} V"
measure 0 "Nullpunkt" read manual
An der Gruppe gilt die Bindung für alle Punkte darunter; ein Punkt mit eigener
read device-Zeile ersetzt sie ganz, read manual hebt sie für diesen Punkt
auf. Der Schritt-Editor zeigt die Ablesequelle an, bearbeitet wird sie im
Skript. Ein Plan mit Gerätebindung wird als Dokumentversion 6 exportiert.
Hintergrund: ADR 2026-10-29 Gerätebindung.
Welcher Gerätetyp hinter einer Rolle vorgesehen ist, sagt eine Kopfzeile:
Der Typ steht beim Namen, wie er unter Gerätetypen heißt, damit der Plan auch
auf einer anderen Installation passt. Daraus rechnet der Editor TAR und einen
geschätzten TUR (siehe Prüfpläne); die Prüfung selbst
rechnet mit dem Normal, das der Vorlauf der Rolle zuordnet. Ein Plan ohne
standard läuft genauso, nur ohne diese Vorschau.
Wenn der Messplatz auf dich wartet¶
Läuft der Plan aus calServer („Am Messplatz ausführen“), sitzt am Runner niemand, der eine Meldung wegklickt. Der Runner hält deshalb (ab Version 0.14.0):
- an einer Meldung, wenn danach ein Gerätepunkt kommt, etwa „Messleitungen an den Stromeingang stecken“ vor der ersten Strommessung;
- an einer Bestätigung (
confirm) oder Frage (ask), wenn danach noch ein Gerätepunkt kommt; - an einem Kamerapunkt mit Quelle am Messplatz (
read cameramitsource cal, ab Version 0.18.0), nachdem er den Sollwert gestellt hat, bis die Kamera den Punkt übernommen hat; - an einem Handpunkt mit Quelle am Messplatz (
read manualmitsource cal, ab Version 0.19.0), nachdem er den Sollwert gestellt hat, bis der Prüfer den Wert in calServer eingetragen hat.
Vor jedem Halt an Meldung, Bestätigung oder Frage schaltet der Runner seine Quellen auf Standby (ab Version 0.18.0): wer umsteckt oder den Drehschalter dreht, hat keinen Sollwert mehr an den Buchsen. Der nächste Gerätepunkt schaltet den Ausgang wieder ein. Am Kamerapunkt bleibt der Ausgang an, dort soll die Kamera ja den gestellten Wert sehen.
Die Prüflauf-Seite zeigt oben „Messplatz … wartet auf dich“ mit dem Text des
Schritts. Nach einer Meldung tust du, was dort steht, und drückst Weiter;
der Runner misst dann den nächsten Punkt. Eine Bestätigung oder Frage
beantwortest du wie gewohnt in der Liste, der Runner sieht die Antwort und
macht von selbst weiter; bei einer Frage richtet er sich nach dem Zweig, den
deine Antwort wählt. „Weiter“ geht dort auch ohne Antwort weiter. Den Knopf
siehst du mit dem Recht, Messplätze zu bedienen (workstation_run).
„Lauf anhalten“ in Administration, Messplätze beendet den Lauf auch während eines
Halts.
Treiberprofile¶
Wie ein Gerätemodell angesprochen wird, steht in einem Treiberprofil,
nicht im Plan und nicht im Runner. Gepflegt werden die Profile unter
Administration, Treiberprofile, auf Wunsch am Gerätetyp. Die Bindung am
Messplatz nennt dann nur Profil und Anschluss
("cal": { "profile": "fluke-5522a", "resource": "GPIB0::4::INSTR" }).
- Ein Profil nennt die Fähigkeiten des Geräts je Funktion (gibt
Werte, misst, oder beides), die Kennung, die das Gerät auf
*IDN?meldet, und die Befehle je Funktion (VDC,VAC,ADC,AAC,OHM,OHM4,CAP,FREQ,TEMP). Eine SCPI-Schreibweise im Plan wiefunction "VOLT:DC"landet auf derselben Funktion. Ob ein Gerät Normal oder Prüfling ist, sagt das Profil nicht: das entscheiden die Rollen des Plans je Lauf. Derselbe Kalibrator ist heutecalund wird morgen mit demselben Profil selbst kalibriert; ein kombiniertes Gerät wie der Fluke 5320A gibt in einem Schritt und misst im nächsten. - Jedes Profil trägt eine Revision. Sie steht zusammen mit Kennung, Treiber, Phase, Funktion, Sollwert, den letzten Befehlen, der Antwort und der Fehlerschlange des Geräts in jeder Fehlermeldung des Runners. So lässt sich ein Fehler dem Profilstand zuordnen, der ihn erzeugt hat, und das Profil gezielt bessern. Wer ein Profil ändert, zählt die Revision hoch.
- Kennt das Profil eine Funktion nicht, oder verlangt der Plan von einer Rolle etwas, das ihr Gerät nicht kann (geben mit einem Multimeter), sendet der Runner nichts, und der Punkt scheitert vor dem ersten Befehl mit einer Meldung. Meldet sich am Anschluss ein anderes Modell, öffnet er das Gerät nicht.
- Gekoppelte Messplätze holen die aktiven Profile vor jedem Lauf. Ohne Verbindung gilt der letzte Stand. Ein Profil, das ein Labor am Messplatz selbst ablegt, geht vor, danach kommen die Profile aus calServer, dann die mitgelieferten.
- Mitgeliefert sind Profile für Fluke 5500A/5502A/5520A/5522A (geben), Fluke 5320A (gibt und misst), Fluke 287/289 (messen, Handmultimeter über IR-Adapter), Keysight 34401A/34461A/34465A/34470A, Keithley DMM6500, Fluke 8846A und ein allgemeines SCPI-Multimeter. Vor dem ersten Lauf am echten Gerät prüfen.
- Gerätefamilien ohne SCPI spricht der Runner über einen Befehlsdialekt
an, den das Profil nennt (
"driver": "fluke.55xx"für die Fluke 5500A/5502A/5520A/5522A). Der Dialekt kennt Identifikation und Reset, die Ausgabe für DC/AC-Spannung, DC/AC-Strom, Widerstand (2- und 4-Draht), Kapazität und Frequenz, Betrieb/Standby mit Nachweis, die Fehlerschlange, die Abfrage des Ausgangs und eine Sicherheitsabschaltung (Standby, notfalls Reset) am Ende jedes Laufs und bei jedem Abbruch. Das Profil trägt die Grenzen des Modells (options.max_voltage_v,options.max_current_a); darüber wird nichts gesendet. - SCPI-Präzisionsmultimeter (6½ bis 8½ Stellen) misst der Runner über den
Dialekt
scpi.dmmim festen Bereich: zuerst der Bereich des Schritts (range), sonst der kleinste Bereich des Profils, der den Sollwert aufnimmt, sonst Autorange, wenn das Profil es erlaubt. Dazu feste Integrationszeit (NPLC) und Autozero aus dem Profil, Fehlerschlange vor und nach jeder Ablesung, ein Überlauf ist ein Fehler des Punkts. Die Befehlsworte je Funktion (configure,configure_auto,measure) und die Bereichsliste stehen im Profil; so unterscheiden sich Keysight und Keithley nur in den Daten. Referenzmultimeter ohne SCPI (3458A, 8508A) brauchen einen eigenen Dialekt und sind noch offen. - Den Fluke 5320A spricht der Dialekt
fluke.5320aan: Widerstand (2- und 4-Draht, nieder- und hochohmig) und mit Option VLC Spannung geben, mit dem eingebauten Multimeter Spannung und Strom messen; Fehlerschlange nach jedem Befehlsblock, Ausgang bei jedem Fehler aus. Die Handmultimeter Fluke 287/289 sprichtfluke.28xüber den IR-Adapter an. Funktion und Bereich stehen dort am Drehschalter: der Runner misst, was anliegt, und meldet einen Fehler, wenn die Einheit nicht zur Funktion des Schritts passt; ein Überlauf oder ein offenes Thermoelement ist ein Fehler, kein Messwert. - Wechselgrößen brauchen eine Frequenz: der Modifier des Punkts
(
measure 10 "10 V" @ 50 Hz, auch als Gruppenvorgabe) geht vor; ohne ihn gilt die Angabe hinter der Funktion (function "VAC 1 kHz") oder die Bindung (frequency_hz). Ohne jede Frequenz scheitert der Punkt mit einer Meldung; geraten wird nicht. calserver-runner probe --bindings …spricht die Geräte der Bindung an, ohne zu messen: Kennung, Fehlerschlange, Ausgang, Betriebszustand. Für die Abnahme eines Messplatzes.
Rechte: die der Messplätze (workstation_view, workstation_edit,
workstation_delete). Hintergrund:
ADR 2026-10-29 Treiberprofile.
Treiberprofil anlegen¶
Unter Administration, Treiberprofile stehen unter den eigenen Profilen die Standardprofile: die Profile, die jeder calServer Runner mitbringt, mit Fähigkeiten, Dialekt und Funktionen. Sie gelten am Messplatz auch ohne Eintrag in calServer. Übernehmen legt eine Kopie unter derselben Kennung in calServer an; die gepflegte Fassung ersetzt dann an jedem Messplatz die mitgelieferte. Ein übernommenes Standardprofil zeigt „In calServer gepflegt“ und öffnet beim Klick die eigene Fassung.
Neues Treiberprofil fragt zuerst den Gerätetyp. Hersteller und
Modell kommen aus dem Gerätetyp, die Kennung entsteht daraus
(Fluke, 5522A → fluke-5522a) und wird nur angezeigt. Als
Ausgangspunkt wählt calServer das passende Standardprofil:
- dasselbe Modell (Fluke 5522A →
fluke-5522a): das Profil mit seiner Kennung, gespeichert ersetzt es am Messplatz das mitgelieferte; - ein verwandtes Modell desselben Herstellers (Fluke 5522A/6 →
fluke-5522a, Agilent 34410A →keysight-34401a): Befehle und Grenzen des verwandten Profils, Kennung und*IDN?-Erwartung auf das eigene Modell umgeschrieben, mit einer Notiz, was vor dem ersten Lauf zu prüfen ist; - sonst die leere Vorlage (gibt und misst VDC).
Den Ausgangspunkt kannst du im Dialog wechseln. Passt keins, führt Aus Handbuch mit KI direkt in den KI-Entwurf; Gerätetyp, Hersteller, Modell und das gewählte Standardprofil nimmt er mit.
Treiberprofil aus dem Handbuch mit KI¶
Für ein Gerät ohne Profil gibt es unter Administration, Treiberprofile
den Knopf Aus Handbuch mit KI. Du lädst das Programmier- oder
Steuerungshandbuch hoch (bis zu vier PDF, auf Wunsch mit Seitenangabe je
Datei wie 120-260), nennst Hersteller, Modell, Schnittstelle und
Gerätetyp, wenn bekannt, und optional ein bestehendes Profil als Basis.
- calServer liest den Text des Handbuchs, wählt bei großen Handbüchern die Seiten mit Befehlen, Bereichen und Grenzen aus, sammelt daraus Fakten und verfasst das Profil. Der Lauf dauert einige Minuten und läuft im Hintergrund; du kannst ihn abbrechen. Die PDF-Dateien werden danach gelöscht.
- Der Entwurf wird gegen den Standard geprüft, also gegen das, was jedes mitgelieferte Profil hat: Kennung, Abschlusszeichen und Timeout, Fähigkeiten je Funktion, Befehle je Funktion, Grenzen für alles, was das Gerät gibt, Standby, Frequenz bei Wechselgrößen, Bereiche, eine Notiz mit Quelle. Fehlt etwas, bessert die KI bis zu zweimal nach. Was im Handbuch nicht steht, wird nicht erfunden, sondern als offener Punkt genannt.
- Du siehst die Prüfliste, offene Punkte, die Seiten je Thema und das JSON. Ändern kannst du direkt im JSON (Erneut prüfen) oder mit einer Anweisung an die KI (Mit KI überarbeiten, ohne erneuten Upload).
- Gespeichert wird inaktiv. Ein Messplatz holt das Profil erst, wenn du
es nach der Abnahme am Gerät (
calserver-runner probe) aktiv setzt. - Allgemeine SCPI-Quellen bekommen Grenzen je Funktion
(
"options": {"limits": {"VDC": {"min": -100, "max": 100}}}); der Runner sendet ab 0.11.0 nichts außerhalb dieser Grenzen.
Die Routine heißt Treiberprofil-Entwurf und ist ausgeschaltet, bis sie unter Administration, KI eingeschaltet wird. Es geht nur der Text des Handbuchs an das Modell, keine Geräte- oder Kundendaten. Gescannte Handbücher ohne Textebene vorher durch eine Texterkennung schicken. Hintergrund: ADR 2026-10-31 Treiberprofile per KI.
Fehlerprotokolle und KI-Analyse¶
Ein Treiberprofil ist erst am Gerät bewiesen. Scheitert am Messplatz das Öffnen eines Geräts, die Zuordnung oder ein Messschritt, schickt der Runner ein Fehlerprotokoll nach calServer: welche Befehle hinausgingen, was das Gerät antwortete, wie lange es dauerte, was in seiner Fehlerschlange stand, welche Profilfassung am Platz galt, dazu eine Einordnung in Worten (falsches Gerät an der Adresse, Funktion dem Profil unbekannt, Befehl fehlt, Frequenz fehlt, Gerät meldet Fehler, keine Antwort, …) mit dem Hinweis, wo im Profil zu suchen ist.
- Administration, Messplätze zeigt je Platz die Zahl der ungesichteten Protokolle; der Dialog dahinter listet sie mit Zeile, Funktion, Gerät und Einordnung und zeigt zu jedem die Hinweise, die Geräte mit erwarteter und gemeldeter Kennung, die Mitschrift (Einträge des gescheiterten Schritts hervorgehoben) und den Traceback.
- Ein Protokoll lässt sich sichten oder erledigen und mit einer Notiz versehen; dieselbe Kennung ersetzt beim Nachsenden den alten Stand. calServer behält die jüngsten 500 je Messplatz.
- Für KI-Analyse herunterladen gibt eine Datei
calserver.error-analysis: das Protokoll, die betroffenen Treiberprofile wie sie jetzt in calServer stehen, der Messplatz und die Aufgabe an den Auswerter (Ursache, betroffenes Profil und Feld, Vorschlag als JSON, Restrisiko). Die Datei gibst du einem Sprachmodell; den Vorschlag übernimmst du im Editor der Treiberprofile, nach eigener Prüfung. Ein falscher Befehlssatz an einem Kalibrator ist ein Sicherheitsrisiko, deshalb ändert niemand ein Profil automatisch. - Ohne Verbindung bleibt das Protokoll am Messplatz
(
calserver-runner errors), die Lauf-Ansicht nennt seine Kennung.
Rechte: die der Messplätze. Hintergrund: ADR 2026-10-30 Fehlerprotokoll.
Toleranz¶
Terme werden addiert und mit + getrennt. Die Einheit hinter der Zahl sagt,
worauf sich der Term bezieht:
| Schreibweise | Bezug | im Plan |
|---|---|---|
0.3% |
Prozent vom Messwert | 0.3% |
0.5 %r |
Prozent vom Bereich (range) |
0.5/ |
1 D |
Vielfaches der Auflösung (resolution) |
1D |
0.02 |
Absolutwert in der Einheit des Schritts | 0.02U |
3 mV |
Absolutwert mit Einheit, umgerechnet auf den Vorsatz des Schritts | 0.003U an einem Schritt in V |
50 ppm |
Millionstel vom Messwert | 0.005% |
10 ppm r |
Millionstel vom Bereich | 0.001/ |
3 dgt |
wie 3 D |
3D |
Die MET/CAL-Formen 0.003U, 0.5/, 50P% und 50P/ werden ebenso gelesen,
damit eine Zeile aus einer Prozedur oder einem Datenblatt ohne Umrechnen
hineinpasst. Zurückgeschrieben wird die kurze Form.
Ein Vorzeichen macht den Term einseitig: +0.3% nur obere, -0.3% nur
untere Grenze. Dezimaltrenner ist der Punkt. Die gewohnte
calServer-Schreibweise (0.3% 1D) wird ebenfalls gelesen. Was keine
Termliste ist, steht in Anführungszeichen und wird unverändert übernommen:
tol "…".
Der Zahlteil eines Terms ist eine Dezimalzahl mit Punkt: keine E-Notation
(1e-3U), kein Punkt ohne Nachkommastelle (1.U), kein Komma. Der Editor
liest dieselbe Grammatik; ein Komma schreibt er beim Eintippen zum Punkt um,
alles andere bleibt sichtbarer Rohtext, statt im Skript zu scheitern.
Fehlt der Bezug eines Terms (%r ohne range, D ohne resolution), rechnet
der Plan dort mit 0; calScript meldet das als Hinweis, bricht aber nicht ab.
Woher der Bezug kommt: ref¶
read liest immer den Prüfling. ref sagt nur, woher der Wert kommt, gegen
den er bewertet wird:
| Schreibweise | Bezug | Grenzen liegen um |
|---|---|---|
ohne ref |
UUT INDICATED |
den Sollwert der Quelle; der Normalfall: ein Normal gibt aus, der Prüfling wird abgelesen |
ref device thermo |
REFERENCE |
die Ablesung des Normals der Rolle thermo, das am Messplatz mitmisst |
ref manual thermo, ref camera thermo |
REFERENCE |
dieselbe Ablesung, von Hand eingetippt oder per Kamera gelesen |
source uut mit ref device dmm (oder manual, camera) |
NOMINAL |
den Sollwert, den der Prüfling ausgibt; abgelesen wird das Normal (Kalibrator als Prüfling, Beispiel 5) |
ref none |
ohne | nichts: der Wert wird erfasst, aber nicht bewertet |
result numeric ohne ref übernimmt den Bezug der Gruppe, sonst den
Sollwert der Quelle. Der Prozentanteil einer Toleranz bezieht sich immer auf
den Wert des Prüflings. Die früheren Wörter ref nominal und ref uut lehnt
der Parser mit einem Hinweis ab, was an ihre Stelle tritt.
Referenz, Stabilität, Umkehrspanne und Sammellauf¶
Ein Kalibrierbad gibt die Temperatur nur ungefähr vor; der Bezug ist die Ablesung eines Referenzthermometers, gemessen wird erst, wenn die Temperatur steht, und oft stecken mehrere Prüflinge zugleich im Bad. Beispiel 6 zeigt das als Plan:
group "Messreihe aufwärts"
result numeric
unit °C
resolution 0.001
contrib "Wärmeableitung bei 15 cm Eintauchtiefe" 0.005 °C
repeat 3
direction up
read device uut
source bath
ref device thermo
function "TEMP"
stable 0.01 °C 2 min max 30 min
measure 0 50 100 "{value} °C"
measure 150 "150 °C (erweiterter Bereich)"
optional
end
- Referenz:
ref device thermoliest das Normal der Rollethermoam Messplatz mit. Beiref manualundref camerafragen Messwerterfassung und Assistent seinen Wert neben dem des Prüflings ab; in der Tabelle liest die Kamera ihn, wenn der Cursor im Referenzfeld steht (ein Beweisbild hält sie nur für den Prüfling fest, für die Referenz die Herkunft). calServer legt die Grenzen um den Mittelwert der Referenz; ohne Referenz gibt es kein Urteil. - Stabilität:
stable 0.01 °C 2 min max 30 minlässt den Runner nach Stellen und Einschwingen lesen, bis die Spanne der Werte zwei Minuten lang innerhalb von 0,01 °C bleibt, höchstens 30 Minuten. Das Band ist absolut; ein Anteil der Toleranz würde die Bewertung in den Runner holen und ist deshalb ein Fehler. Den Verlauf speichert calServer je Punkt als Nachweis. Wird es nicht stabil, gibt es keinen Messwert: der Punkt bleibt offen, und du entscheidest über Wiederholung oder Abbruch. - Umkehrspanne:
direction upunddirection downam selben Sollwert bilden ein Paar. Beim Laden entsteht je vollständigem Paar ein Schritt „Umkehrspanne“ am Ende des Plans; seine Grenze kommt aus einer Zeile der gewählten Option mit der abgeleiteten Größe Umkehrspanne. Ohne solche Zeile bleibt sie ohne Urteil, geht aber ins Budget beider Partner ein. - Optionale Punkte:
optionallädt den Punkt nur, wenn die gewählte Option ihn als Punktzeile verlangt (hier 150 °C nur mit erweitertem Bereich). Siehe Spezifikationen. - Sammellauf: Alle Kalibrierungen mit derselben Planversion lassen sich im Prüfablauf über Sammellauf zusammen an einem Messplatz starten. Der Vorlauf (Umgebung, Normale, Rollen) gilt für alle, der Eingangsentscheid bleibt je Prüfling; jeder Prüfling bekommt einen Kanal am Lesegerät oder wird an seinem eigenen Gerät abgelesen (Kanal leer lassen: calServer nimmt das Gerät am Messplatz, dessen Inventar der Prüfling ist). Hängt kein Prüfling an einem Kanal, braucht es kein Lesegerät; gemischt geht auch. Stellen, Einschwingen, Warten auf Stabilität und die Referenz geschehen einmal, abgelesen wird je Prüfling. Zugelassen ist ein Plan, wenn jeder Messpunkt dem Messplatz etwas zu tun gibt (ein Gerät liest den Prüfling, oder er stellt die Quelle bzw. liest die Referenz), der Prüfling nie die Quelle ist und keine Bedingung einen gemeinsamen Schritt überspringt; der Dialog nennt sonst den Grund.
- Handablesung und Kamera im Sammellauf: Fühler ohne Schnittstelle
liest der Prüfer ab. Dafür steht am Punkt
read manual(oderread camera) zusammen mitref device thermo: Der Runner stellt das Bad, wartet auf Stabilität, liest das Referenzthermometer und legt die Referenz in calServer ab, bevor er hält. Im Prüfablauf erscheint dann einmal für alle Prüflinge Ablesetabelle öffnen: je Prüfling eine Zeile mit der abgelegten Referenz und einem Feld für die Ablesung, beirepeat NN Felder. Mit der Kamera springt der Cursor nach jeder Lesung zum nächsten offenen Prüfling. Sind alle Zeilen erfasst, stellt der Runner den nächsten Punkt; mit Referenz klammern liest er die Referenz danach noch einmal, und calServer rechnet die Punkte neu. Ohne abgelegte Referenz nimmt calServer keine Ablesung an, statt gegen den Sollwert zu rechnen. Im Einzellauf gilt dasselbe: die Referenz kommt vom Messplatz, die Ablesung aus dem Browser. - Referenz klammern: Bei vielen Prüflingen dauert das Ablesen; driftet das Bad in dieser Zeit, stimmt die eine Referenzablesung vom Anfang nicht mehr für den letzten Prüfling. Mit Referenz klammern im Sammellauf-Dialog liest der Runner die Referenz in jedem Durchgang vor und nach den Prüflingen; calServer mittelt alle Referenzablesungen des Punktes.
Hintergrund: ADR 2026-11-02 Sammellauf, Stabilität und Referenzablesung, ADR 2026-11-07 Sammellauf mit eigenem Gerät je Prüfling, Referenz klammern, ADR 2026-11-07 Sammellauf mit Handablesung.
Toleranzen aus der Spezifikation¶
Ein Plan beschreibt, wie gemessen wird; was verlangt ist, steht in
der Spezifikation des Geräts oder seines Typs. Ein Messpunkt ohne tol
bekommt seine Toleranz beim Laden aus der Option, die die Kalibrierung
gewählt hat (Hersteller, Norm, Kunde oder Verwendung), mit Bereich und
Auflösung derselben Zeile. Ein tol im Plan (am Punkt oder an der Gruppe)
gewinnt; es ist dann ein anderer Maßstab und steht auf dem Schein mit der
Herkunft „Plan“. Findet sich keine Zeile oder mehrere, bleibt der Punkt ohne
Toleranz und damit ohne Urteil, mit Grund, statt mit einer geratenen Zeile.
Die Herkunft je Punkt („Spezifikation · Option“, „Plan“, „Plan (Gruppe)“, „Keine Toleranz“) zeigt die Messwerterfassung, die Abschlussprüfung prüft sie, der Schein nennt sie. Vorschau, Probelauf und Testfälle im Editor kennen keine Kalibrierung und rechnen deshalb nur mit Toleranzen aus dem Plan. Siehe Spezifikationen und ADR 2026-11-02 Eine Spezifikation mit Optionen.
Zeichenketten¶
In doppelten Anführungszeichen, mit \", \\, \n, \t. Längere Texte,
etwa HTML-Anleitungen, als Block:
Die gemeinsame Einrückung der Blockzeilen wird entfernt. Hinter dem
schließenden """ darf auf derselben Zeile nur ein Kommentar stehen.
Zeilenumbrüche in Texten speichert das Skript als LF; Windows-Umbrüche
(CRLF) werden beim Schreiben umgesetzt.
Eine Prüfanweisung mit HTML (<p>, <b>, <br>, Listen, Links) zeigen
Editor-Vorschau, Ablauf, Probelauf, Erfassung und Assistent formatiert an;
Skripte, Ereignis-Attribute und javascript:-Links werden dabei entfernt.
Reiner Text, etwa aus dem MET/CAL-Import, behält seine Zeilenumbrüche. Ein
< als Vergleich („Anzeige < 5 V“) bleibt Text. In Tabellenzeilen, Banner
und der Konsole des Runners erscheint die Anweisung ohne Auszeichnung,
Absätze werden dort zu Zeilen.
Änderungen vor dem Genehmigen¶
Wer im Vorlagen-Tab der Prozedur Genehmigen wählt, sieht vor der
Bestätigung, was sich am Skript seit der letzten genehmigten Version geändert
hat: Zeilenvergleich mit drei Zeilen Umfeld, hinzugefügte Zeilen grün und mit
+, entfernte rot und mit -, Zeilennummern beider Fassungen. Eine geänderte
Toleranz ist dort genau eine Zeile, statt dass der ganze Plan neu gelesen
werden muss.
Verglichen wird immer die jüngste Version, denn die trifft die Genehmigung. Wurde der Plan noch nie genehmigt, zeigt der Dialog das ganze Skript als neu. Eine hochgeladene Datei ohne Schritte (z. B. ein PDF) hat kein Skript, dann bleibt es bei der Rückfrage. Lässt sich der Vergleich nicht laden, ist Genehmigen trotzdem möglich: der Vergleich hilft, er ist keine Bedingung.
Mit der Kamera ablesen¶
read camera macht die Webcam zur Ablesequelle: der Prüfer hält den Prüfling
vor die Kamera, zieht im Panel der Erfassungstabelle einmal einen Rahmen um die
Anzeige, und ein Vision-Modell liest den Wert in diesem Ausschnitt. Das Modell
kennt Einheit und Auflösung des Punkts, nie den Sollwert; der Server
rechnet danach eine Ampel:
| Ampel | Bedeutung | Was passiert |
|---|---|---|
| rot | kein Wert, Überlauf, mehrere Werte im Rahmen, andere Größe als der Schritt, Modell unsicher | wird nicht übernommen; von Hand ablesen |
| gelb | Modell nicht ganz sicher, Blendung, Vorzeichen unsicher, andere Nachkommastellen, zweite Lesung weicht ab, mehr als zehnfache Toleranz | steht als Vorschlag im Feld, der Prüfer übernimmt mit Klick oder tippt um |
| grün | sauber gelesen | capture confirm: Klick des Prüfers; capture auto: Übernahme ohne Klick |
group "Anzeige des Prüflings"
result numeric
unit V
tol 0.5%
read camera
capture auto
repeat 3
measure 1 10 100 "{value} V"
measure 0 "Nullpunkt" read manual
So startet die Ablesung: In der Erfassungstabelle (Lauf einer
Kalibrierung oder Probelauf im Prüfplaneditor) steht über der Tabelle rechts
die Taste „Kamera-Ablesung“. Sie öffnet das Kamera-Panel neben der Tabelle;
dort die Kamera wählen, den Browser die Kamera freigeben lassen, einmal mit
der Maus (oder über „Rahmen per Tastatur“) einen Rahmen um die Anzeige ziehen
und „Anzeige lesen“ drücken. Der Wert landet im Feld, in dem der Cursor steht.
Ist die Taste ausgegraut, steht der Grund daneben, meist ist die
KI-Routine aus. Fehlt sie ganz, fehlt dem Benutzer das Recht
ai_assistant_edit oder calibration_edit.
Bildlage: Zeigt die Kamera das Gerät gespiegelt oder quer, dreht „Drehen“ das Bild in 90°-Schritten im Uhrzeigersinn, „Spiegeln“ tauscht links und rechts. Die Lage gilt je Kamera und bleibt im Browser gespeichert; der Rahmen bleibt dabei auf derselben Stelle des Geräts. An die KI und ins Beweisbild geht der Ausschnitt in der eingestellten Lage, also mit aufrechten Ziffern.
capture auto wartet, bis das Bild im Rahmen ruhig steht, liest zweimal und
übernimmt nur, wenn beide Lesungen übereinstimmen und grün sind; Gelb bleibt
ein Vorschlag, den der Prüfer anklickt. Der Server prüft das nach: eine
automatisch übernommene Ablesung ohne grünes Beweisbild weist er ab, der
Prüfer liest neu oder übernimmt von Hand. Ohne capture auto gibt es dafür
zwei Schalter im Panel:
„Automatisch lesen“ liest, sobald die Anzeige am Punkt ruhig steht (nur mit
Rahmen), „Automatisch übernehmen“ übernimmt eine passende Lesung ohne Klick,
auch nach „Anzeige lesen“. Nur „Automatisch lesen“ heißt: lesen, Vorschlag
zeigen, nach dem Klick auf „Übernehmen“ die nächste Position lesen. „Übernehmen
bei“ legt fest, ob nur Grün oder auch Gelb ohne Klick übernommen wird; Rot nie,
und zwei widersprüchliche Lesungen auch nicht. Der Schalter gilt nur für diese
selbst eingeschaltete Automatik; verlangt der Plan capture auto, zählt
allein Grün, und das Panel zeigt das an. Die Felder zeigen alle Stellen
der Anzeige (2,5000, nicht 2,5). Zeigt der neue Punkt genau den
Wert des vorigen, bleibt die Lesung ein Vorschlag (die Anzeige steht
vermutlich noch auf dem alten Punkt). Was nicht übernommen wird, steht als
Vorschlag im Panel; gelesen wird erst wieder, wenn sich die Anzeige ändert.
Bei repeat füllt die Kamera die nächste freie Position und liest weiter, bis
alle Positionen voll sind; dann geht es zum nächsten Punkt. Unabhängig vom Plan steht das Panel an jedem Messpunkt als
Eingabehilfe bereit, sobald die KI-Routine „Kamera-Ablesung“ in den
KI-Einstellungen eingeschaltet ist und ein Vision-Modell eingetragen ist; die
Hand bleibt immer möglich.
Kalibrator vom Messplatz, Ablesung per Kamera: Hat der Prüfling keine
Schnittstelle, das Normal aber schon, stellt der calServer Runner das Normal
und die Kamera liest den Prüfling. Dafür stehen source, function und
settle neben read camera:
group "Gleichspannung 5 V"
result numeric
unit V
tol 0.025% + 2 D
repeat 3
read camera
capture auto
source cal
function "VDC"
settle 2
message "Drehschalter auf V⎓, Bereich 5 V"
measure 0.5 2.5 4.5 "{value} V"
Je Punkt stellt der Runner cal auf den Sollwert, schaltet den Ausgang ein
und wartet die Einschwingzeit ab. Dann meldet er den Punkt bereit: auf der
Laufseite steht „Messplatz wartet auf dich“, der Cursor springt auf den Punkt,
und erst jetzt liest die Automatik des Kamera-Panels (vorher steht dort „Der
Messplatz stellt cal auf den Sollwert“, damit die Kamera nicht den alten Wert
liest). Sobald der Punkt übernommen ist, stellt der Runner den nächsten.
„Weiter“ auf der Laufseite geht ohne Ablesung zum nächsten Punkt. Ohne
laufenden Messplatz stellt der Prüfer das Normal wie bisher selbst. function
oder settle ohne source neben read camera lehnt der Compiler ab; sie
gehören zur Quelle. Den Runner braucht das ab Version 0.18.0.
Zu jedem übernommenen Kamerawert speichert calServer Herkunft (camera,
camera_auto) und ein kleines Beweisbild: genau den Ausschnitt, den das
Modell gesehen hat, mit Ampel und Konfidenz. Es steht in der Erfassungstabelle
neben dem Wert; ein neuer Wert ersetzt es. Nur der Rahmen verlässt den Browser
(höchstens 640 px lange Kante), bei einem externen Anbieter verlässt er auch
das Haus, das sagt das Panel. Ein Plan mit Kamera-Bindung wird als
Dokumentversion 8 exportiert. Hintergrund:
ADR 2026-10-31 Kamera-Ablesung;
Eignung eines Modells misst tools/display-reading-eval/.
Ablesung im Lauf wählen¶
Wer abliest, entscheidet oft erst der Messplatz am Tag der Messung: steckt der
IR-Adapter, liest der Runner; ist die Kamera eingerichtet, liest die Kamera;
sonst liest der Prüfer. Toleranzen, Punkte und Unsicherheit bleiben dabei
gleich. Statt jede Gruppe dreimal zu schreiben, stellt read mehrere
Ablesequellen zur Wahl, getrennt durch |; die erste ist die Vorgabe:
group "Gleichspannung 5 V"
result numeric
unit V
tol 0.025% + 2 D
repeat 3
read device uut | camera | manual
capture auto
source cal
function "VDC"
settle 2
measure 0.5 2.5 4.5 "{value} V"
end
Jede Wahl liest den Prüfling (device uut, camera oder camera uut,
manual), jede Art höchstens einmal; Leerzeichen um | sind egal. Was neben
der Auswahl steht, gilt so:
| Angabe | Gilt |
|---|---|
source, function, settle |
in jeder Wahl: der Runner stellt das Normal, ob Gerät, Kamera oder Prüfer abliest |
capture auto/confirm |
nur, wenn die Kamera liest; muss camera unter den Wahlen haben |
stable |
nur mit device uut an erster Stelle; Kamera und Hand lassen es fallen |
ref …, source uut |
nicht mit einer Auswahl: die Referenz holt der Runner nur zusammen mit einer Geräteablesung |
Im Vorlauf steht dann die Zeile „Ablesung“ mit den angebotenen Arten, die Vorgabe vorgewählt. Die Wahl gilt für den ganzen Lauf; ein Punkt, der sie nicht anbietet, liest mit seiner Vorgabe. Im Lauf öffnet der Knopf „Ablesung: …“ im Kopf der Laufseite den Vorlauf noch einmal, etwa wenn der IR-Adapter ausfällt; die Punkte, die noch offen sind, lesen dann mit der neuen Wahl. Am Messplatz braucht der Lauf nur, was die Wahl verlangt: liest die Kamera oder der Prüfer, genügt das Normal der Quelle, der Prüfling muss nicht am Runner hängen.
read manual mit Quelle geht auch ohne Auswahl: der Runner stellt cal
auf den Sollwert, wartet die Einschwingzeit ab und hält, bis der Prüfer den
Wert eingetragen hat; die Laufseite sagt „Lies den Prüfling ab und trag den
Wert ein“ und springt zum Punkt. Ohne source bleibt read manual die
Ausnahme in einer Gerätegruppe wie bisher. Beides braucht den Runner ab
Version 0.19.0; ältere Runner stellen an einem Handpunkt nichts, dann stellt
der Prüfer selbst. Der Probelauf im Editor rechnet mit der Vorgabe. Beispiel 7
(Fluke 289) zeigt den ganzen Plan. Hintergrund:
ADR 2026-11-04 Ablesequelle im Lauf wählbar.
API¶
| Aufruf | Zweck | Recht |
|---|---|---|
POST /api/v2/procedure-templates/calscript/compile |
Skript prüfen, Schrittzeilen und Hinweise zurückgeben, nichts speichern | procedure_template_view |
POST /api/v2/procedure-templates/calscript/format |
Skript in die Standardform bringen (script, changed), nichts speichern |
procedure_template_view |
POST /api/v2/procedure-templates/calscript |
Vorlage 0.1 anlegen (script, optional name, procedure_id) |
procedure_template_edit |
GET /api/v2/procedure-templates/calscript/examples |
Mitgelieferte Beispielpläne: key, name, summary (erster Absatz des Kommentarkopfs), steps, script; nichts speichern |
procedure_template_view |
POST /api/v2/procedure-templates/calscript/from-metcal |
MET/CAL-Prozedur (file oder text, optional camera) übersetzen: Skript, Bericht, Typvorschläge, driver_profile (Entwurf, exists), reading (automated, camera, camera_candidates); nichts speichern |
procedure_template_view |
POST /api/v2/procedure-templates/calscript/metcal-project/preview |
MET/CAL-Projekt (files[], optional camera) lesen und übersetzen: Prozeduren mit Rolle und Aufrufen, je Hauptprozedur Skript, Bericht, Ablesung und Profilentwurf, offene Aufrufe; nichts speichern |
procedure_template_view |
POST /api/v2/procedure-templates/calscript/metcal-project |
Hauptprozeduren als Prüfpläne anlegen (files[], procedures[n][name], optional procedures[n][type_id] für die Spezifikation, die nur mit specification_edit entsteht, optional camera); Profilentwürfe des Prüflings entstehen inaktiv nur mit workstation_edit (driver_profile.action: created, exists, invalid, not_permitted) |
procedure_template_edit |
PUT /api/v2/procedure-templates/{id}/calscript |
Skript als nächste Version speichern | procedure_template_edit |
GET /api/v2/procedure-templates/{id}/calscript |
Vorlage als Skript lesen | procedure_template_view |
GET /api/v2/procedure-templates/{id}/approval-diff |
Skript der jüngsten Version gegen die letzte genehmigte (added, removed, hunks) |
procedure_template_view |
GET /api/v2/driver-profiles |
Treiberprofile (Filter filter.type_id) |
workstation_view |
GET /api/v2/driver-profiles/standard |
Standardprofile, die der Runner mitbringt, mit adopted_id, wenn calServer eins unter derselben Kennung pflegt |
workstation_view |
GET /api/v2/driver-profiles/template?type_id=…&basis=… |
Ausgangspunkt für ein neues Profil: Hersteller und Modell aus dem Gerätetyp, passendes Standardprofil (basis leer: leere Vorlage), Kennung |
workstation_view |
POST /api/v2/driver-profiles, PUT …/{id} |
Treiberprofil anlegen oder ändern; das Dokument wird nach den Regeln des Runners geprüft | workstation_edit |
DELETE /api/v2/driver-profiles/{id} |
Treiberprofil löschen | workstation_delete |
GET /api/v2/driver-profile-drafts |
Stand der KI-Routine für Treiberprofile: eingeschaltet, Anbieter, Modell, Dateigrenzen | workstation_edit |
POST /api/v2/driver-profile-drafts |
Entwurf aus dem Handbuch starten (files[] PDF, pages[], manufacturer, model, interface, type_id, base_profile_id, instructions); Antwort 202 mit task_id, Ergebnis über GET /api/v2/tasks/{id} |
workstation_edit |
POST /api/v2/driver-profile-drafts/refine |
Entwurf mit Anweisung überarbeiten (task_id, document, instruction), ohne erneuten Upload |
workstation_edit |
POST /api/v2/driver-profile-drafts/check |
Dokument gegen Runner-Regeln und Standard prüfen, ohne KI | workstation_edit |
GET /api/v2/workstations/me/driver-profiles |
Aktive Profile für den gekoppelten Messplatz | Messplatz-Token |
POST /api/v2/workstations/me/heartbeat mit waiting_step_id, waiting_kind |
Runner meldet einen Halt (message, confirm, ask); null hebt ihn auf |
Messplatz-Token |
POST /api/v2/workstations/{id}/commands mit type: continue, step_id |
Wartenden Runner am genannten Schritt weiterschicken | workstation_run |
GET /api/v2/calibrations/{ctag}/run → meta.workstations |
Messplätze an diesem Lauf mit ihrem Halt (waiting: step_id, kind, since) |
calibration_view |
GET /api/v2/ai/display-reading/availability |
Ist die Kamera-Ablesung möglich: Routine, Modell, Anbieter, Budget, Schwellen, Bildgrenzen, Datenschutzstufe | ai_assistant_edit |
POST /api/v2/ai/display-reading |
Ausschnitt (image Base64, mime, optional step_id, unit, decimals, display, compare_to) lesen: Text, Wert, Flags, Konfidenz, Ampel mit Gründen, evidence_token |
ai_assistant_edit + calibration_edit |
POST /api/v2/test-steps/{id}/capture mit source, evidence_tokens[] |
Werte mit Herkunft (manual, camera, camera_auto, device) und Beweisbild je Position übernehmen |
calibration_edit |
GET /api/v2/calibrations/{ctag}/reading-images/{row}/{seq} |
Beweisbild einer Ablesung (optional ?phase=) |
calibration_view |
Ein Syntaxfehler kommt als 422 mit error.line. Hinweise stehen in
warnings (Zeile und Text) und verhindern das Speichern nicht. lines nennt
je Schrittzeile die Skriptzeile, an der der Schritt beginnt (gleiche
Reihenfolge wie steps); der Editor springt darüber von der Vorschau in den
Text. Fehler und
Hinweise tragen neben dem deutschen Text (detail bzw. message) den
englischen Quelltext als message_key mit message_params; die Oberfläche
zeigt sie darüber in der eingestellten Sprache (Kategorie app). Die
Anmerkungen im Nacharbeitsbericht des MET/CAL-Imports sind noch deutsch.
GET /api/v2/procedure-templates/{id}/steps liefert je Zeile step_kind
(measure, confirm, rating, ask, info, header, derived),
berechnet aus Typ und geerbter config; Prüfschritte einer Kalibrierung
tragen dasselbe Feld. Die Oberfläche leitet die Schrittart daraus ab und
nicht mehr selbst.
Was calScript (noch) nicht kann¶
Sprachversion 0 bildet genau das ab, was der Schritt-Editor kann, dazu
Serien als Schreibhilfe, Wiederholmessungen, den Modifier je Punkt, die
Ablesequellen Messplatz und Kamera und Entscheidungen an einer Frage oder
Bewertung (ask, if). Keine freien Ausdrücke, keine Variablen, keine
Schleifen, keine Texteingabe des Prüfers (MET/CAL MEM2). As-Found/As-Left
je Punkt ist für Sprachversion 1 vorgesehen. Hintergrund:
ADR 2026-10-28,
Sprachspezifikation und offene Fragen unter
Entwicklung › calScript.