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 benötige dringend eure Hilfe, nach langer Suche über Google und in Foren bin ich immer noch nicht fündig geworden und hoffe hier kann man mir helfen.
Ich fange mal an,... Ich lese mit LabView 2009 über die VISA Funktion ein RS232 Gerät aus und erhalte als Antwort zwei WORDS.
Um diese WORDS in eine physikalische Größe umwandeln zu können müßte ich ein Teil der Bits um eine Stelle nach rechts verschieben.
Ich hatte mich schon mit den Operatoren bitshift, rotation usw. beschäftigt. Bisher gelang es mir aber nicht nur einen gewissen Teil der Bits zu verschieben.
Im Anhang ist ein Bild vom Muster der Antwortstrings vom Gerät
Das Bit Nr. 7 bleibt immer 0 im Antwortstring.
Allerding muss ich zur Umrechnnung in eine physikalische Größe das Bit Nr. 8 im WORD 0 um eine Stelle nach rechts schieben, so daß AF7 bis AF0 ohne Lücke in Dez umgerechnet werden können.
Im Word 1 muss ich Bit Nr. 13 bis Bit Nr. 8 um eine Stelle nach rechts schieben, damit L12 bis L0 ebenfalls keine Lücken mehr hat.
Kurz gesagt das Bit Nr. 7 ist in der Antwort immer Null muss aber zur Umrechnung eleminiert werden.
Handelt es sich hier um eine Art von bitshift für einzelne Bits?
Und wenn ja wie funktioniert das in LabView, bisher konnte ich leider nur alle Bits im Word um eine Stelle verschieben, was aber keinen Sinn macht.
Ich verstehe sowieso nicht warum das Bit Nr. 7 immer Null bleibt aber man zur Umrechnnung eine Stelle aufrücken muss.
Wäre jemand so freundlich und würde mir weiterhelfen? Welche Funktion in LV kann man nutzen um das Problem zu umgehen.
Aus RS232 wird original ein String empfangen. Wenn Du diesen String beschreibst und sagst, was mit den 3 Daten gemacht werden soll (soll das eine Gleitkommazahl werden?), dann läßt sich alles noch eleganter machen.
Zitat:Ich verstehe sowieso nicht warum das Bit Nr. 7 immer Null bleibt
Vieleicht ist RS232 hier auf 7 Bit konfiguriert.
26.08.2010, 15:15 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2010 15:16 von Falk.)
Ich würde beide Zahlen einfach in einen Boolean-Array umwandeln und dann per Indizes die notwendigen Bits tauschen. Oder liege ich da gerade komplett daneben?
Erstmal möchte ich mich bei euch für die Antworten und Hilfe bedanken.
Bildchen und VIs helfen mir persönlich auch mehr als reiner Text, da ich noch ein Frischling in LabView bin, thanks :-)
@Lucki
Ja es soll eine Gleitkommazahl werden, genauer gesagt auf drei Stellen nach dem Komma.
Ich erwarte Werte zwischen 0,800 und 5,000 (Lambdaverhältnis)
Nachher werde ich eure verschiedenen Varianten ausprobieren und über mein Erfolg oder Misserfolg berichten.
Zusätlich kämpfe ich noch mit einem 2. Problem. Mein VI wird extrem langsam wenn ich die RS232 Schnittstelle öffne, dass sehe ich an meinem Chart vom PID-Regler, die Samplerate beträgt normalerweise 50ms und mit RS232 ca. 3 mal länger. Ich muss mal im Forum suchen oder ggf. ein neuen Thread aufmachen.
Ich bedanke mich nochmal ganz freundlich bei euch
Gruß
Dennis
29.08.2010, 12:00 (Dieser Beitrag wurde zuletzt bearbeitet: 29.08.2010 12:10 von RCMechatronic.)
Hast Recht, oben rechts läßt sich etwas vereinfachen. Und unten rechts vielleicht auch, aber da weiß ich nicht, wie die Umrechnung sein soll.
Und dann würde ich nicht mehr als eine Bildschirmseite Raum verschwenden für das bisschen Code. Und ob alle 50ms neue Kommandos gesendet werden müssen, das mußt Du selbst wissen. Wenn es nur darum geht, daß die Anzeigen für den Betrachter immer aktuell sind, dann würden 100..200 ms auch genügen.
Danke Lucki, deine Veränderung ist für mich auch einleuchtend,... nur komme ich meistens nicht selber drauf von Anfang an.
Die einzulesenen Bytes hast du auf 20 erhöht, soll das eine Sicherheit zwecks Timings sein?
P.S. Die obere Visa-Funktion liest eigentlich permament die Bytes ein thoeretisch ohne Abfrage-String (finde ich nicht so leistungsoptimiert)
und die untere Visa Funktion antwortet nur nach einem Abfrage-String (polling Betrieb).
Gruß
Dennis
30.08.2010, 13:05 (Dieser Beitrag wurde zuletzt bearbeitet: 03.09.2010 08:40 von Lucki.)
' schrieb:P.S. Die obere Visa-Funktion liest eigentlich permament die Bytes ein thoeretisch ohne Abfrage-String (finde ich nicht so leistungsoptimiert)
und die untere Visa Funktion antwortet nur nach einem Abfrage-String (polling Betrieb).
Wenn das so ist, dann würde ich die Abfrage voneiander unabhängig machen, damit nicht ein Buffer überläuft.
Eine andere Möglichkeit wöre, die eine Schleife zu lassen, dann aber das Wait herauszunehmen. Die untere Funktion würde dann genau so oft gepollt, wie die obere die Daten sendet, und das würde funtkionieren.
Es war übrigens ein Hauptfehler, die Schnittstelle immer wieder neu zu konfigurieren. Siehe das neue VI.
Die Erhöhung auf 20 Bytes ist von mit nur so ein Gefühlssache. Der Buffer wird ausgelesen, wenn TermChar eintrifft. Wenn die Stringlänge immer konstant 9 beträgt, dann muß an den Byteanschluß eine Länge von 9...beliebig groß angeschlossen werden.
so wird die RS232-Schnittstelle nicht alle 50ms neu initalisiert, was wahrscheinlich auch Rechnerleistung gekostet hatte.
Die untere Funktion lief bisher problemlos,
aber bei der oberen Funktion kann ich leider kein Polling machen, weil mein Controller schickte auch ohne "Anfrage-Strings" Bytes ohne Ende.
Obwohl ich nur 6 benötige, von daher musste ich gezielt mit der Funktion "String nach Muster durchsuchen" meine 6 Bytes herausfischen.
Besser hätte mir natürlich gefallen, dass mein Controller nur die gewollten 6 Bytes schickt auf Anfrage, jedoch lässt sich der Controller nicht umprogrammieren weil es ein Serienteil ist.
Ich füge dann dein VI in meinem Hauptprogramm ein und schaue ob ich damit weniger Rechnerauslastung habe, damit mein Chart (PID Regler) auch tatsächlich alle 50 ms aktualisiert wird.