0

Matlab でシリアル ポート デバイスを構築しようとしています。「COM1」と「COM2」の 2 つのデバイスがあります。「COM1」は、シリアルポート「COM2」に非同期的にデータを書き込みます次のように、'COM1' と 'COM2' の代替名があります。

global serialcom
serialcom=serial('COM1'); %Serial Communication portal COM 1
global testdummy
testdummy=serial('COM2'); %Serial Communication portal COM 2

testdummy 関数をトリガーするtestdummyの入力バッファー内のバイト数は 2 であり、これは testdummy.BytesAvailableFcnCount フィールド (下記) を使用して指定されます。

testdummy.BytesAvailableFcnMode = 'Byte';
testdummy.BytesAvailableFcnCount = 2;
testdummy.BytesAvailableFcn = @testdummycomfunction;

Matlab の BytesAvailable コールバック プロパティを使用してトリガーされるte​​stdummy側に関数「testdummyfunction」があります。この関数の構造は次のとおりです。

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,'%c',2); %Reads the data sent form serialcom

end

ここで、testdummy に出力する文字列が 2 バイトより大きい、たとえば 10 バイトであるとします。データを testdummy に非同期で書き込むので、bytes available 関数が初めてトリガーされたときに、そこから 2 バイトが読み取られます (これらの 2 バイトは syncbyte のように機能します。正しければ、残りを読み取ることができることを意味します)。 )。

ここで、testdummy.BytesAvailableFcnCount プロパティを 8 に変更します。残りの8バイトを読み取ることができるようにします。ただし、Matlab は、最初にシリアル ポートを閉じて testdummy.BytesAvailableFcnCount プロパティを変更する必要があると言っています。これを行うと、入力バッファ内のすべてが失われます! プロパティを変更しても、入力バッファ内のデータが失われないようにするにはどうすればよいですか?

4

1 に答える 1