2016-04-12 7 views
2

Ich muss mit einem älteren Temperaturregler kommunizieren, der nur eine serielle Schnittstelle (RS-232) hat. Ich benutze Matlab und mein PC hat keine serielle Schnittstelle. Daher verwende ich einen Seriell-zu-USB-Adapter.Warum muss ich zweimal für die korrekte Antwort mit dem seriellen Port in Matlab abfragen?

Nach ein paar Stunden kämpfen, bekam ich endlich eine Verbindung. Aber ich muss immer zweimal abfragen, um die Antwort zu erhalten, die ich erwarte.

Zum Beispiel:

für Temperatur zu fragen (letzte Abfrage war zu temp)

>> query(s,'in_pv_00') 
ans = 
     23.49 

für Temperatur fragen

>> query(s,'in_pv_00') 
ans = 
     23.49 

fordern Version

>> query(s,'version') 
ans = 
     23.49 

ich noch hol t er Temperaturwert Dann, wenn ich für die Version abfragen wieder

>> query(s,'version') 
ans = 
     JULABO HIGHTECH D-SERIES VERSION 4.0 

ich endlich die Version jetzt bekommen, für Temp fragen, werde ich immer noch die Version noch einmal, bevor ich die temp bekommen

>> query(s,'in_pv_00') 
ans = 
     JULABO HIGHTECH D-SERIES VERSION 4.0 
>> query(s,'in_pv_00') 
ans = 
     23.49 

, dass die Port-Einstellungen ist verwende ich

s = serial('COM6'); 
set(s,'BaudRate',4800,'DataBits',7,'StopBits',1); 
set(s,'Parity','even','Terminator',{'CR','CR'},'FlowControl','hardware'); 
fopen(s); 
+0

Das einzige, was (kein Matlab Typ speziell, aber ich habe viele COM-Port-Debugging durchgeführt) mir seltsam aussieht Set (s, 'Parität', 'selbst', 'Terminator', { 'CR' , 'CR'}, 'FlowControl', 'Hardware'); Warum ist diese CR CR, normalerweise würden Sie etwas wie CR, LF oder nur LF für Linux-Systeme sehen, aber es hängt alles davon ab, was das Gerät konfiguriert ist zu tun, dass über diesen seriellen Port spricht. Überprüfen Sie außerdem, ob Baudrate, Datenbits, Stoppbits und Parität zwischen Ihrem Hostcomputer und dem Gerät, das mit dem seriellen Anschluss kommuniziert, korrekt sind. – visch

+0

Ich habe Baudrate, Datenbits, Stoppbits und Parität auf die Werte im Handbuch des Temperaturreglers eingestellt und geprüft, ob sie noch so eingestellt sind. Die CR CR bekam ich von einem Matlab-Skript, das auf einem älteren PC mit einer echten seriellen Schnittstelle lief und funktionierte. Das war auch meine erste Vermutung, aber wenn ich es auf nur LF ändere, funktioniert es überhaupt nicht. Ich werde deinen anderen Vorschlag versuchen. – josh21

+0

Wenn Sie das Handbuch für den Temperaturregler finden, kann es Ihnen sagen, was vor sich geht. Es scheint, als wäre der Terminator das Problem, aber ich bin mir nicht sicher, was set() genau tut, entweder in MatLab würde ich hier nachschauen http://stackoverflow.com/questions/14233394/how-to-read- serial-data-correct-through-matlab versuche Mirco Widmers Vorschlag, außer mit fscanf hoffentlich wird die Datei mit etwas gefüllt Dann öffne die Datei mit hexEditor und sieh dir an, wie das Ende der Zeilen ist Da du Daten bekommst müsste ich stellen Sie sich vor, dass Ihre Baudrate/DataBits und StopBits richtig eingestellt sind. – visch

Antwort

0

ich kann immer noch nicht die Schuldigen für das Verhalten finden.
Aber ich spüle den Puffer, wenn ich eine Messung starte und bis jetzt ist der Fehler nicht auf diese Weise aufgetreten.

Verwandte Themen