de:doc:lua:tutorial
Differences
This shows you the differences between two versions of the page.
de:doc:lua:tutorial [2013/11/24 20:14] – created wsauer | de:doc:lua:tutorial [2014/03/29 03:18] (current) – removed admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Die OOBD Lua Anleitung ====== | ||
- | Während die [[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.1385320493.txt.gz · Last modified: 2013/11/24 20:14 (external edit)