User Tools

Site Tools


de:doc:lua_tutorial

Differences

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

Link to this comparison view

de:doc:lua_tutorial [2014/03/29 03:18] (current)
admin created
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