新しく書き込まれたデータをテキスト ファイルから Matlab に "準同時に" 読み取りながら、(C# 経由で) NetworkStream からテキスト ファイルにデータを書き込む良い方法を見つけようとしています。
基本的に、読み取り操作が書き込み操作をブロックせず (逆も同様)、連続する書き込み/読み取り間の遅延が最小限になるように、(別々のプログラムからの) 書き込み/読み取り操作を調整するための適切な方法または手法はありますか?
現在、ネットワーク ストリームから WriteLine ループを介してテキスト ファイルにデータを書き込み (追加) し、Matlab の fscanf 関数をループしてデータを読み取ります。これは、読み取った最後の要素をマークし、ファイル ポインターをその場所に再配置します。
C# コードの関連部分:
(注:私が使用しているループ条件は任意です。現在何が機能するかを確認しようとしています。)
NetworkStream network_stream = tcp_client.GetStream();
string path = @"C:\Matlab\serial_data.txt";
FileInfo file_info = new FileInfo(path);
using (StreamWriter writer = file_info.CreateText())
{
string foo = "";
writer.WriteLine(foo);
}
using (StreamWriter writer = File.AppendText(path))
{
byte[] buffer = new byte[1];
int maxlines = 100000;
int lines = 0;
while (lines <= maxlines)
{
network_stream.Read(buffer, 0, buffer.Length);
byte byte2string = buffer[0];
writer.WriteLine(byte2string);
lines++;
}
}
関連する Matlab コード:
i=0;
while i<100;
a = fopen('serial_data.txt');
b = fscanf(a, '%g', [1000 1]);
fclose(a);
i=i+1;
end
Matlab に読み込まれたデータを見ると、実際のデータの間にゼロの大きなストレッチがあり、最も当惑する部分は、これらの「偽のゼロ」ストレッチ間で読み取られる連続したデータ ポイントの数が大幅に変化することです。
C# と Matlab にそれぞれ遅延 (Thread.sleep と wait(timerObject)) を挿入しようと考えていましたが、それでも、ネットワーク ストリーム経由で受信したデータを常に取得できるとは限りません。これは不可欠です。
アドバイス/提案をいただければ幸いです。