Codebeispiel (Minimal) - LUA & Python

<< Click to Display Table of Contents >>

Navigation:  Komponenten > Steuerung, Logik & Zeit > Script IDE (LUA / Python) >

Codebeispiel (Minimal) - LUA & Python

Diese Beispiele zeigen die korrekte Verwendung der Script IDE inklusive Debug-Ausgabe über #DEBUG# sowie die Verarbeitung von Kanal-Arrays.
 
Annahme im Kanaleditor:
- Eingänge: Input[0] … Input[7]
- Ausgänge: Output[0] … Output[3]

Beispiel-Logik

Die ersten vier Eingänge werden auf die vier Ausgänge abgebildet. Zusätzlich wird die Summe von Input[0]…Input[3] gebildet und in Output[0] geschrieben. Debug-Ausgaben werden über #DEBUG# ausgegeben.

LUA – ScriptFunc()

Hinweise:
- EisBaer-Kanalarrays sind 0-basiert.
- Input_count / Output_count stehen automatisch zur Verfügung.
- Debug-Ausgabe erfolgt über eisbaerComponent:SetOutputSpFromLua("#DEBUG#", text).
 

function ScriptFunc()
 
   -- Debug: Start
   eisbaerComponent:SetOutputSpFromLua("#DEBUG#", "LUA: Script start")
 
   -- Plausibilisierung (mind. 4 Eingänge & 4 Ausgänge)
   if Input_count < 4 or Output_count < 4 then
       ScriptFehler = 1
       Diagnose = "Fehler: Input_count/Output_count zu klein"
       eisbaerComponent:SetOutputSpFromLua("#DEBUG#", "LUA: ERROR - count too small")
       return
   end
 
   ScriptFehler = 0
   Diagnose = ""
 
   sum = 0
   for i = 0, 3 do
       -- aktueller Wert (optional explizit lesen)
       currentValue = eisbaerComponent:ReadInputSpFromLua("Input", i)
 
       if currentValue == nil then
           ScriptFehler = 1
           Diagnose = "Fehler: Input[" .. tostring(i) .. "] ist nil"
           eisbaerComponent:SetOutputSpFromLua("#DEBUG#", "LUA: ERROR - Input[" .. tostring(i) .. "] nil")
           return
       end
 
       sum = sum + currentValue
 
       -- Standard-Ausgang setzen (über Kanalnamen)
       Output[i] = currentValue
   end
 
   -- Beispiel: Output[0] enthält die Summe
   Output[0] = sum
   Diagnose = "OK: Summe(Input0..3)=" .. tostring(sum)
   eisbaerComponent:SetOutputSpFromLua("#DEBUG#", "LUA: OK - sum=" .. tostring(sum))
 
end
 

Python – ScriptFunc()

Hinweise:
- EisBaer-Kanalarrays sind 0-basiert.
- Debug-Ausgabe erfolgt über Eisbaer_SetOutputSp("#DEBUG#", text, True).

def ScriptFunc():
   global Input, Output, Input_count, Output_count, ScriptFehler, Diagnose
 
   # Debug: Start
   Eisbaer_SetOutputSp("#DEBUG#", "PY: Script start", True)
 
   if Input_count < 4 or Output_count < 4:
       ScriptFehler = 1
       Diagnose = "Fehler: Input_count/Output_count zu klein"
       Eisbaer_SetOutputSp("#DEBUG#", "PY: ERROR - count too small", True)
       return
 
   ScriptFehler = 0
   Diagnose = ""
 
   s = 0
   for i in range(4):
       # aktueller Wert (optional explizit lesen)
       currentValue = Eisbaer_ReadInputSp("Input", i)
 
       if currentValue is None:
           ScriptFehler = 1
           Diagnose = f"Fehler: Input[{i}] ist None"
           Eisbaer_SetOutputSp("#DEBUG#", f"PY: ERROR - Input[{i}] None", True)
           return
 
       s += currentValue
       Output[i] = currentValue
 
   Output[0] = s
   Diagnose = f"OK: Summe(Input0..3)={s}"
   Eisbaer_SetOutputSp("#DEBUG#", f"PY: OK - sum={s}", True)
 

Kurz-Hinweise

- Für dauerhafte Debug-Ausgaben #DEBUG_VERBOSE# verwenden.
- Diagnose sparsam einsetzen (Performance).
- Bei vielen Triggern: Prozessierungsverzögerung + Trigger-Pufferung aktivieren.