INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Zahlenwert byteweise an RS232



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!

27.02.2006, 16:00
Beitrag #1

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
Zahlenwert byteweise an RS232
wunderschönen Tag allerseits,

ein 24 Bit Zahlen-Parameter mit dem Wertebereich von +/- 2 hoch 22 soll vorzeichenrichtig, byteweise an eine serielle Schnittstelle RS232 übegeben werden.
Dazu würde ich den Wert gern in ein ByteArray aus 3 Elementen schreiben und als String an VISA übergeben.
Ich hab schon die unterschiedlichsten Wege ausprobiert. Aber als lausiger LabVIEW-Anfänger krieg ich es einfach nicht hin, dass sowohl negative als auch positive Parameter von meiner Schrittmotorensteuerung an der RS232 richtig interpretiert werden.
Wenn ich einen Integer oder Double in einen Hex-String konvertiere, um den String dann zu zerlegen, wird warscheinlich zwischen dem Vorzeichen und dem high-Byte noch ein vietes Byte mit dem Wert 00 eingefügt, da ein Integer ja nur 1,2 oder 4 Byte groß sein kann. So genau kann ich das aber auch noch nicht nachvollziehen. Der String kann außerdem so nicht an VISA-Write übergeben werden, da die Zahlen im String-Format nun als Zeichen und nicht mehr als Zahlenwert gedeutet werden.
Jedenfalls kommen die Parameter nicht so am Gerät an, wie sie sollen, damit die Motorensteuerung richtig reagiert.
Das zweite Problem ist, dass die Parameter, die danach von der Schrittmotorensteuerung zurückgegeben werden sollen, nie richtig bei VISA-Read ankommen, sonder immer nur Fehlermeldungen.
Wenn mir jemand in diesen Problemen helfen könnte, wer ich sehr dankbar.

mfG.
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.02.2006, 16:28
Beitrag #2

didierj Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 69
Registriert seit: Apr 2005

LV6.1 & LV7.1.1
1997
kA


Schweiz
Zahlenwert byteweise an RS232
Wenn ich dich richtig verstehe, genügt es, deinen I32-Wert über den "Flatten To String" (Palette: AdvancedData Maniulation) zu lassen, und dann den String mittels "String Subset" (Palette: String) auf 3 Bytes zu schneiden.

Du erhälst dadurch die binäre Repräsentation deines Wertes in einem 3-Byte langen String.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.02.2006, 16:51
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Zahlenwert byteweise an RS232
Hallo SchwindelInside,

ich habe hier ein VI erstellt, der wahrscheinlich dein erstes Problem löst. Musst du ausprobieren.

Zum zweiten, kann deine Konfiguration für serielle falsch sein. Ich meine Timeouteinstellung. Ausserdem die VISA-Read-Routine kann fehlerhaft sein. Am besten benutzt du eine Queue und zwei Tasks: eine zum Auslesen, andere zum Auswerten(Parsen), wie im Bild unten.

Gruss, Eugen


Angehängte Datei(en) Thumbnail(s)
   

Sonstige .vi  24Bit.vi (Größe: 24,59 KB / Downloads: 240)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.02.2006, 16:53
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Zahlenwert byteweise an RS232
didierj schrieb:Wenn ich dich richtig verstehe, genügt es, deinen I32-Wert über den "Flatten To String" (Palette: AdvancedData Maniulation) zu lassen, und dann den String mittels "String Subset" (Palette: String) auf 3 Bytes zu schneiden.

Du erhälst dadurch die binäre Repräsentation deines Wertes in einem 3-Byte langen String.

Ich glaube nicht dass nur das Abschneiden des Strings die richtige Lösung ist, denn auch negative Zahlen müssen konvertiert werden.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.02.2006, 16:01
Beitrag #5

didierj Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 69
Registriert seit: Apr 2005

LV6.1 & LV7.1.1
1997
kA


