PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CAN-Botschaft über Wlan an Smartphone



DJ Stylz
22.04.2012, 10:50
Hallo alle zususammen,

ich hatte schon lange vor, mich in diesem Forum anzumelden, und jetzt hab ich einen wichtigen Grund dazu. Ich brauche eure Hilfe. Für meine Semesterarbeit möchste ich entweder ein Modul, oder ein Notebook an ein Auto anschließen, und die CAN-Botschaften, die auf den CAN-Bus liegen per Wlan senden und mit einem Smartphone und selbstprogrammierter App Visualisieren. Ich bin für das Senden der Botschaften zuständig, und anderen Team-Mitglieder beschäftigen sich mit der App-Programmierung.
Programmieren kann ich, also C, C++ und Assembler. Ich würde dieses Projekt gerne in C umsetzten, da wir dieses Semester wieder mit C arbeiten.

Zu meiner Frage: Wie sende ich die CAN-Botschaften (Binäre Signale) am besten per Wlan. Ich suche schon eine Weile im Internet, aber ich finde irgendwie keine Informationen, die mir das richtig erklären:-(
Gibt es ein Modul, also Platine+Microcontroller+WlanAdapter, das ich so programmieren kann, dass gewisse CAN-Botschftaen (Also wenn zB 00100011110011 ankommen) per Wlan rausgeschickt werden? Und was ich auch noch nicht verstehe ist, wie die "Kommunikation" mit dem Smartphone dann funktioniert. Wir dieser binäre Code über Wlan "gemorst" und vom Smartphone dann als "00100011110011" aufgefangen? Ihr seht, ich bin ein wenig ratlos. Wenn ich die passenden Komponenten habe, wurschtel ich mich durch, das ist kein Problem. Aber der Anfang...puhhh...keine Ahnung.

Dieses Thema hat mich schon immer interessiert und ich bin eigentlich froh, dass ich mich damit endlich auseinandersetzten kann/muss und ich hoffe ihr könnt mich darüber ein wenig aufklären^^
Vielen Dank schon mal im Voraus!

Gruß
Danny

TheDarkRose
22.04.2012, 11:11
Du brauchst zusätzlich zum WLAN dann noch einen TCP/IP Stack und ein Protokoll, worin die Daten gepackt werden. Möglicherweiße wäre eine serielle Bluetoothverbindung mit einem BTM222 einfacher

DJ Stylz
22.04.2012, 11:19
Danke für die schnelle Antwort, TheDarkRose^^
Ja, Bluetooth wäre wohl einfacher, aber mein Dozent würde es lieber als Wlan-Variante haben. Ich suche gerade schon hier im Forum alles zum Thema Wlan ab, aber gibt es vielleicht ein kleinen Tutorial zum Thema "uC per Wlan ansteuern"? Also nicht bis ins kleinste Detail beschrieben, aber so eine art Übersicht, welche Bauteile man benötigt, grob wie der Aufabu aussieht und wie die Kommunikation abläuft. Bei dem Thema bin ich leider ein absoluter Anfänger, vor allem was Bauteile betrifft hab ich KEINE Ahnung welches Teil was kann. Danke nochmal.

DJ Stylz
22.04.2012, 12:03
Ich habe gerade bei Youtube nach dem Arduino Uno und WiFly gesucht. Das scheinen ja schon fertige Systeme zu sein, die von der Bedienung auch ziemlich einfach sind. Was haltet ihr davon? Und gibt es ähnliche fertige Systeme von anderen Herstellern?
Sehe ich das richtig, dass ich theoretisch, den CAN-Bus an gewisse Pins der Platine anschließen kann und die Botschaften, die ja aus 0ern und 1ern bestehen, in dem Programm, dass ich auf die Platine geladen habe, abgleichen kann? Also wenn auf dem CAN-Bus grad 001100 gesendet wird, der Bus an der Platine angeschlossen ist, und ich in dem Programm geschrieben habe, dass wenn 001100 ankommt, dieser Code an das Wlan-Modul (über den entsprechenden Pin) weitergegeben wird? Jetzt ist noch die Frage, ob das Wlan-Modul einfach senden kann, also ohne Router dass quasi das Smartphone die "rumfliegende" Botschaft aufgreift und weiterverarbeiten kann, oder ob beide "geräte" in einem geschlossenen Netzwerk sein müssen? Und wie sieht es mit der Taktung der fertigen Platinen aus? Kann man diese durch einsetzten von anderen uC ändern?
Sorry, dass ich so viele Fragen habe, aber das ist absolutes Neuland für mich.

TheDarkRose
22.04.2012, 13:05
Nein nein nein, du solltest dich mit den einzelnen Aufgabengebieten einzeln beschäftigen.

CAN: Controller Area Network ist ein symmetrischer Bus, den kann man nicht einfach an einen Pin des Controllers anschließen, dazu benötigt es einen Wandler-Chip. Wenn man nach CAN-Spezifikation geht, muss dieser auch noch eine galvanische Trennung vorweißen, was im Einsatzgebiet Auto sogar anzuraten wäre. CAN-Botschaften sind nicht nur 001100, sondern weißen auch ein Protokoll auf. Dieses solltest du dir auch zur Gemüte führen.
WLAN: Es wird ein eigenes WLAN Modul benötigt. Je nach Modul hast du schon mehr oder weniger vom Netzwerk-Stack vorhanden. Die meisten die ich bis jetzt gesehen habe, haben alle TCP/IP vorhanden, du musst nur mehr ein passendes Protokoll zur Kommunikation verwenden. Habe aber noch keines gesehen, das Ad-Hoc Verbindungen aufbauen kann, aber Android kann sowieso kein Ad-Hoc. Ergo du benötigst einen Access Point. Darum auch der Vorschlag mit Bluetooth, da hier kein AP benötigt wird.
Elektronik & µC: Die meisten dieser Chips werden über eine serielle Schnittstelle wie SPI untereinander kommunizieren und nicht einfach nur über "einen Pin", du musst dich dann mit den Kommunikationsprotokollen der jeweiligen Chips beschäftigen. Die Geschwindigkeit des µC wird durch den Quarz gesteuert, in diesem Fall, desto schneller, desto besser, da am CAN doch sehr viele Daten herumfliegen werden...

Mxt
22.04.2012, 13:27
Hallo,

ich denke auch, dass du das Thema auf viel zu niedriger Ebene angehst. Du kannst nicht, wenn ein Bit über CAN ankommt, ein Bit über WLAN senden.

Von deinem CAN-Interface bekommst du in der Regel komplette empfangene CAN-Botschaften. Die bestehen aus der Message-ID und bis zu acht zusätzlichen Datenbytes.

In Richtung WLAN musst du diese Daten nun mit einem geeigneten Protokoll weitersenden. Dazu eignen sich z.B. TCP/IP oder UDP.

Appropos Protokoll, wenn man mit einem Auto z.B. über einen Diagnosestecker kommuniziert, macht man das in der Regel nicht über einzelne CAN-Botschaften, sondern da wird auch ein Protoll verwendet, dort aber in der Regel nicht TCP, sondern das sogenannte ISO Transportprotokoll.
http://de.wikipedia.org/wiki/ISO_15765-2
Darüber werden dann wieder Sachen wie UDS abgewickel:
http://de.wikipedia.org/wiki/Unified_Diagnostic_Services
Aber das nur nebenbei.


Was die Hardware angeht, kann man das mit einem Mikrocontroller mit CAN- und WLAN-Schnittstelle machen, es geht aber auch mit einem normalen Laptop und USB-CAN-Interfaces, wie z.B.
http://www.peak-system.com/Produktliste.32+M5cb5bb287db.0.html?&tx_commerce_pi1[catUid]=6
http://www.vector.com/vi_vn1600_de.html
Das wäre der Weg, den man für PC-basierte Diagnosesysteme gehen würde.

Mit den C/C++ Bibliotheken dieser Interfaces und etwas Netzwerkprogrammierung lässt sich so eine Aufgabe mit relativ wenig Programmieraufwand lösen.

DJ Stylz
22.04.2012, 14:31
Danke euch beiden!
Wie das mit den CAN-Botschaften läuft, das weiß ich, aber ich habe das wohl echt zu leicht gesehen:-(
Vielleicht werde ich meinem Dozenten doch raten, Bluetooth zu nehmen. Ist es denn bei Bluetooth so, dass man die Signale "morst"?

Ich hatte gehofft, da es von Arduino auch auch ein CAN-Shield gibt, dieses zusätzlich mit einem XBee oder WiFly-Shield auf die Arduino-Uno Platine aufzustecken und über den Code der Module die Signale vom CAN "herausfischen" zu können und sie dann über Wlan zu senden. Es ist echt hart, wenn man sich zwar mit programmieren auskennt, aber keine Ahnung hat, wie man das praktisch umsetzten soll. Vor allem ohne irgendeine Hilfestellung der Hochschule.

Die CAN-Botschaften mit dem PC aufgreifen wäre auch eine Möglichkeit, die meinem Dozenten gefallen würde. Mit CANoe kenne ich mich aus, nur wüsste ich dann wieder nicht, wie ich die gewünschten Signale/Botschaften per Wlan versenden kann. Hat dazu schon jemand einen Beitrag verfasst, in dem so etwas gut erklärt wird?

Danke euch beiden nochmal^^

Mxt
22.04.2012, 15:01
Ist es denn bei Bluetooth so, dass man die Signale "morst"?


Bluetooth hat, meines Wissens nach, verschiedene Profile. Eines davon ist die Emulation einer seriellen Schnittstelle. Die arbeitet Byteweise aber nicht Bitweise. Ein einfaches Weiterleiten der Bits wird da eher nicht funktionieren, schon weil du ja sicher noch irgendwelchen Handshake mit der Smartphone Andwendung machen musst.


Wenn du CANoe kennst und Zugriff auf entsprechende Hardware von Vector hast, dann gibt es da die vxlapi Bibliothek. Die liefert dir in einem PC Programm einen Event für jede empfangene CAN-Message. Diese Software kann man bei Vector kostenlos herunterladen, außerdem bietet sie virtuelle CAN-Kanäle, man kann seine Software erstmal ohne CAN-Hardware (und Auto ;-) ) entwickeln.
http://www.vector.com/vi_xl_driver_library_en.html

Der Rest wäre dann nur noch Daten von einem Laptop-Programm zu einem Smartphone Programm zu übertragen. Dafür gibt es aber viele Wege, z.B. UDP, TCP, ein Webservice, ein Webserver auf dem Laptop, alles mögliche. Typische Programmierung im PC/Smartphone-Bereich ...

DJ Stylz
23.04.2012, 17:20
Also, ich habe noch nicht mit meinem Dozenten gesprochen, aber ich denke, ich werde es über Bluetooth versuchen. Kennt ihr euch mit den Shields von Arduino aus? Es gibt das CAN-Bus-Shield und das Bluetooth-Shield. Lässt sich mein Vorhaben damit + dem Arduino UNO "leichter" realisieren? Ich weiß halt leider überhaupt nicht, was das CAN-Shield kann und was nicht.

Ich würde es gerne so umsetzten: Dem CAN-Shield sage ich "wenn 110011 auf dem Bus liegt, nehme diese Botschaft und leite sie an das UNO weiter", dem UNO sage ich "Dass, was du vom CAN-Shield bekommst, gibst du an das Bluetooth-Shield weiter" und das Bluetooth-Shield schickt die Botschaft (von mir aus auch nicht Bitweise) raus, so dass das Smartphone diese Botschaft aufgreifen kann.

Mittlerweile habe ich mitbekommen, dass es einen solchen OBD2-to-Bluetooth-Adapter mit dazugehöriger App gibt, aber wir sollen es ja selber "entwickeln". Aber so in der Art würde ich es gerne machen. Ist das mit den Arduino-Platinen machbar ("leicht")? Danke nochmal^^

TheDarkRose
23.04.2012, 17:40
Nicht wenn 001100 am Bus anliegt, sondern wenn am CAN-Bus "gewünschte" Message verschickt wurde, leite diese über Bluetooth weiter. Beschäftige dich bitte mal mit dem CAN-Protokoll!

Mxt
23.04.2012, 18:50
Außerdem verwendet OBD das oben genannte ISO-TP. Man wird also eine Übertragung in beide Richtungen brauchen.