PyVisa und Charkter > 128

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hgibhar
User
Beiträge: 3
Registriert: Montag 13. Oktober 2008, 13:02

Montag 13. Oktober 2008, 13:11

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
BlackJack

Montag 13. Oktober 2008, 13:45

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.
hgibhar
User
Beiträge: 3
Registriert: Montag 13. Oktober 2008, 13:02

Montag 13. Oktober 2008, 16:41

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
hgibhar
User
Beiträge: 3
Registriert: Montag 13. Oktober 2008, 13:02

Montag 13. Oktober 2008, 16:43

Ach so, das habe ich noch vergessen:

Mit ord() habe ich die Zeichen mir anzeigen lassen.

Holger
Antworten