Schweiz
Zahlenwert byteweise an RS232
eugen graf schrieb:Ich glaube nicht dass nur das Abschneiden des Strings die richtige Lösung ist, denn auch negative Zahlen müssen konvertiert werden.
Die binäre Darstellung von negativen Zahlen wird binär so realisiert, dass mindestens das vorderste Bit eine 1 ist (2-er Komplement der positiven Zahl).
Somit istfür 4Byte-SIGNED-Zahlen ein Wertebereich von +(2^31)-1...-2^31 möglich. 4Byte-UNSIGNED-Zahlen haben im Gegensatz einen Wertebereich von +(2^32)-1...0.

Ist dein aktueller Wert nicht das Minimum, so ist nicht nur das vorderste Bit, sondern auch etwelche dahinter 1 bei negativen Zahlen.
Du willst eine 3Byte-Zahl mit Wertebereich +(2^22)-1...-2^22. In der ursprünglichen 4Byte-Zahl sind dann die vordersten 10 Bits 1 (bei negativen Zahlen). Somit kannst du getrost das vordere Byte abschneiden, du hast immer noch min. 2 Bits, die dir die negativen Zahlen darstellen.

Didier
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.02.2006, 16:47
Beitrag #6

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Zahlenwert byteweise an RS232
Verstehe, bin einverstandenBig Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.02.2006, 21:14
Beitrag #7

SchwindelInside Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 77
Registriert seit: Dec 2005

2012 pro
2005
EN


Deutschland
Zahlenwert byteweise an RS232

Akzeptierte Lösung

wunderschönen Abend,

vielen Dank für die sehr hilfreichen Antworten und dem Herrn Graf für die Arbeit, die er sich gemacht hat.
Die Antwort von Didier klingt logisch und deckt sich auch mit den Erkentnissen, die ich mit Hilfe von Eugens VI gemacht habe:
Der negative Zahlenwert wird nicht durch die gleiche Binärzahl wie für den Betrag der Zahl plus ein Vorzeichenbit verschlüsselt, sondern durch den maximalen speicherbaren Zahlenbetrag minus den Betrag der negativen Zahl. Somit bleiben die vordersten Bits bei negativen Werten immer 1.
Eugens VI hat leider nicht so ganz das gewünschte Ergebnis gebracht, erst nach dem ich einige Änderungen vorgenommen habe. Dabei hab ich genau die 8 Bit herausgeschnitten, die bei einem Int32 zwischen meiner 22 Bit Zahl und den vermeintlichen 2 Vorzeichenbits liegen. Nach Didiers Theorie war das warscheinlich gar nicht unbedingt nötig.
Mein erstes Problem ist damit nun erst mal gelöst. Vielen Dank dafür.
Das zweite lag wohl tatsächlich am zu kurzen Timeout von 20000 ms

Grüße Stefan


Angehängte Datei(en)
Sonstige .vi  24Bit_mod.vi (Größe: 39,59 KB / Downloads: 246)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.03.2006, 08:16
Beitrag #8

didierj Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 69
Registriert seit: Apr 2005

LV6.1 & LV7.1.1
1997
kA


Schweiz
Zahlenwert byteweise an RS232
SchwindelInside schrieb:Das zweite lag wohl tatsächlich am zu kurzen Timeout von 20000 ms
Schon etwas verrückt: Die Applikation wird (wie ich vermute) auf einem Rechner laufen, der mit mehreren GHz betrieben wird, und dann sind 20s timeout immer noch zu kurz. :screw:
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.03.2006, 10:53
Beitrag #9

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Zahlenwert byteweise an RS232
Gut, dass wir geholfen haben.

Timeout von 20s bedeutet doch nur wenn die Daten nicht kommen, wird die Task für 20s angehalten und wenn inzwischen doch die Daten kommen läuft alles weiter.
Problematisch wird es nur wenn man das Programm beenden will und keine Daten kommen, dann wartet man halt bis zu 20 Sekunden.Lol
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  VISA serielle Schnittstelle byteweise schreiben BRunner77 1 4.106 22.05.2012 20:27
Letzter Beitrag: GerdW
  Byteweise über COM-Port kommunizieren jkreuzer 9 7.338 21.09.2006 09:57
Letzter Beitrag: eg

Gehe zu: