Funktionen
Jede Modul-Konfigurationsdatei, die in den Anwendungseinstellungen aufgeführt ist, ist ein Modul. Seine Knoten liegen
unter hdvisionsystems/lumiscan-calibration/<module name>/, wobei der Modulname der Name der
Modul-Konfigurationsdatei ohne .json in Kleinbuchstaben ist. Ein Modul bietet zwei Funktionen:
-
transformrechnet 2D-Bildkoordinaten mit der Lookup-Tabelle des Moduls in 3D-Koordinaten um. -
resetliest die Modul-Konfigurationsdatei und ihre Lookup-Tabelle erneut ein.
Jede Funktion kann auf zwei Arten gestartet werden, und beide führen zum selben Ergebnis:
-
der ready/request-Handshake, siehe Grundkonzept des Handshakes;
-
ein einziger Schreibzugriff auf ihre
execute-Methode, siehe Execute-Methoden.
Ein Modul kann auch einen Stream von Punkten transformieren, sobald sie eintreffen, siehe Einen Stream transformieren (experimentell).
Data Layer
LumiScan Calibration bietet seine Funktionen auf dem Data Layer unter hdvisionsystems/lumiscan-calibration an.
Auf ctrlX OS (ctrlX CORE oder ctrlX IPC) nutzt LumiScan Calibration den ctrlX Data Layer.
Auf einem PC mit Windows 11 oder Ubuntu 24.04 nutzt LumiScan Calibration LumiScan Keryx.
Knotenadressen, Typen und Aufrufmuster sind auf beiden gleich. LumiScan Calibration bietet:
-
ein Stream-Abonnement auf eine Quelle (experimentell)
Wie Adressen aufgebaut sind, wie Funktionen aufgerufen werden, die Statuscodes und die Werkzeuge sind in LumiScan Keryx beschrieben.
Adressen
Alle folgenden Adressen beginnen mit hdvisionsystems/lumiscan-calibration/<module name>/.
| Funktion | Adresse | Zugriff | Bedeutung |
|---|---|---|---|
transform |
|
Schreibgeschützt |
|
|
Beschreibbar |
Fordert einen Transform an, siehe Handshake. |
|
|
Methode |
Führt einen Transform aus und kehrt zurück, wenn er abgeschlossen ist. |
|
reset |
|
Schreibgeschützt |
|
|
Beschreibbar |
Fordert einen Reset an, siehe Handshake. |
|
|
Methode |
Führt einen Reset aus und kehrt zurück, wenn er abgeschlossen ist. |
|
status |
|
Schreibgeschützt |
Der Status der letzten Funktion, siehe Statuscodes. |
|
Schreibgeschützt |
Derselbe Status als Text. |
|
input |
|
Beschreibbar |
Das |
|
Beschreibbar |
Das |
|
|
Beschreibbar |
Das |
|
|
Beschreibbar |
Das |
|
output |
|
Schreibgeschützt |
Die 3D-Koordinaten des Punkts auf |
|
Schreibgeschützt |
Das |
|
|
Schreibgeschützt |
Das |
|
|
Schreibgeschützt |
Das |
|
|
Schreibgeschützt |
Wann der letzte Transform abgeschlossen wurde, in ganzen Sekunden, nach der Uhr des Geräts. |
|
|
Schreibgeschützt |
Die Millisekunden dieser Zeit, 0 bis 999. |
|
|
Schreibgeschützt |
Die Mikrosekunden dieser Zeit, 0 bis 999. |
|
|
Schreibgeschützt |
Zählt die abgeschlossenen Transforms, beginnend bei |
|
|
Schreibgeschützt |
Der Modulname. |
|
stream |
|
Auf jedem Modul; ohne Abschnitt |
Die Anwendung selbst meldet unter hdvisionsystems/lumiscan-calibration/system/:
-
found-modules: die Namen der Module, die sie bedient. -
status-text:"Initialized", sobald sie ihre Module bedient, oder warum sie keine bedient. -
meta/subscription-schema: was der Knoten, den der Stream eines Moduls abonniert, enthalten darf, als JSON Schema. Siehe Was eine Quelle enthalten darf.
Punkte transformieren
Ein transform rechnet den Punkt auf input/x-coordinate und input/y-coordinate und jeden
Punkt aus input/x-coordinate-array und input/y-coordinate-array um. Lassen Sie die Arrays leer, um
nur einen Punkt umzurechnen.
-
Schreiben Sie die Eingaben.
-
Starten Sie den Transform mit dem Handshake oder mit
control/transform/execute. -
Wenn er abgeschlossen ist, lesen Sie die Ausgaben.
output/package-identifierist um eins gestiegen.
Gut zu wissen:
-
control/transform/readyistfalse, solange das Modul keine Lookup-Tabelle hat. Korrigieren Sie die Modul-Konfigurationsdatei oder die TIFF-Datei, und setzen Sie dann das Modul zurück. -
Sind die beiden Eingabe-Arrays unterschiedlich lang, ist der Status
-10001(inputXYSizeNotEqual). Der einzelne Punkt wird umgerechnet, aber die Ausgabe-Arrays, der Zeitstempel undoutput/package-identifierwerden nicht geschrieben. -
Ein Punkt außerhalb der Lookup-Tabelle wird nicht als Fehler gemeldet: Das Ergebnis ist ein Wert vom Rand der Tabelle. Halten Sie die Punkte innerhalb des Bildes, für das die Tabelle erstellt wurde.
Die Einstellungen neu laden
Ein reset liest die Modul-Konfigurationsdatei und die darin genannte TIFF-Datei erneut ein, und der nächste
Transform verwendet sie. Ein Neustart der Anwendung ist nicht nötig. Der Reset liest auch den Abschnitt stream
erneut ein, einschließlich Quelle und Stream-Modus, und setzt control/subscribe/input/… darauf.
-
Gelingt der Reset, ist der Status
0undcontrol/transform/readyisttrue. -
Schlägt er fehl, zum Beispiel weil die TIFF-Datei fehlt, ist der Status
-2(invalidSetting), und das Modul hat keine Lookup-Tabelle:control/transform/readybleibtfalse, bis ein Reset gelingt. Das Protokoll nennt den Grund. Das Modul rechnet nicht mit der alten Tabelle weiter, damit eine korrigierte Datei nie mit einer veralteten vermischt wird. -
Ein geänderter Abschnitt
streamwird mit dem Reset angewendet, siehe Einen Stream konfigurieren. -
Das Laden der Beispieltabelle dauerte auf einem PC etwa 30 ms. Eine größere Tabelle oder ein ctrlX CORE können länger brauchen.
Execute-Methoden
control/transform/execute und control/reset/execute führen ihre Funktion einmal aus und kehren zurück, wenn sie
abgeschlossen ist. Schreiben Sie einen beliebigen Wert darauf. Die Funktion verwendet dieselben Eingaben und schreibt dieselben Ausgaben
und denselben Status wie der Handshake.
Ob die Funktion überhaupt gestartet werden konnte, meldet der Schreibzugriff selbst. Ein abgelehnter Schreibzugriff wird nie in eine Warteschlange gestellt. Die Ergebnisse sind unten so benannt wie auf dem ctrlX Data Layer; LumiScan Keryx meldet dieselben Ergebnisse unter eigenen Namen, siehe Ergebnisse eines Methodenaufrufs:
| Ergebnis | Bedeutung | Was zu tun ist |
|---|---|---|
OK |
Die Funktion wurde ausgeführt. Ihr Ausgang steht auf |
Lesen Sie den Status und die Ausgaben. |
|
Ein anderer Transform oder Reset dieses Moduls läuft, über den Handshake oder ein anderes |
Wiederholen Sie den Aufruf. Derselbe Schreibzugriff gelingt, sobald die laufende Funktion abgeschlossen ist. |
|
|
Wiederholen Sie nicht in einer Schleife. Beheben Sie zuerst die Ursache: Bei fehlender Tabelle korrigieren Sie die Dateien und setzen das Modul zurück. |
|
Die Anwendung wird beendet. |
Warten Sie, bis die Anwendung wieder gestartet ist. |
Ein laufender Stream macht ein execute nie belegt.
Statuscodes
control/status/code und control/status/text melden den Ausgang der letzten Funktion. Ein Fehlerstatus
bleibt bis zum nächsten Request stehen: Ein Modul, das auf seinen nächsten Request wartet, überschreibt ihn nicht
mit 0. Die Codes 0 bis -5 sind die Modul-Statuscodes, die alle LumiScan-Anwendungen teilen,
siehe Statuscodes und Ergebnisse; -10001 ist
der eigene Code von LumiScan Calibration.
| Statuscode | String | Bedeutung |
|---|---|---|
0 |
|
Die letzte Funktion wurde erfolgreich abgeschlossen, und das Modul ist bereit für die nächste. |
1 |
|
Das Modul wird initialisiert. |
2 |
|
Eine Funktion läuft. |
3 |
|
Das Modul wartet darauf, dass der Client |
-1 |
|
Ein nicht näher bestimmter Fehler ist aufgetreten. |
-2 |
|
Die Modul-Konfigurationsdatei oder ihre TIFF-Datei konnte nicht geladen werden, sodass das Modul keine Lookup-Tabelle hat. Korrigieren Sie sie, und setzen Sie dann das Modul zurück. |
-3 |
|
Ein oder mehrere Eingabewerte sind ungültig. |
-4 |
|
Die erforderliche Lizenz ist nicht verfügbar. |
-5 |
|
Die Einstellungsdateien wurden auf dem Data Layer geändert: Starten Sie die Anwendung neu. Siehe Einstellungen auf dem Data Layer. |
-10001 |
|
|