Hallo Leute,
ich schreibe eine Gerätesteurung mit PyVisa (auf Windows XP), weil darin gleichzeitig die GPIB-Unterstützung implementiert ist. Da ist ein Problem aufgetaucht ist, dessen Lösung ich nicht kenne; im Internet habe ich auch nichts dazu gefunden.
Es dreht sich um eine serielle Schnittstelle, über die Zeichenketten aus Charakteren ("Bytes") geschickt werden. Gerätebefehle werden so durch Zahlen ziwschen 30 und 255 als Bytes geschickt. Jedes einzelne Zeichen dieser Zeichenkette muß interpretiert werden (z.B. mit ord). Da taucht folgendes Problem auf: es gibt eben Befehle mit Werten größer als 128, z.B.130 (\x82), das von PyVisa als -2 und dann als 2 interpretiert wird : Das Lesen des Buffers aus der Schnittstelle wird abgebrochen, vermutlich weil das Zeichen größer als 128 ist (ähnliches passiert mit allen Befehlen größer als 128). Beim nächsten Lesen aus der Schnittstelle wird dann der Rest gelesen. Das Problem hängt wohl mit dem Zeichensatzcoding zusammen (soviel habe ich im Internet herausgefunden). Dort wird allerdings immer nur um Unicode und Darstellbarkeit von Zeichen etc. diskutiert. Ich möchte allerdings kein Zeichen (im Sinne einer Schrift) dargestellt haben, sondern die 130 als 130 erkannt haben (wenn 130 als -2 gelesen wird, liegt das am Vorzeichenbit; in C gibt es dafür die Variable unsigned char). Kennt jemand dafür eine Lösung?
MfG
Holger
PyVisa und Charkter > 128
Wie hast Du denn herausgefunden, dass PyVISA eine 130 als 2 sendet? Die Erklärung mit -2 ist falsch, denn eine 130 wäre als ``signed char`` in C der Wert -126. Wenn die 130 wirklich als 2 beim Gerät ankommt, dann geht unterwegs einfach nur das höchstwertige Bit verloren.
Stimmen alle Einstellungen, die das Gerät erwartet? Baudrate, Stopbits usw.?
Um was für ein Gerät handelt es sich denn? Vielleicht kennt das ja jemand und hat schon Erfahrungen damit gesammelt.
Stimmen alle Einstellungen, die das Gerät erwartet? Baudrate, Stopbits usw.?
Um was für ein Gerät handelt es sich denn? Vielleicht kennt das ja jemand und hat schon Erfahrungen damit gesammelt.
Hallo BlackJack,
Du hast völlig recht mit dem ersten Bit, das irgendwie verlorengegangen sein muß - das Minuszeichen habe ich falsch überlegt.
Die Geräteeinstellungen sind so, wie das Gerät es erwartet. Bei dem Gerät handelt es sich um eine selbstentwickelte Motorsteuerung. 19200 baud, Datengröße = 8, 1 Stopbit, keine Parität, keine Flußkontrolle. PyVisa klappt für die GPIB-Geräte (so weit ich das jetzt ausprobiert habe), d.h. das Einbetten des Moduls scheint funktioniert zu haben.
Ich habe mal für die Serielle Schnittstelle PySerial ausprobiert, und damit funktioniert die Steuerung einwandfrei (mein altes C++-Programm funktioniert mit diesen Werten auch).
Ich würde eigentlich nur ungerne beide Pakete gleichzeitig benutzen.##
Holger
Du hast völlig recht mit dem ersten Bit, das irgendwie verlorengegangen sein muß - das Minuszeichen habe ich falsch überlegt.
Die Geräteeinstellungen sind so, wie das Gerät es erwartet. Bei dem Gerät handelt es sich um eine selbstentwickelte Motorsteuerung. 19200 baud, Datengröße = 8, 1 Stopbit, keine Parität, keine Flußkontrolle. PyVisa klappt für die GPIB-Geräte (so weit ich das jetzt ausprobiert habe), d.h. das Einbetten des Moduls scheint funktioniert zu haben.
Ich habe mal für die Serielle Schnittstelle PySerial ausprobiert, und damit funktioniert die Steuerung einwandfrei (mein altes C++-Programm funktioniert mit diesen Werten auch).
Ich würde eigentlich nur ungerne beide Pakete gleichzeitig benutzen.##
Holger