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

9 visualizzazioni (ultimi 30 giorni)
naoya uwa
naoya uwa il 22 Mar 2022
Commentato: naoya uwa il 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

Risposte (1)

Kojiro Saito
Kojiro Saito il 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 Commento
naoya uwa
naoya uwa il 24 Mar 2022
ご回答頂きありがとうございました。
簡単では、ございますが動作確認し問題がなく動作しました。
しかし、メインアプリAの方の動作がBアプリの動作終了(for文)まで停止するため、目的としては、達成出来ていない状況です。
メインアプリAを流しながらある条件でBアプリを立ち上げてそれぞれをパラで走らせる方法はございますでしょうか。
以上
よろしくお願いいたします。

Accedi per commentare.

Prodotti


Release

R2021a

Community Treasure Hunt

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

Start Hunting!