使用Matlab中的字节可用功能在串行端口之间读取

时间:2013-07-10 09:24:55

标签: matlab file-io serial-port communication serial-communication

我正在尝试在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个字节的数据?

1 个答案:

答案 0 :(得分:1)

您可以为fscanf添加额外的大小参数:

fscanf(serialcom,'%c',2);

使用doc serial.fscanf获取函数的完整可选参数集。