User Tools

Site Tools


de:doc:lua_tutorial
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


de:doc:lua_tutorial [2014/03/29 03:18] (current) – created admin
Line 1: Line 1:
 +====== Die OOBD Lua Anleitung ======
  
 +Während die [[lua_start|Lua Skripte in OOBD]] Seite Dir Basiskenntnisse über die Funktionsweise von Lua innerhalb von OOBD vermittelt, will diese Anleitung Dir zeigen, wie Du Lua benutzen kannst, um Deine eigenen Ideen zu realisieren.
 +
 +In dieser Anleitung werden wir die Vehikelidentifikationsnummer (VIN) aus einem Fahrzeug auslesen. Während wir das Vorhaben umsetzen, werden wir ein Menü erstellen, die Hardware identifizieren, die OOBD Lua Funktionsbibliothek nutzen, die Kommunikation mit dem Fahrzeug aufnehmen und das Ergebnis anzeigen. 
 +
 +Zunächst brauchen wir ein Menü, auf dem Gerät das wir benutzen, um in der Lage zu sein das hier alles zu starten. Wir machen dies mit der folgenden Kodesequenz
 +
 +
 +<code lua>
 +function Start(oldvalue,id)
 + identifyOOBDInterface()
 + openPage("VIN Test")
 + addElement("VIN Number", "vin","-",0x2, "")
 + pageDone()
 + return oldvalue
 +end
 + 
 + 
 +----------------- Stelle die Anfangsbedingungen ein --------------
 + 
 +Start("","")
 +return
 +</code>
 +
 +Nun, was passiert hier? Wenn der Lua Interpretierer sich durch das Skript arbeitet, findet er das 
 +
 +   Start("","")
 +   
 +Kommando an dessen Ende. Dies ist eine der Namenskonventionen in OOBD: Die Funktion welches alles initialisiert, muss "Start" genannt werden.;-)
 +
 +Wenn wir nun in die //Start// Funktion schauen, finden wir
 +
 +  identifyOOBDInterface()
 +  
 +Das ist eine Funktion aus der serial_dxm.lua Support Bibliothek. In dieser findest Du nützliche Funktionen, die mehr oder weniger in allen OOBD Skripts verwendet werden. Wir werden diese in eine gemeinsame Datei speichern.
 +
 +//identifyOOBDInterface// findet heraus, welcher CAN-Invader verbunden ist, um zukünftige Kommandos innerhalb der Bibliothek hardwareunabhängiger zu machen.
 +
 +
 +Die Kommandosequenz //openPage("VIN Test")//, //addElement("VIN Number", "vin","-",0x2, "")// und //pageDone()// erstellt und zeigt ein einzigen Menüeintrag "VIN Nummer". Das //addElement()// Kommando weist einer Lua Funktion //vin// diesen Menüeintrag zu:
 +
 +
 +<code lua>
 +function vin(oldvalue,id)
 + echoWrite("0902\r")
 + udsLen=receive()
 + if udsLen>0 then
 + if udsBuffer[1]==73 then
 + local pos=4
 + local res=""
 + while pos <= udsLen and pos < 36 do
 + if udsBuffer[pos]>31 then
 + res=res..string.char(udsBuffer[pos])
 + end
 + pos= pos +1
 + end
 + return res
 + else
 + return "Error"
 + end
 + else
 + return "NO DATA"
 + end
 +end
 +</code>
 +
 +Diese Funktion wird aufgerufen, wenn der Benutzer den Menüeintrag "VIN Number" auswählt. Innerhalb dieser Funktion, sendet zuerst
 +
 +  echoWrite("0902\r")
 +
 +den Text "0902" als hexadezimales Zeichenfeld zum CAN-Invader, welches das OBD Standard Kommando ist um die Vehikelidentifikationsnummer (VIN) von einem Fahrzeug anzufordern. Der CAN-Invader selbst leitet diese Datensequenz als binäres Telegramm weiter auf den Diagnosebus (CAN) und wartet auf eine Antwort vom dem Steuergerät.
 +
 +Das Kommando
 +
 +  udsLen=receive()
 +  
 +nimmt die Antwort des Moduls auf welche der CAN-Invader empfängt. Wenn //udsLen// größer als 0 ist, bedeutet das das etwas empfangen worden ist. Die empfangenen Bytes werden in dem Datenfeld //udsBuffer[]// abgespeichert.
 +
 +Weil wir einen ASCII VIN Zeichensatz in den empfangenen Daten erwarten, arbeiten wir den Empfangspuffer //udsBuffer[]// durch und speichern alle gefundenen Bytes, als ASCII Werte in dem Datenfeld //res//. Dieses Datenfeld //res// wird dann mit 
 +
 +  return res
 +
 +zurückgegeben an die aufrufende Funktion.
 +
 +
 +Dies ist noch wichtig für Dich: Alle Lua Funktionen, welche von einem Menüeintrag aufgerufen werden, müssen ein Zeichenfeld zurückgeben, welches dann als aktueller Wert im Menü angezeigt wird. So repräsentiert dies, das Ergebnis des Aufrufs durch den Benutzer.
 + 
 +Und das ist schon die ganze Magie.... Basierend auf diesem Schema können alle Funktionalitäten in OOBD mit Lua realisiert werden
 +
 +  * Erzeuge einen Menüeintrag
 +  * Binde eine Funktion an Diesen
 +  * Füge alle gewünschten Anweisungen in diese Funktion
 +  * Gebe das Ergebnis als Datenfeld zurück 
 +  
de/doc/lua_tutorial.txt · Last modified: 2014/03/29 03:18 by admin