2台のPC間で信号を送受信したい

40 views (last 30 days)
Ray
Ray on 26 Aug 2021
Commented: Ray on 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上のメモリの変更をリアルタイムには読み取り&書き込みできないのでしょう。
詳しい仕組みは理解していませんが、、

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 26 Aug 2021
TCP/IPで通信を行い、PC1で処理が終わったタイミングで送信、PC2はそのデータを受信するまで処理を待たせる、ということを行ってはどうでしょうか。以下にTCP/IPの紹介ページがあります。
UDP通信でも可能です。こちらはDSP System Toolboxが必要になります。
  2 Comments
Ray
Ray on 27 Aug 2021
ご回答いただきありがとうございます。
DSP System Toolboxは使用できないので、TCP/IPの方を試して思い通り動作するか検証してみます。
Ray
Ray on 29 Aug 2021
目的を達成することができました。
助言をいただきありがとうございました。
TCP/IPでの通信について調べてみたところ、
によると、tcpclient関数ではPC間の通信はできないとあり、実際に私が即席で書いたコードではPC間の通信を実現できませんでした。
Instrument Control Toolboxに含まれるtcpip関数であればそれが可能になるらしいですが、このToolboxは購入していないため使用できません。
そこで次に、下記URLで配布されているjtcp関数を参考にしました。
こちらで利用されているjavaの関数によってTCP/IPでの通信を可能にし、目的を満たすことができました。

Sign in to comment.

More Answers (0)

Categories

Find more on 用途 in Help Center and File Exchange

Tags

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!