VISION & ROBOTIK / RUNTIME-APP
LumiScan
Script Runner
Ihr HALCON-Know-how. Verbunden mit LumiScan.
LumiScan Script Runner führt Ihre eigenen MVTec-HALCON-Prozeduren in LumiScan Keryx aus – mit derselben Anbindung an Kameras, SPS und Roboter wie jede andere LumiScan-App.
Für die Vision-Aufgaben, die nur Sie kennen.
Die Apps der LumiScan Vision Suite lösen Standardaufgaben ohne Vision-Know-how. Script Runner ist für das andere Ende: HALCON-Experten, die für ihre schwierigsten Fälle die volle Kontrolle brauchen. Beides läuft nebeneinander in Keryx.
Know-how weiterverwenden
Bestehende HDevelop-Prozeduren laufen unverändert, sobald sie dem Script-Vertrag folgen. Sie schreiben weiter in HALCON – Script Runner übernimmt Anbindung, Handshake und Betrieb.
Einheitlich integrieren
SPS, Roboter, Cockpit und andere LumiScan-Apps sehen Ihr Skript wie jede andere LumiScan-App: gleiche Keryx-Knoten, gleiche Datentypen, gleicher Trigger-Handshake.
Robust im Betrieb
Jedes Skript läuft in einem eigenen Worker-Prozess mit Watchdog. Ein fehlerhaftes Skript meldet einen Fehler und wird neu gestartet – Keryx und die übrigen Apps laufen weiter.
So funktioniert es
Von HDevelop in die Produktion.
Schreiben
Die Prozedur lumiscan_process in HDevelop schreiben oder eine bestehende anpassen: eine Bild- und eine Werteliste hinein, eine Bild- und eine Werteliste heraus.
Hochladen
Prozedur als .hdvp oder aus einer .hdpl-Bibliothek hochladen. Script Runner prüft Name, Parameter und HALCON-Klassen vor der Aktivierung und behält die vorherige Version für den Rollback.
Ausführen
Bei jedem Trigger führt HDevEngine die Prozedur JIT-kompiliert aus. Ergebnisse, Zykluszeit und Status stehen sofort in Keryx bereit.
Der Script-Vertrag.
Eine feste Schnittstelle für jedes Skript. Damit braucht keine Prozedur eigenen Integrationscode.
procedure lumiscan_process (Images : ImagesOut : Values : ValuesOut) | Parameter | HALCON-Klasse | Richtung | Inhalt |
|---|---|---|---|
Images | Iconic-Objekt-Tupel | Eingang | 0…n Bilder in der Reihenfolge der Keryx-Eingangsliste |
Values | Control-Tupel | Eingang | 0…n Werte (integer, real, string) |
ImagesOut | Iconic-Objekt-Tupel | Ausgang | 0…n Ergebnisbilder, z. B. Masken, Overlays, entzerrte Bilder |
ValuesOut | Control-Tupel | Ausgang | 0…n Ergebniswerte, z. B. Maße, OK/NOK, Anzahlen, Texte |
- Der Name der Einstiegsprozedur ist fest; Hilfsprozeduren aus derselben Bibliothek dürfen beliebig heißen.
- Alle vier Parameter müssen vorhanden sein, auch wenn sie nicht genutzt werden. Eine leere Liste ist gültig.
- Die Bedeutung jeder Wertposition legen Sie als Autor des Skripts fest.
- Ergebnisbilder sind HALCON-Bilder; Regionen und XLDs im Skript umwandeln, z. B. mit region_to_bin oder paint_region.
- Keine globalen Variablen, kein Dateizugriff auf feste Pfade; dev_*-Operatoren werden zur Laufzeit ignoriert.
- Fehler werfen Sie als normale HALCON-Exception – Script Runner meldet sie mit Prozedur und Zeile in Keryx.
procedure lumiscan_process (Images : ImagesOut : Values : ValuesOut)
* Values[0] = minimale Fläche, Values[1] = maximale Fläche
gen_empty_obj (ImagesOut)
ValuesOut := []
count_obj (Images, NumImages)
for I := 1 to NumImages by 1
select_obj (Images, Image, I)
threshold (Image, Region, 128, 255)
connection (Region, Parts)
select_shape (Parts, Selected, 'area', 'and', Values[0], Values[1])
count_obj (Selected, NumParts)
ValuesOut := [ValuesOut, NumParts]
get_image_size (Image, Width, Height)
region_to_bin (Selected, Mask, 255, 0, Width, Height)
concat_obj (ImagesOut, Mask, ImagesOut)
endfor
return () Die Keryx-Schnittstelle.
Jede Script-Runner-Instanz erhält einen eigenen Teilbaum in LumiScan Keryx. Mehrere Instanzen mit unterschiedlichen Skripten laufen parallel.
lumiscan/scriptrunner/<instance>/ | Knoten | Typ | Zugriff | Bedeutung |
|---|---|---|---|
config/script | string | lesen/schreiben | Aktives Skript (Bibliothek + Version) |
config/timeout_ms | int32 | lesen/schreiben | Maximale Ausführungszeit pro Aufruf |
input/image_refs | array of string | lesen/schreiben | Knotenpfade der Quellbilder, z. B. Bildknoten von LumiScan Cam Driver |
input/images | array of image | lesen/schreiben | Alternativ: Bilder direkt schreiben |
input/values | array of variant | lesen/schreiben | Eingangswerte in Vertragsreihenfolge |
output/images | array of image | lesen | Ergebnisbilder in Vertragsreihenfolge |
output/values | array of variant | lesen | Ergebniswerte in Vertragsreihenfolge |
control/trigger | bool | lesen/schreiben | Startet einen Zyklus |
control/done | bool | lesen | Zyklus beendet, Ausgänge gültig |
status/state | int32 | lesen | 0 Bereit · 1 Läuft · 2 Fertig · 3 Fehler · 4 Nicht bereit |
status/error_code | int32 | lesen | Fehlercode (siehe unten) |
status/error_text | string | lesen | HALCON-Fehlermeldung mit Prozedur und Zeile |
status/cycle_time_ms | double | lesen | Ausführungszeit des letzten Aufrufs |
status/cycle_counter | int64 | lesen | Anzahl abgeschlossener Aufrufe |
status/script_version | string | lesen | Version und Hash des geladenen Skripts |
Handshake
- SPS oder Client schreibt input/* und setzt control/trigger.
- Script Runner setzt status/state auf „Läuft“ und ruft lumiscan_process mit Bildern und Werten auf.
- Script Runner schreibt output/* und status/* vollständig, dann control/done = true und den Status „Fertig“ oder „Fehler“.
- SPS liest output/* und setzt control/trigger zurück.
- Script Runner setzt control/done = false und den Status „Bereit“ – der nächste Zyklus kann starten.
Datentypen
| Keryx | HALCON | Zurück nach Keryx |
|---|---|---|
| bool | integer 0 / 1 | integer |
| int32, int64 | integer | int64 |
| float, double | real | double |
| string | string | string |
| image (Mono 8/16 Bit, RGB 8 Bit) | image (byte / uint2 / 3-Kanal byte) | image desselben Typs |
Fehlercodes
| Code | Bedeutung | Verhalten |
|---|---|---|
| 0 | OK | – |
| 1 | HALCON-Exception im Skript | Ausgänge leer, Fehlertext gesetzt, bereit für den nächsten Trigger |
| 2 | Zeitlimit überschritten | Worker wird neu gestartet, Skript neu geladen |
| 3 | Kein gültiges Skript oder Vertrag verletzt | Nicht bereit, bis ein gültiges Skript aktiviert ist |
| 4 | Eingangsfehler (fehlende Bildreferenz, nicht unterstützter Typ) | Skript wird nicht aufgerufen |
| 5 | Worker abgestürzt | Worker wird neu gestartet, Skript neu geladen |
| 6 | Lizenzfehler (LumiScan oder HALCON-Runtime) | Nicht bereit |
Auf einen Blick.
Plattformen, Anbindung und Lizenzierung.
- Ausführung
- Eine HALCON-Prozedur (.hdvp oder aus einer .hdpl-Bibliothek) pro Instanz, JIT-kompiliert über HDevEngine bei jedem Trigger.
- Instanzen
- Mehrere Instanzen parallel, jede mit eigenem Skript und eigenem Keryx-Teilbaum.
- Plattformen
- Windows 11 und Ubuntu 24.04 mit LumiScan Keryx. ctrlX OS ist in Vorbereitung – mit gleicher Knotenstruktur und gleichem Handshake über den ctrlX Data Layer.
- Anbindung
- Bild- und Wertelisten über Keryx; Bilder direkt aus LumiScan Cam Driver, Status in LumiScan Cockpit, SPS- und Roboteranbindung wie bei allen LumiScan-Apps.
- Know-how-Schutz
- Passwortgeschützte HALCON-Prozeduren laufen, ohne ihren Quellcode offenzulegen.
- Betrieb
- Isolierter Worker-Prozess, einstellbares Zeitlimit, Versionierung mit Rollback, Zykluszeit- und Fehlerzähler, strukturiertes Protokoll.
- Lizenzierung
- LumiScan Key (CodeMeter). Jede Installation wird mit der vollständigen MVTec-HALCON-Runtime-Lizenz ausgeliefert.
HALCON und HDevelop sind Marken der MVTec Software GmbH.
Häufige Fragen
Welche HALCON-Prozeduren kann Script Runner ausführen?
Jede Prozedur, die dem Script-Vertrag lumiscan_process(Images : ImagesOut : Values : ValuesOut) folgt, gespeichert als .hdvp oder in einer .hdpl-Bibliothek. Hilfsprozeduren aus derselben Bibliothek dürfen aufgerufen werden.
Brauchen wir eine eigene HALCON-Lizenz?
Nein. Jede Installation wird mit der vollständigen MVTec-HALCON-Runtime-Lizenz ausgeliefert; Script Runner selbst wird über den LumiScan Key lizenziert.
Können wir unser Know-how schützen?
Ja. Passwortgeschützte HALCON-Prozeduren laufen, ohne ihren Quellcode offenzulegen.
Was passiert, wenn ein Skript fehlschlägt?
Jedes Skript läuft in einem eigenen Worker-Prozess. Eine HALCON-Exception wird mit Prozedur und Zeile in Keryx gemeldet; bei Zeitüberschreitung oder Absturz startet der Worker neu und lädt das Skript erneut, während Keryx und die übrigen Apps weiterlaufen.
Welche Plattformen werden unterstützt?
Windows 11 und Ubuntu 24.04 mit LumiScan Keryx. ctrlX OS ist in Vorbereitung – mit gleicher Knotenstruktur und gleichem Handshake.
Sie arbeiten bereits mit HALCON?
Nennen Sie uns Ihre Anwendung, die Anzahl der Instanzen und Ihre Zielplattform – wir senden Ihnen ein Angebot.