为什么我需要在 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);
我仍然找不到该行为的罪魁祸首。
但是每当我开始测量时,我都会刷新缓冲区,到目前为止,这种错误还没有发生。
我需要与只有串行接口 (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);
我仍然找不到该行为的罪魁祸首。
但是每当我开始测量时,我都会刷新缓冲区,到目前为止,这种错误还没有发生。