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
HEX String - CAN BUS - Auswertung
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: HEX String - CAN BUS - Auswertung
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 machen.
Gruß, Eugen
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 machen.
Gruß, Eugen
Re: HEX String - CAN BUS - Auswertung
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ß
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ß
Re: HEX String - CAN BUS - Auswertung
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
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
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: HEX String - CAN BUS - Auswertung
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.
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.
Re: HEX String - CAN BUS - Auswertung
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
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
Re: HEX String - CAN BUS - Auswertung
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
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 КБ) 313 скачиваний
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 19 Ответы
- 2645 Просмотры
-
Последнее сообщение Artem.spb
-
- 3 Ответы
- 1729 Просмотры
-
Последнее сообщение Artem.spb
-
- 4 Ответы
- 1210 Просмотры
-
Последнее сообщение Юрий
-
- 4 Ответы
- 1077 Просмотры
-
Последнее сообщение BAS
-
- 4 Ответы
- 250 Просмотры
-
Последнее сообщение AndreyDmitriev