LabVIEWForum.de
Doppeltermination Char - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Doppeltermination Char (/Thread-Doppeltermination-Char)

Seiten: 1 2


Doppeltermination Char - hulk - 14.06.2016 13:54

Ich möchte eine Waage von A&D ansteuern bzw auslesen
In den meisten Büchern/Tutorials wird nur die Methode mit dem Buffer erklärt. Hier im Forum wurde ich auf die TermChar Methode aufmerksam.
Das Manual der Waage sagt dazu
Zitat:"A command has a terminator added, that is specified using the "Terminator (CrLf)"
parameter of “Serial interface ( Sif )” in the function table, and is sent to the balance."
Es sind also 2 chars nötig.
Wie wende ich das bei der VISA Konfiguration an? Diese akzeptiert nur einen Parameter.

Dazu habe ich noch eine Waagenverständnisfrage. Im ersten upload wird das Gewicht permanent ausgelesen. Die Waage steht im Dauersendemodus.
Zusätzlich gibt es aber noch Befehle, zum Beispiel:
Zitat:S ....Requests the weight data when stabilized.
Muss man das so anwenden oder reicht permanent? Ich hoffe, jemand versteht was ich meine. Blink

Im Anhang sind 2Versionen.
Serial1 ist permanentes lesen und funktioniert
Serial 2 erzeugt Fehler.(Framing)


RE: Doppeltermination Char - GerdW - 14.06.2016 16:10

Hallo hulk,

nimm doch einfach das LF als TermChar. Das dann am gelesenen String ein CR anhängt, stört üblicherweise nicht!
Und passenderweise ist das LF beim SerialPortInit schon voreingestellt…

Beim serial1 stört mich, dass du in der Schleife andauernd den Port erneut initialisierst. Warum muss das so sein?


RE: Doppeltermination Char - hulk - 15.06.2016 09:55

Guten Morgen Gerd,

das Stichwort mit dem initialisieren in der Whileschleife war gut. Das bringt das System wohl aus dem Tritt.
Ich habe es angepaßt.
Nun noch einmal zu meinem Verständnisproblem:
Die Waage schickt permanent das Gewicht raus. Wenn ich nur VISA-Read verwende ist alles gut.
Aber wenn Sie permanent sendet, warum hat sie dann noch Befehle? Ich erkenne nur den Unterschied, ob es stabilisierte oder direkte Werte sind.
Leider funktioniert die Anwendung so dann aber nicht mehr. Ich bekomme damit "Frame errors"
Im Snippet sende ich nur den Befehl. Ich habe es auch als string mit CR und LF getestet, obwohl es ja gemäß Initialisierung(Termination char) nicht nötig wäre. Das Ergebnis ist aber das gleiche. Ebenso, wenn ich statt dem Schalter zur Messung einen Button nehme.
MfG
Steffen


RE: Doppeltermination Char - IchSelbst - 15.06.2016 10:28

(15.06.2016 09:55 )hulk schrieb:  Ich habe es auch als string mit CR und LF getestet, obwohl es ja gemäß Initialisierung(Termination char) nicht nötig wäre.
Leider ist es nicht genau so.

Die Terminierung gilt nur für das Lesen von Strings - nicht für das Senden. Gesendet wird nur genau das, was als String in das Schreib-Element hineingeht. Die Terminierung wird nicht angehängt.

Die Terminierung gilt für das Lesen. Man kann verschiedene Lese-Modi einstellen - unter anderen auch "Warten bis das Terminierungszeichen empfangen wurde". Der Aufruf des Lese-Elementes wird nur dann einen Wert (Read-String) zurückgeben, wenn das Terminierungszeichen erkannt wurde. Vorteil: Du musst den Empfangs-Stream nicht selbst parsen. Aber Vorsicht: was nach dem Terminierungszeichen kommt, gehört per Definition zum nächsten Datenstream.


RE: Doppeltermination Char - Freddy - 15.06.2016 11:35

Zitat:Concerning the RS-232C, the balance has two functions: "Data output (dout)" and "Serial interface
(5if)". Set each function as necessary
Wenn ich das richtig verstanden habe, kannst Du die Waage für RS-232 umstellen.

Das Zweite was mir bei Seriellen Schnittstellen einfällt. Du benötigst bei der Waage die RTS und CTS Verbindung. Hat Dein Kabel die Verbindung?

Gruß
Freddy


RE: Doppeltermination Char - hulk - 15.06.2016 12:36

Hi Freddy,

Laut meinem Verständnis bedeudet dies, dass ich in 2 Menüs relevante Einstellungen finde.
Data output--->Druckermodi oder Intervall oder kontinuierlich
SiF --->Einstellungen der seriellen Schnittstelle
Hier hatte ich tatsächlich etwas überlesen. Man kann den Terminator einstellen CrLF oder nur CR. Ich habe jetzt letzteres gewählt und bei Initialvisa eine 13 statt der 10 eingetragen.
Ich bekomme immer noch Overrun oder frame error. Ab und zu kommen auch komische Gewichtswerte, wenn ich mehrmals den Button betätige.
Bei RTS und CTS muss ich passen. Das Kabel hat die Verbindung enthalten, der Anschluß erfolgt aber über einen USB-seriell Wandler ohne Beschriftung und Einsicht der Kontakte. Der Hersteller ist Logilink.


RE: Doppeltermination Char - Freddy - 15.06.2016 13:08

RTS und CTS kannst Du vergessen, die wird nicht verwendet bzw. direkt zurück geschleift.

Der Q Befehl schickt soft Daten, was auch immer die Waage gerade gemessen hat.
Der S Befehl wartet bis die Daten stabil sind.

Vorab würde ich versuchen die ID zu lesen (?ID), wenn das funktioniert ist man sich sicher, dass die Kommunikation funktioniert.
Es gibt auch noch ?SN für Seriennummer oder ?TN für Typname.

Gruß Freddy


RE: Doppeltermination Char - hulk - 15.06.2016 14:45

edit: muss noch mal testen


RE: Doppeltermination Char - Lucki - 15.06.2016 21:32

Wenn CR/LF als Terminator dient, mache ich es so: LF als Terminatorzeichen benutzen, und auf den empfangenen String die Funktion "Nicht darstellbare Zeichen entfernen" anwenden, damit auch CR aus dem String verschwindet.


RE: Doppeltermination Char - hulk - 29.06.2016 14:19

Moin...Der Test war efolgreich. Befehle senden und Gewicht empfangen funktioniert jetzt.
In der Zwischenzeit habe ich noch etwas weitergearbeitet.
Das ganze wird einmal ein Prüfablauf bei Dosierpumpen.....Gewichtserfassung, elektrische Messungen.
Nun hätte ich für den Anfang gern 2 Gewichtsmessungen. Die Werte sollen in einem Array gespeichert (erstmal) werden. Die 2 Messungen erfolgen im zeitlichen Abstand X.
Nun ergeben sich im Programm folgende Probleme:
1) Beim ersten Messdurchlauf fehlt mir Gewicht 1
2) Die Pause welche ich mit einer Sequenz und einer Wartezeit gebaut habe, ist wirkungslos.

Ich hoffe, es ist okay, wenn ich den selben Thread nehme.

MfG