2017-04-05 6 views
1

私はSimulinkモデルのデータ出力を監視するために使用するアプリケーション設計者(GUIDEとよく似ていますが、GUIDEよりも優れています)を使用してMATLAB GUIを作成していますリアルタイムMatlab GUIの非ブロッキングUDP受信機

つまり、私は同じMATLABインスタンスで実行されているsimulinkモデルとGUIを持っており、simulinkモデルからUDPを介してパケットを送信し、そのデータをGUIで使用してプロットを更新したいとします。しかし、私はブロックせずにUDPパケットからデータを読み取る方法を知らない。

プロット/フィールドを更新する関数を実行できるようにパケットが受信されたときにハンドラをバインドする方法はありますか?

+0

UDPで通信している場合、GUIをMATLABの別のインスタンスで実行するだけではどうですか? – Suever

+0

@ Suuever私はGUIからSimulinkモデルにアクセスしてモデルワークスペースを書くことができる必要があるので – Ortix92

答えて

0

もちろん、BytesAvailableFcnの横にあるmatlabにはfread/fscanfがブロックされている間(一時的に)ブロックされていない新しいdagatramsのカスタム関数を呼び出すためにdatagramreceivedfcnがあります。あなたは

A非blokcking能力を持っているのSimulinkブロック使用にudpreceive を使用したい場合は

%% standalone main 
%{ 
    see docs/* 
%} 

function exitcode = main(port, remotePort) 

% sanitize input 
if(~exist('port','var') || ~exist('remotePort','var')) 
    disp(['args: port remotePort']); 
    exit(1); 
end 

if ischar(port) 
    port=str2num(port); 
end 
if ischar(remotePort) 
    remotePort=str2num(remotePort); 
end 

% create udp object 
u = udp('127.0.0.1',remotePort, 'LocalPort', port); 

% connect the UDP object to the host 
fopen(u); 
exitcode = 0; 

% since we poll, suppress warning 
warning('off','instrument:fscanf:unsuccessfulRead'); 
warning VERBOSE 

% specify callback on datagram 
while true 
    msgEnc= fscanf(u); 
    % timed out without datagram 
    if isempty(msgEnc) 
     continue 
    end 
    % do sth with msgEnc (which is a readable string) 
    fprintf(u, 'heard sth'); %answer 
end 
end 

:MathWorks社のMATLABでのコールバックについて

events and cbs

コンパイル可能なスタンドアロンのようになります読んで先入れ先出し(FIFO)バッファがデータを受信します。 ステップごとに、データポートは要求された値をバッファから出力します。 ノンブロッキングモードでは、ステータスポートはブロックが の新しいデータを受信したかどうかを示します。

関連する問題