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, | ||
+ | |||
+ | 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, | ||
+ | identifyOOBDInterface() | ||
+ | openPage(" | ||
+ | addElement(" | ||
+ | pageDone() | ||
+ | return oldvalue | ||
+ | end | ||
+ | |||
+ | |||
+ | ----------------- Stelle die Anfangsbedingungen ein -------------- | ||
+ | |||
+ | Start("","" | ||
+ | return | ||
+ | </ | ||
+ | |||
+ | Nun, was passiert hier? Wenn der Lua Interpretierer sich durch das Skript arbeitet, findet er das | ||
+ | |||
+ | | ||
+ | |||
+ | Kommando an dessen Ende. Dies ist eine der Namenskonventionen in OOBD: Die Funktion welches alles initialisiert, | ||
+ | |||
+ | 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. | ||
+ | |||
+ | // | ||
+ | |||
+ | |||
+ | Die Kommandosequenz // | ||
+ | |||
+ | |||
+ | <code lua> | ||
+ | function vin(oldvalue, | ||
+ | echoWrite(" | ||
+ | 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]> | ||
+ | res=res..string.char(udsBuffer[pos]) | ||
+ | end | ||
+ | pos= pos +1 | ||
+ | end | ||
+ | return res | ||
+ | else | ||
+ | return " | ||
+ | end | ||
+ | else | ||
+ | return "NO DATA" | ||
+ | end | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | Diese Funktion wird aufgerufen, wenn der Benutzer den Menüeintrag "VIN Number" | ||
+ | |||
+ | echoWrite(" | ||
+ | |||
+ | den Text " | ||
+ | |||
+ | 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 // | ||
+ | |||
+ | Weil wir einen ASCII VIN Zeichensatz in den empfangenen Daten erwarten, arbeiten wir den Empfangspuffer // | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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