Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
19.11.2012, 14:30 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2012 14:32 von Sascha Meyer.)
Moin,
mein Name ist Sascha und ich arbeite zur Zeit an einem Projekt im Rahmen meines Studiums, indem ich CAN-Daten aus dem Peugeot iOn lese.
Folgendes Problem:
Ich bekomme aus dem CAN-bus mehrere Signale. Gaspedalstellung,Bremsdruck, Geschwindigkeit usw.
Ein Signal z.B. das "Gaspedal" kommt in einem Intervall von 0,01 Sekunden.
Zur Weiterverarbeitung dieses Signales würde ich gerne 6000 Werte im Array (Spaltenvektor) sammeln.
Meine Idee zur Lösung:
Zuerst baue ich mir eine Art Prüfstand.
Ich generiere Zufallszahlen alle 0,01s und speichere diese im Array ab.
Diese Lösung funktioniert allerdings nur, wenn die Zufallszahl in einer for - Schleife ist.
Da ich meine Signale nicht in eine for - schleife einbinden kann, bräuchte ich eine Andere Lösung!
Dieses Problem wurde hier und im Internet schon öfters angesprochen. Jedoch sind die Antworten für mich nicht klar genug gewesen.
Im Anhang habe ich den Prüfstand als vi.
Ich arbeite mit LabVIEW 2012.
Schon mal vielen Dank im Vorraus
Verzeihung das ich dieses Thema in Datenerfassung gespeichert habe.
(19.11.2012 14:30 )Sascha Meyer schrieb: Moin,
mein Name ist Sascha und ich arbeite zur Zeit an einem Projekt im Rahmen meines Studiums, indem ich CAN-Daten aus dem Peugeot iOn lese.
Folgendes Problem:
Ich bekomme aus dem CAN-bus mehrere Signale. Gaspedalstellung,Bremsdruck, Geschwindigkeit usw.
Ein Signal z.B. das "Gaspedal" kommt in einem Intervall von 0,01 Sekunden.
Zur Weiterverarbeitung dieses Signales würde ich gerne 6000 Werte im Array (Spaltenvektor) sammeln.
Meine Idee zur Lösung:
Zuerst baue ich mir eine Art Prüfstand.
Ich generiere Zufallszahlen alle 0,01s und speichere diese im Array ab.
Diese Lösung funktioniert allerdings nur, wenn die Zufallszahl in einer for - Schleife ist.
Da ich meine Signale nicht in eine for - schleife einbinden kann, bräuchte ich eine Andere Lösung!
Dieses Problem wurde hier und im Internet schon öfters angesprochen. Jedoch sind die Antworten für mich nicht klar genug gewesen.
Im Anhang habe ich den Prüfstand als vi.
Ich arbeite mit LabVIEW 2012.
Schon mal vielen Dank im Vorraus
Verzeihung das ich dieses Thema in Datenerfassung gespeichert habe.
Beste Grüße
Sascha
So wie mit der zufallszahl wird das nicht funktionieren, da Du ja immer genau eine Zufallszahl pro Schleifendurchlauf bekommst.
Bei auslesen der CAN-Schnittstelle wird es da etwas komplizierter, da die Daten nicht exakt so schnell einflattern wie Deine Schleifenzyklen.
Wenn Dein CAN-Bus gepuffert ist, liegen je nach größe immer mehrere Messwerte im Puffer. Diesen musst Du in regelmäßigen Abständen auslesen und die Daten auschnipseln und sortieren. Dannach kannst Du Element für Element mit einer For-Schleife in ein Array schreiben.
Wenn Du schon weißt, dass Du 6000 Werte in ein Array speichern möchtest, dann initailisier Dir den Array auserhalb der Schleife auf diese Größe vor und ersetze die Nullen dann mittels For-Schleife durch Deine Messwerte.
Das Signal was ich vom CAN-bus abrufen will kommt alle 0,01s.Somit haben wir 6000 Signale in der Minute. Kannst du mir bitte nochmal genauer erklären wie das vi aussehen soll. Die Array initialisierung habe ich, nur weiß ich genau wie du das mit der for schleife meintest?!
Mir geht es wirklich nur um das Problem, dass ich nicht weiß wie ich in LabVIEW ein array aufbauen kann, dessen Werte aus einer Leitung kommen.
Zitat:ich nicht weiß wie ich in LabVIEW ein array aufbauen kann, dessen Werte aus einer Leitung kommen.
1) Hast du schon mal daran gedacht, die Einsteigerkurse bei NI durchzugehen? (s. Link unten)
2) "Leitung" ist kein sehr treffender Term, er sagt nichts über den Datentyp aus!
3) Mal ein paar Beispiele, alle mit Vor- und Nachteilen:
ja das hast du sicher recht das Leitung kein sicherer Term ist.
Leider kann die die "Leitung"( Es ist der Datentyp double) nicht in eine for bzw. while Schleife packen.
Ansonsten wäre es kein Problem und ich könnte es so angehen wie in dem Bild zu sehen ist.
Zitat:Leider kann die die "Leitung"( Es ist der Datentyp double) nicht in eine for bzw. while Schleife packen.
Ich bin mir ziemlich sicher, dass dein Vi in einer Schleife in einem Haupt-VI aufgerufen wird. Ansonsten gibt es ja auch noch FeedbackNodes, die ohne Schleife auskommen:
Zitat:ich nicht weiß wie ich in LabVIEW ein array aufbauen kann, dessen Werte aus einer Leitung kommen.
1) Hast du schon mal daran gedacht, die Einsteigerkurse bei NI durchzugehen? (s. Link unten)
2) "Leitung" ist kein sehr treffender Term, er sagt nichts über den Datentyp aus!
3) Mal ein paar Beispiele, alle mit Vor- und Nachteilen:
Das 4. Beispiel ist das was ich meine. Allerdings ohne durch die 1000 zu dividieren. Ich verstehe echt nicht was dieser Quotienten-Rest da soll. Der ergibt doch immer null, ebenso wie der ganzahlige Quotientenanteil, wenn der Divisor größer ist als der Divident. Sascha will doch nicht nur jedes 1000ste Element speichern sondern jedes, soweit ich das verstanden habe.
Auf den Labview-Veranstaltungen habe ich gelernt, dass beim Anfügen von Elementen an ein Array jedes mal eine Kopie des Arrays im Speicher angelegt wird. Dadurch besteht bei vielen Schleifenzyklen eine erhöhte Gefahr von Speicherüberläufen. Deshalb wird empfohlen ein Array wenn möglich vorzuinitialisieren und dann die Elemente zu ersetzen. Dann wird immer nur so viel Speicher belegt, wie das Array in der vorinitilisierten Größe benötigt.
Die Bezeichnung "Leitung" finde ich in Labview in Ordnung. Da weiß eigentlich jeder was gemeint ist. Man könnte es auch " Datenflussleitung", "Verdrahtung" oder "Verbindung" nennen. Den Datentyp kann man ja, wenn nötig, mit dazu nennen.
viele Grüße
Stefan
20.11.2012, 11:48 (Dieser Beitrag wurde zuletzt bearbeitet: 20.11.2012 11:51 von GerdW.)
Zitat:Ich verstehe echt nicht was dieser Quotienten-Rest da soll
Der Rest einer Division von i und 1000 ist nicht immer Null...
Modulo-Rechnung hatte ich in der (ca.) 5. Klasse das erste mal...
Ich habe ein Array mit 1000 Elementen definiert und möchte ein Element nach dem anderen durch einen Messwert ersetzen. Der Schleifenzähler zählt hoch und der Remainder begrenzt das ganze auf den Bereich 0...999!
Zitat:Ich verstehe echt nicht was dieser Quotienten-Rest da soll
Der Rest einer Division von i und 1000 ist nicht immer Null...
Modulo-Rechnung hatte ich in der (ca.) 5. Klasse das erste mal...
Ich habe ein Array mit 1000 Elementen definiert und möchte ein Element nach dem anderen durch einen Messwert ersetzen. Der Schleifenzähler zählt hoch und der Remainder begrenzt das ganze auf den Bereich 0...999!
Hallo Gerd,
Ich gebe Zu mit Divisions-Resten habe ich mich nicht mehr beschäftigt, seitdem der Taschenrechner die Division für ich übernimmt.
Dann überschreibst Du aber aller 1000 mal alle Werte wieder. Ist das gewollt?