为什么我需要在 Matlab 中使用串口查询两次才能正确回复?

Why do I need to query twice for correct reply using serial port in Matlab?

我需要与只有串行接口 (RS-232) 的旧温度控制器通信。 我正在使用 Matlab,但我的 PC 没有串口。因此,我使用的是串口转 USB 适配器。

经过几个小时的挣扎,我终于接通了。但是我总是需要查询两次才能得到我期望的回复。

例如:

询问温度(上次查询也是温度)

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

询问温度

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

求版本

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

我仍然得到温度值 然后,如果我再次查询版本

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

终于拿到版本了 现在,要求临时,我仍然会在获得临时之前再获得版本

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

这是我使用的端口设置

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

我仍然找不到该行为的罪魁祸首。
但是每当我开始测量时,我都会刷新缓冲区,到目前为止,这种错误还没有发生。