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 コールバック プロパティを使用してトリガーされるtestdummy側に関数「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 プロパティを変更する必要があると言っています。これを行うと、入力バッファ内のすべてが失われます! プロパティを変更しても、入力バッファ内のデータが失われないようにするにはどうすればよいですか?