der lua skripteditor - atv · script editor time lua script editor lua script editor tcp/ip tcp/ip...
TRANSCRIPT
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Der Lua Skripteditor Lua in der Messtechnik
02.08.2014 Ingo Berg [email protected] Automatisierungstechnik Voigt GmbH
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Lua in der Messtechnik
leichte Weiter-
entwicklung und Wartung
imperative, funktionale
Skript-sprache
kostenfreie Software
großer Funktions-
umfang
Objekt-orientierte Program-mierung
hohe Geschwindig
-keit
einfache Sprache
– leicht
erlernbar
Lua
freie Programmiersprache speziell entwickelt für
eingebettete Systeme von Computer Graphics Technology Group der Päpstlich Katholischen Universität von Rio de Janeiro (Brasilien)
Was ist Lua?
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Lua in der Messtechnik
Lua Script Editor
Lua Script Editor
Lua Script Editor
TCP/IP
TCP/IP
TCP/IP
Run Time Engine
MeasLab Applikation
Keithley 2600; Keithley 3700
Keithley 4200
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Lua in der Messtechnik
Gerätefirmware selbst programmierbar (z.B. leistungsbegrenzter Sweep)
Kein C-Programmieren nötig
Kein Kompilieren mehr nötig
Kommunikation über Kommandozeile
Debugging
Datenvisualisierung
Integrierte graphische Benutzeroberfläche (GUI)
TCP/IP – Steuerbarkeit, Aufruf von Funktionen aus dem Skript
Leichtes Einbinden von externen Geräten
Volle Anwendungsbreite aller 4200-LPT-Commands
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Lua Sprachkonstrukte
• For Schleifen; While Schleifen
-- for Schleifen
for i=1,5 do
print("Hallo welt!")
end
-- While schleifen
local i=0
while i<5 do
print("Hallo welt!")
i=i+1
end
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Lua Sprachkonstrukte
• Funktionen, Verzweigungen und Rekursion
-- Berechnung der Fakultät
function factorial(n)
if n == 0 then
return 1
else
return n * factorial(n - 1)
end
end
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Messablauf
• Anbindung über TCP/IP bzw. GPIB
• Messdaten werden auf dem Gerät in Lua gewonnen und mittels selbstdefinierter Protokolle an den PC übertragen
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Messablauf function kennlinie1(nsteps)
smua.source.func = smua.OUTPUT_DCVOLTS
smua.source.limiti = 0.01
smua.measure.nplc = 0.1
smua.source.output = smua.OUTPUT_ON
vmin = -2 -- Minimalspannung
vmax = 2 -- Maximalspannung
vs = (vmax-vmin)/nsteps
for i=1, nsteps do
smua.source.levelv = vmin + i*vs
print(string.format("%d, %2.2f, %2.2f", i,
smua.source.levelv, math.abs(smu.measure.i())))
end
smua.source.output = smu.OUTPUT_OFF
end
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Messablauf
Aufrufen des Skriptes:
“kennlinie1(10)“
via TCP/IP oder GPIB an das Gerät senden
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Messablauf
Datenübertragung auf Basis von ASCII, wie im Script definiert:
1, -1.60, 0.00
2, -1.20, 0.00
3, -0.80, 0.00
4, -0.40, 0.00
5, 0.00, 0.00
6, 0.40, 0.00
7, 0.80, 0.00
8, 1.20, 0.00
9, 1.60, 0.00
10, 2.00, 0.00
10 Zeilen, Werte durch Komma getrennt. Abruf via TCP/IP oder GPIB
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Fehlerbehandlung
– Fehler werden in der Fehlerqueue gespeichert.
– Diese sollte regelmäßig abgefragt werden.
– Zum Beispiel mit folgendem Lua-Code:
function check_errorqueue()
while errorqueue.count>0 do
local errc, msg, sev, node
errc, msg, sev, node = errorqueue.next()
print("Fehler: "..msg)
end
end
– Das übergeordnete Programm (z.B. Labview, TestPoint) muss die Daten auf Fehlerzeilen prüfen!
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Eingriff in die Ablaufsteuerung
Problem:
Wie greife ich von „außen“ in den Ablauf eines Lua-Skriptes ein?
Bei KEITHLEY Geräten nur indirekt möglich:
- Über eine RS232 Verbindung
- Über Digitalen I/O Kanäle
Bei ATV-Measlab Geräten gibt es eine Kontrollvariable
- Kontrollvariable kann via TCP/IP gesetzt und im Lua-Script abgefragt werden (“*CTRL_VAR 1“)
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Eingriff in die Ablaufsteuerung
function wait_for_start_of_test()
serial.baud = 9600
serial.databits = 8
serial.flowcontrol = serial.FLOW_NONE
serial.parity = serial.PARITY_NONE
local cmd = ""
while (cmd~="start") do
delay(1) -- 1 Sekunde warten
cmd = serial.read(100) -- Daten über RS232 einlesen
end
end
Beispiel 3: „Start of Test“ über die serielle Schnittstelle
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Auswertung von Messdaten
- Daten müssen an den PC Übertragen werden und dort gespeichert werden.
©2011 AutomatisierungsTechnik Voigt GmbH www.atvoigt.de
Kontakt
Haben Sie Fragen?
Kontaktieren Sie uns:
Automatisierungstechnik Voigt GmbH Löbtauer Straße 67 01159 Dresden Tel.: + 49 351 213 86 40 Fax: + 49 351 213 86 50 E-Mail: [email protected]