我正在尝试在Matlab中构建串口设备。我有2个设备'COM1'和'COM2'。 'COM1'异步将数据写入串行端口'COM2'。我有“COM1”和“COM2”的替代名称,如下所示:
global serialcom
serialcom=serial('COM1'); %Serial Communication portal COM 1
global testdummy
testdummy=serial('COM2'); %Serial Communication portal COM 2
触发testdummyfunction的 testdummy 输入缓冲区中的字节数为2,这是使用testdummy.BytesAvailableFcnCount字段(belo)指定的。
testdummy.BytesAvailableFcnMode = 'Byte';
testdummy.BytesAvailableFcnCount = 2;
testdummy.BytesAvailableFcn = @testdummycomfunction;
我在 testdummy 端有一个函数“testdummyfunction”,它是使用Matlab中的BytesAvailable回调属性触发的。该函数的结构如下:
function testdummyfunction(testdummy,BytesAvailable)
% TESTDUMMYFUNCTION(testdummy,...BytesAvailable)
% INPUTS:
% TESTDUMMY:refers to the serial port testdummy
% BYTESAVAILABLE:Refers to the callback function 'BytesAvailablefunction'
global serialcom;
data_string=fscanf(serialcom); %Reads the data sent form serialcom
end
现在,假设我从serialcom端打印一个长度大于2个字节(比如说10个字节)的字符串ASYNCHRONOUSLY进入testdummy端。虽然我知道当testdummy的输入缓冲区中有2个字节时会触发testdummyfunction,但是 data_string 是否还包含一个长度为2个字节的字符串? 如果没有,我怎样才能确保它只读取2个字节的数据?
答案 0 :(得分:1)
您可以为fscanf添加额外的大小参数:
fscanf(serialcom,'%c',2);
使用doc serial.fscanf
获取函数的完整可选参数集。