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!
ich habe ein kleines Problem, welches für euch bestimmt leicht zu lösen ist, mich aber langsam zum verzweifeln bringt.
Ich erhalte über eine serielle Schnittstelle gewisse Informationen, je nach dem welches Steuer signal ich geschickt habe. Ich versuche die empfangenen Daten nun auszuwerten, bzw. den String aufzulösen. Alles funktioniert wunderbar bis auf eines.
Bsp: Ich schicke eine 1 und erhalte vom Gerät Spannungswerte, dann schicke ich eine 2 und erhalte Temperaturwert. Das Gerät schickt alle 500ms einen Datensatz an den PC. Über ein Schieberegister liegen mir die Datensätze in der Form vor in der ich sie auch brauche.
Jetzt zum Problem: Ich schicke die 1 und kann mit meiner Auswerteeinheit die Spannungswerte auslesen. Bin ich damit fertig sende ich die 2 und will die Tempwerte auslesen, lese ich immer ncoh Spanungswerte, da ich immer die am Anfang des Schieberegisters stehenden Daten empfange - is Mist.
Wie ist es möglich ausschließlich den aktuellen Wert des Schieberegisters anzeigen zu lassen?
ich habe ein kleines Problem, welches für euch bestimmt leicht zu lösen ist, mich aber langsam zum verzweifeln bringt.
Ich erhalte über eine serielle Schnittstelle gewisse Informationen, je nach dem welches Steuer signal ich geschickt habe. Ich versuche die empfangenen Daten nun auszuwerten, bzw. den String aufzulösen. Alles funktioniert wunderbar bis auf eines.
Bsp: Ich schicke eine 1 und erhalte vom Gerät Spannungswerte, dann schicke ich eine 2 und erhalte Temperaturwert. Das Gerät schickt alle 500ms einen Datensatz an den PC. Über ein Schieberegister liegen mir die Datensätze in der Form vor in der ich sie auch brauche.
Jetzt zum Problem: Ich schicke die 1 und kann mit meiner Auswerteeinheit die Spannungswerte auslesen. Bin ich damit fertig sende ich die 2 und will die Tempwerte auslesen, lese ich immer ncoh Spanungswerte, da ich immer die am Anfang des Schieberegisters stehenden Daten empfange - is Mist.
Wie ist es möglich ausschließlich den aktuellen Wert des Schieberegisters anzeigen zu lassen?
Danke
HIMI
Du könntest das Schieberegister nach dem auslesen zurücksetzen (einfach leere Konstante anschliessen), oder brauchst du die Spannungswerte später noch?
Hoffe das hilft dir weiter
Gruss Marc
20.09.2011, 09:48 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2011 09:49 von Lucki.)
Das Schieberegister ist ja für die "Vergangenheitsbewältigung" da, also um Werte aus vorangegangenen Schleifendurchläufen noch zur Verfügung zu halten. Wenn Du dich immer nur für den aktuellen Wert interessierst, muß man sich doch fragen: warum überhaupt Schieberegister?
Danke für deine schnelle Antwort Marc. Die Spannungs- bzw Tempwerte brauche ich dann nicht mehr. Ich benötige immer nur den aktuellen Wert. Das mit dem Rücksetzten des Registers funktioniert nicht so recht. Ich weiß auch, dass es schwer zu erklären ist.
Ich filtere die ankommenden Nachrichten nach einem eineindeutigen Zeichen, welches Ende und Anfang des Frames kennzeichnet.
Was ich nach der Filterung empfange sieht abstrahiert so aus.
^
Temp 1
Temp 2
Temp 3
^
Das Schieberegister macht aus den einzelnen übertagenen Zeilen das oben erkenntlich Muster. Dieser Block (dessen Länge variieren kann), wird übergeben und ausgewertet. Problem ist wie gesagt, dass ich immern nur den ersten Werteblock des Registers auswerten kann.
Es muss doch irgendwie möglich sein den vorangegangenen Werteblock mit dem aktuellen zu überschreiben.
Ich brauche in einem Anzeigepanel später nur die aktuellen Werte 1,2 und 3. Dieser Filter ist auch schon fertig und funktioniert.
Ihr habt schon gedacht ihr seid mich los, aber HAHA, hier bin ich wieder.
@Gerd: Deinen Vorschlag hatte ich auch schon mal probiert, aber da tritt mein Problem nur später auf. Ich muss aus dem empfangenen String bestimmte Werte anzeigen je nach dem welches Steuersignal gesendet wurde. Jetzt habe ich wieder das Problem, dass die Werte je nach Ankunft lustig flackern und das soll nicht sein. Ich muss sie also puffern. Demzufolge muss der alte Wert direkt mit dem neuen überschrieben werden. Das hätte ich nun wieder mir einem SR gemacht, aber das habe ich ja schon erfolglos mit dem ganzen Stringblock versucht.
Ich komme mir schon etwas blöd vor, dass ich so ein scheinbar einfaches Problem nicht lösen kann. Hab schon ganz andere Sachen mit LV umgesetzt.
LabVIEW 2016
20.09.2011, 13:38 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2011 13:40 von GerdW.)
du musst dein SR auch wieder leeren:
Immer wenn eine Meldung komplett erhalten wurde (und ausgewertet ist), musst du sie auch wieder aus dem SR "wegschmeißen...
Anmerkung:
Hast du ein ordentliches Endezeichen bei deiner RS232-Kommunikation? Dann verwende dieses und verzichte auf BytesAtPort...
(20.09.2011 13:34 )HIMI schrieb: Ich komme mir schon etwas blöd vor, dass ich so ein scheinbar einfaches Problem nicht lösen kann. Hab schon ganz andere Sachen mit LV umgesetzt.
Gut so, aber um dieses VI zufriedenstellend zum Laufen zu bringen, müßte man schon verd.. weit von vorn anfangen