2台のPC間で信号を送受信したい
58 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ray
am 26 Aug. 2021
Kommentiert: Ray
am 29 Aug. 2021
2台のWindows10 PC(PC1、PC2とします)を使って、次のような処理をするための良い案があればご教示願います。
(MATLABのバージョンはR2020aです)
PC1から信号aを送信
PC2が信号aを受信すると、処理Aを開始
PC2は処理Aを終えると、信号a'を送信
PC1が信号a'を受信すると、信号bを送信
PC2が信号bを受信すると、処理Bを開始
PC2は処理Bを終えると、信号b'を送信
(上記を繰り返す)
PC1で常にPC2の状態を監視し、処理を始めるタイミングを制御することが目的です。
このような目的で一般的に利用されている方法や、何か参考になりそうな意見がございましたら、ご教示いただけますと幸いです。
以下、私が試してみた2つの方法について記載します。
------------
上記の目的を達成するために、まずは、2台のPCをLANケーブルで接続し、PC2上に共有フォルダを作成しました。
一方のPCから信号を送信する際、この共有フォルダ上に特定のファイル(例:signal_a.dat)を作成し、もう一方のPCでは、
while ~exist('signal_a.dat', 'file')
end
で signal_a.dat が生成されるのを待機して、while文を抜けたら処理Aを開始するようにしました。
とりあえずこれで期待通りの動作にはなりましたが、わざわざファイルを生成する(しかも信号の種類ごとに別名のファイル)のは冗長なので、もう少しスマートにできる方法はないかと模索しています。
そこで次に、
を参考にして、memmapfile関数を利用する方法を試しました。
上記URLのページに記載されているsend関数とanswer関数について、'tempdir'の部分を2台のPCの共有フォルダに変更しました。
この状態で、1台のPC上でMATLABインスタンスを2つ立ち上げ、一方でsend関数、もう一方でanswer関数を実行すると、期待通りに動作します。
しかし、PC1でsend関数、PC2でanswer関数を実行した場合、PC2がPC1からsendされた情報を受け取れないらしく、処理が進まなくなります。
もっと単純化した例を挙げると,PC1上で
m = memmapfile(filename, 'Writable', true, 'Format', 'uint8');
m.Data(1) = 1; % 元々は 0 で初期化してあるものを 1 に変更
とした後に、PC2上で、
disp(m.Data(1))
を実行すると「0」という値が返ってきてしまいます(本当は「1」になって欲しい)。
memmapfile関数では、LANケーブルで接続した他のPC上のメモリの変更をリアルタイムには読み取り&書き込みできないのでしょう。
詳しい仕組みは理解していませんが、、
0 Kommentare
Akzeptierte Antwort
Toshinobu Shintai
am 26 Aug. 2021
TCP/IPで通信を行い、PC1で処理が終わったタイミングで送信、PC2はそのデータを受信するまで処理を待たせる、ということを行ってはどうでしょうか。以下にTCP/IPの紹介ページがあります。
UDP通信でも可能です。こちらはDSP System Toolboxが必要になります。
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu 用途 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!