APPdesingn​erを使用した場合の​アプリ間の数値の引き​渡しについて

1 view (last 30 days)
naoya uwa
naoya uwa on 22 Mar 2022
Commented: naoya uwa on 24 Mar 2022
Aというメインアプリにてfor文でループさせ、ある条件(if文)でTrueのときにBアプリを起動させfor文の値をBアプリに渡す方法を教えてください。
具体的には、Aアプリを実行した際に、下記のプログラムが流れて、Bアプリ(record)が立ち上がるように考えており、Bアプリにはfor文のidxの値を渡したいと考えております。
%カメラデータが保管してあるエクセルの読込
caminfo = readtable('camera_adress.xlsx');
caminfo = table2cell(caminfo);
%NWカメラobjectを作成するためにエクセルのカメラ情報を読取camに格納
for idx = 1:height(caminfo)
cam = ipcam(caminfo{idx,1},caminfo{idx,2},caminfo{idx,3});
eval(['cam',num2str(idx) '= cam'])
%もし、4列目の値が1であればrecordアプリを立ち上げて録画を開始。
if caminfo{idx,4} ==1
record%Bアプリ(record.mlapp)
end
end

Answers (1)

Kojiro Saito
Kojiro Saito on 24 Mar 2022
openExample('matlab/TopLevelMultiwindowAppExample','supportingFile','DialogAppExample');appdesigner('MainAppExample');
で2つのアプリ間のデータやり取りの例を確認できます。
メインアプリAのプロパティにアプリBのプロパティを入れておき、
properties (Access = private)
RecordApp % Record app
end
Bの(recordApp.mlapp)のコードオプションの入力引数に「idx」を入れておきます。recordだと既存の関数と名前が競合してしまうので、ここではrecordApp.mlappというファイル名にしています。
コードオプションの入力引数に「idx」を入れると、自動的にBのstartupFcnにidxが追加されるので、この値を使います。
メインアプリAから呼び出すときにAのidxの値をBに渡します。
if caminfo{idx,4} ==1
app.RecordApp = recordApp(idx);
end
また、Aを終了したときにBが終了するように、AのコールバックでUIFigureに対してCloseRequestFcn関数を設定します。
CloseRequestFcnの中では、Bのアプリのオブジェクト(app.RecordApp)をdeleteする行を追加します。
function UIFigureCloseRequest(app, event)
delete(app.RecordApp)
delete(app)
end
以上参考になれば幸いです。
  1 Comment
naoya uwa
naoya uwa on 24 Mar 2022
ご回答頂きありがとうございました。
簡単では、ございますが動作確認し問題がなく動作しました。
しかし、メインアプリAの方の動作がBアプリの動作終了(for文)まで停止するため、目的としては、達成出来ていない状況です。
メインアプリAを流しながらある条件でBアプリを立ち上げてそれぞれをパラで走らせる方法はございますでしょうか。
以上
よろしくお願いいたします。

Sign in to comment.

Categories

Find more on MATLAB Support Package for IP Cameras in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!