HEX String - CAN BUS - Auswertung

Signal -erfassung, -verarbeitung und -ausgabe
Ответить
Аватара пользователя
Lableo
beginner
beginner
Сообщения: 12
Зарегистрирован: 08 янв 2010, 16:57
Версия LabVIEW: 9.0

HEX String - CAN BUS - Auswertung

Сообщение Lableo »

Hallo miteinander

Ich brauch mal wieder nen kleinen Anschupser. Irgendwie fällt mir keine passende Lösung ein.

Die Anwendung:
Via einem CAN Bus kommuniziert Labview mit einem externen Umrichter. Je nachdem welche Befehle ich an das Gerät sende bekomme ich folgende Strings zurück.
Die Strings sind HEX codiert und folgendermassen aufgeteilt.
1-5: Zeitstempel
7-9: ID des Geräts
11-15: Indikator für den Befehl
17-33: Wert

Die Lösung
Ich möchte gerne die Indikatoren kontrollieren. Sobald ein bestimmter Wert auftritt solle ein Unterprogramm die Werte weiterverarbeiten und über das Frontend ausgeben.
z.B. 53 52 (Steht für ASCII SR - Status Register) wird erkannt. Danach 17-33 in Binärcode codieren und an gewünschte Boolsche Variablen ausgeben.

Alle 5ms kommt ein neues Datenpaket rein. Es müsste natürlich auch sichergestellt werden das alle Befehle ausgewertet wurden. Ansonsten Fehlermeldung. Die Strings Auszuwerten ist ja kein Problem - aber wie organisier ich das Ganze damit das ordentlich abläuft?

Seh ich das richtig das ich mir irgenwie einen Array oder ähnliches Aufbauen muss. Oder ein Schieberegister ala LIFO

Gruß Martin
Вложения
String CAN.JPG
String CAN.JPG (15.64 КБ) 6862 просмотра
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: HEX String - CAN BUS - Auswertung

Сообщение Eugen Graf »

Hi Martin!

Wenn du alle Daten jetzt schon im Array hast, dann mach dir eine For-Schleife, und in der For-Schleife machst du dir eine Case-Struktur, die abhängig von Befehls-Id die weiteren Daten so oder so interpretiert und direkt auf Grenzwerte überprüft. Die Interpretierung der Daten kannst du einfach mit einem Unflatten From String :vi: machen.

Gruß, Eugen
Аватара пользователя
Lableo
beginner
beginner
Сообщения: 12
Зарегистрирован: 08 янв 2010, 16:57
Версия LabVIEW: 9.0

Re: HEX String - CAN BUS - Auswertung

Сообщение Lableo »

Hallo Eugen

Also bei dem Array denn du siehst handelt es sich um ein Listenfeld mit 12 Zeilen. Wobei aber scheinbar immer nur 9 Werte gespeichert werden. Die Daten müsste ich wohl schon noch in Strings konvertieren?!

Gruß
Аватара пользователя
Lableo
beginner
beginner
Сообщения: 12
Зарегистрирован: 08 янв 2010, 16:57
Версия LabVIEW: 9.0

Re: HEX String - CAN BUS - Auswertung

Сообщение Lableo »

Hi

also das Listenfeld kann ich ja leicht via eines Eigenschaftsknoten "Objektnamen" in einen String Array umwandeln. In diesem werden dann immer nur die letzten 9 Werte angezeigt. Wie viele Werte "gepuffert" werden sollen lässt sich leicht über ein Unterprogramm einstellen.

Nun muss ich es eigentlich nur noch schaffen das die einzelnen Strings, vielleicht wie oben beschrieben, abgearbeitet werden. Dabei ist es wichtig das dies schneller passiert als neue Daten eingelesen werden - richtig?

Gruß Martin
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: HEX String - CAN BUS - Auswertung

Сообщение Eugen Graf »

Hi Martin!

Du solltest die Daten noch vor dem Eintragen ins Listenfeld interpretieren. Das Listenfeld muss man halt als nur eine Anzeige betrachten und keine Variable, die die Daten enthält.
Аватара пользователя
Lableo
beginner
beginner
Сообщения: 12
Зарегистрирован: 08 янв 2010, 16:57
Версия LabVIEW: 9.0

Re: HEX String - CAN BUS - Auswertung

Сообщение Lableo »

Hi

Ok - das habe ich mittlerweile hinbekommen.

Ich hatte nun folgende Idee. Da ich ja keine Daten verlieren will möchte ich den aktuell enpfangenen String Array mit dem zuletzt erhaltenen Vergleichen. Da sich die Anzahl der zu empfangenen Strings ja ändern kann wird die Anzahl der neuen Strings somit auch variabel bleiben. Denn Puffer hab ich auf 20 Strings erhöht. Alles was darüber ist wird nicht erfasst und geht einfach verloren. Eine "normale" Anfrage gibt mir max 5 Strings zurück. Je nachdem was ich haben will.

Über ein Schieberegister lese ich somit immer den zuletzt bearbeiteten Array in eine Schleife ein. Vergleiche ihn anhand der Zeitstempel mit den neuen Daten und bilde daraus einen neuen Array mit den neuen Strings. Diese werden Anhand der ID's + Indikatoren weiterverarbeitet. Außerdem kommt dieser ins Schieberegister.
Nächster Aufruf -> Vergleiche -> neuer Array -> Bearbeitung usw. usw.

Das sollte doch funktionieren!?

Gibt es denn irgend eine Funktionon zum vergleichen kompletter String Arrays? Oder muss ich mir da selber was zusammen basteln.

Ach ja - Danke Eugen

Sers
Аватара пользователя
Lableo
beginner
beginner
Сообщения: 12
Зарегистрирован: 08 янв 2010, 16:57
Версия LabVIEW: 9.0

Re: HEX String - CAN BUS - Auswertung

Сообщение Lableo »

Hi

So ich hab es jetzt vorerst folgendermassen realisisiert. Anbei ein kleines Testprogramm zur Verdeutlichung.

Die neuen Strings vom Bus sollen mit den alten verglichen werden. Ist der String nicht vorhanden wird er im Puffer(Abgeglichene Werte) eingefügt. Danach wird der Array auf 10 Strings gekürzt - somit entsteht kein Überlauf und es fällt auch kein Datenschrott an.
Bereits vorhandene Strings werden gelöscht. Je nachdem wie viele neue Strings hinzu gekommen sind ist das Ergebnis ein String Array der Größe 0-10. Diese Werte werden dann weiterverarbeitet.

Da die Can Daten mit einem Zeitindikator versehen sind, sind diese unique. Das ist wichtig - Ansonsten funktioniert der Vergleich nämlich nicht.

Bei dem Testprogramm bitte beachten, dass die Zahlen immer erhöht werden müssen. Ansonsten schreibt und löscht das Programm im Wechsel die Daten.

Meine Frage:

Wär das noch einfacher geschickter möglich gewesen? Irgendwie mach ich mir sorgen das läuft nicht stabil?!

Gruß Martin
Вложения
Bufferabgleich CAN.vi
Kleines Programm. Beachte: Werte müssen immer erhöht werden.
(12.6 КБ) 310 скачиваний
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Signalverarbeitung»