LabVIEWForum.de - Datenerfassung von zwei CAN-Bussen - wie?

LabVIEWForum.de

Normale Version: Datenerfassung von zwei CAN-Bussen - wie?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,
ich messe 2 CAN-Bus Kanäle mit LabVIEW. Zum messen verwende ich eine spezielle CAN PCMCIA Karte mit 2 Kanälen. In LabVIEW verwende ich eine dll vom Kartenhersteller.
Nun bekomme ich sehr viele CAN Botschaften auf beiden Kanälen und muss diese vergleichen/analysieren.
Um die Botschaften zu bekommne, muss ich die dll in einer while Schleife zyklisch aufrufen.
Mein Problem ist nun das Speichern und Analysieren der Daten. Wie kann ich eine online-Auswertung machen ohne Geschwindigkeitsprobleme zu bekommen? Ich habe bisher versucht die Daten innerhalb der while Schleife in 2d Arrays zu schreiben und sie auszuwerten. Das dauert aber zu lange, so dass ich Botschaften verliere da die dll nicht schnell genug abgefragt wird.
Letztendlich bin ich auf der Suche nach einer passenden Programmarchitektur und wie ich Daten speichern kann. Queue? Hashtable? oder parallele Tasks - eine zum Datensammeln und eine zum Auswerten?
Und wie handle ich am besten die beiden CAN Kanäle? Zwei parallele while Schleifen im VI?
Ich bin neu in LabVIEW und hoffe auf Eure Hilfe!
Danke,
Thomas
Hallo Thomas,
du brauchst keine zwei While-Schleifen. Du musst alles in einer While-Schleife zyklisch abfragen und puffern. Danach diesen Puffer in einer anderen Task auswerten und in zwei unterschiedliche Arrays (nimm am besten Queues) abspeichern.
Von welcher Geschwindigkeit sprichst du? Ich habe ca. 300 Hz mit einem USB-Can Dongle geschafft und für mich war es ausreichend.

Gruss, Eugen
Hallo Eugen,
danke für Deine Antwort.

Ich habe eine Datentransferrate von 500kB/s und 125kB/s jeweils auf einem CAN.
Da ich 2 Kanäle monitoren muss, muss ich der dll immer sagen (per Parameter) welchen Kanal ich möchte. Daher habe ich bisher 2 while Schleifen verwendet. Mal schauen ob ich es in eine bekomme.

Vielleicht noch konkreter das Problem: ich habe ein Steuergerät, welchen Botschaften von einem CAN zum anderen routet und umgekehrt. Ich muss nun monitoren, ob die Daten korrekt geroutet werden und welche Routingzeiten auftreten...

Da ich Null Erfahrungen mit LabVIEW habe - wie realisiere ich eine zweite Task?
Zum puffern eine Queue zu verwenden macht Sinn, aber wie bekomme ich die Daten in die andere Task?
Wie arbeitet LabVIEW die Tasks ab? Kann ich Prioritäten setzen?

Danke,
Thomas
Referenz-URLs