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!
Hallo Forum, ich versuch ein Multimeter Peaktech 3315 über die RS232 anzusprechen. Mein Programm funktioniert leider nur teilweise. Das Mulitmeter ist an COM1 angeschlossen und meine Daten bezüglich Baudrate usw. müssten eigentlich richtig sein.
Mein Programm bricht nach einer LoopSchleif mit der Meldung "Fehler -1073807253 ist bei VISA: Lesen" ab. Zuvor hat mir das Programm den DatenStrom einer Übetragung noch angezeigt. Und die Werte sind auch korrekt - stimmen mit der Mulitmeteranzeige überein (1.Zeichen=Range 2-5.Zeichen Messwert, usw.). Mir ist nicht ganz klar was der Eigenschaftskonoten Bytes at Serail Prot macht, der mit dem Visa Lesen verbunden ist?
Vieleicht hat jemand eine Idee, weiß leider nicht weiter und ich denke, dass das Progrämchen kurz vor dem durchbruch steht.
Hab grade leider kein zur Hand, aber trotzdem mal ein paar Worte von mir:
1. BytesAtPort schaut, wie viele Daten am Port anliegen. Das kann man verwenden, wenn man variable Nachrichtenlängen hat. Ansonsten kann man es auch durch eine Konstante ersetzen. Ich verwende es immer, weil bei mir nix sooo zeitkritisch ist, dass ich mir die Abfrage nicht leisten könnte.
2. Hast du eine kleine Wartezeit zwischen Lesebefehl senden und Antwort auslesen eingebaut? Ca. 50 ms sollten reichen. Ansonsten einfach mal rumspielen.
3. Das VI mal im DebugModus ausführen (die kleine Glühbirne neben den Startschaltflächen auf gelb schalten) und beobachten, wo der Fehler genau auftritt.
Grüße,
Totti
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
07.06.2011, 17:45 (Dieser Beitrag wurde zuletzt bearbeitet: 07.06.2011 18:50 von Lucki.)
Sowie du das selbst programmierst und nicht die vom Hersteller mitgelieferte Software verwendest, brauchst Du das Schnittstellenprotokoll. Und wir brauchen das auch, um Dir zu helfen. Wenn drüber weder auf der mitgeleiferten CD noch auf der Homepage des Herstellers etwas zu finden ist, heißt das nicht, dass es geheim ist. Rufe beim Hersteller an und lass Dir die Info per Email schicken. Das Weitere ist dann nur noch ein Clacks.
Edit: Wenn dieses Protokoll gilt, dann könnte es z.B. so funktionieren:
NB1: Man kann natürlich auch alle 9 Byte auf einmal lesen und dann den String zerlegen. Aber warum sich das antun?
NB2: Den Start/Stop darfst Du so nicht machen. Bei Stop wird nicht mehr gelesen, aber die Datenerfassung läuft weiter, bis der Empfangspuffer überläuft.
08.06.2011, 10:22 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2011 10:29 von HSK-Michael.)
Spitzenmäßig, genau so klappt es, ich mußte nur noch DTR und RTS einfügen - wenn ich das richtig verstanden habe wird meine Infrarotschnittstelle über diese Einstellung mit Spannung versorgt. Hab das Vi nocheinmal angefügt.
Vielen Dank!
Vielleicht hat noch jemand die gedult ein paar Fragen zu erklären?
Dieses VI - Multimeter überträgt (BaudRate) 2400 Symbole pro Sekunde?
Dann kommt das Datenformat, welches übertragen wird mit Start-, Daten-, Stopbit, usw.?
Durch das Datenformat, wird mir ein Zeichen (Byte) generiert oder?
Jetzt gehe ich in die Schleife und lese das 1te Byte bis zum 7ten aus. Dies sind meine Informationen, die das Peaktech ausgibt?
Was bedeutet die konstante 10 am VisaSerial Eingang (Endzeichen)? Das hier ein Datenpaket endet? Endet es mit 10?
Woher weiß man, dass unter Visa lesen "Rest" die Bytanzahl auf 20 gestellt werden muss? Wie ergibt sich diese Zahl?
Wieviele Symbole werden bei einem Durchgang übertragen, 11?
One data block consists of 11 packets, or 110 bits?
Wie kann ich durch dieses Protokoll darauf zurückschließen wie häufig pro Sekunde der Kanal (ein Messwert) vom Multimeter zum Rechner gesendet wird? BaudRate/Anzahl der Symbole die übertragen werden?
08.06.2011, 12:49 (Dieser Beitrag wurde zuletzt bearbeitet: 08.06.2011 12:55 von Lucki.)
1) in Visa Configuratin ist Termination Char defaultmäßig aktiviert, und default ist auch auch LF = 0xA = 10. Es wäre also nicht nötig gewesen, die Konstante überhaupt anzuschließen.
2.) Visa Read funktioniert hier so: Es wartet - und zwar so lange, bis eine der drei Bedingungen erfüllt ist:
a) Die an den Eingang angeglegte Anzahl Byte (oder mehr) befinden sich im Buffer
b) Es wird eion LF empfangen
c) Timeout (10s) ist erreicht.
Die VI Reads funktionieren also so:
Read1: Es wird 1 Byte gelesen, gegebenenfalss wird gewartet, bis das Byte im Buffer ist
Read 2: Es werden 4 bytes gelesen, gegebenenfalls...
Letztes Read: Es wird gewartet, bis LF im Empfangspuffer ist. Dann wird alles bis LF aus dem Puffer gelesen. Damit nicht vorher schon gelesen wird, muß an den Eingang eine höhere Bytezahl angelegt werden, als in Wirklichkeit noch zu erwarten ist.
3.) Das Voltmeter arbeite nicht im Master-Slave Modus. D.h. die Daten kommen nicht auf Kommando, sondern werden ohne Aufforderung kontinuierlich gesendet. Die Update-Frequenz wird allein durch das Multimeter bestimmt.
Ein Wait in die Schleife zu legen wäre ganz schädlich, da das Senden der Daten in unverminderter Häufigkeit weiterginge und der Empfangspuffer überliefe. Wenn man die Anzeige anhalten möchte, damit sie nicht durch neue Daten überschrieben wird, dann so, das die Daten weiter gelesen werden, der Werte aber nicht mehr zur Anzeige gebracht werden.
4.) Im Beispiel-VI werden keine Fehler abgefangen. Es wird fehlerfrei nur funktionieren, wenn erst das VI aufgerufen wird und innerhalb der nächsten 10s das Multimeter eingeschalten wird. Bei umgekehrter Reihenfolge kann es passieren, daß das Lesen mitten in einem Datensatz oder soger mitten in einem Byte beginnt. Das bringt Fehler.