ライブ エディターを使用した対話型フォームの作成
ライブ エディターでは、対話型フォームや単純なアプリを作成して、小規模な反復可能タスクを実行できます。このようなフォームやアプリを作成する際に、入力を促すプロンプトを表示し、タスクを実行するために対話型コントロールを使用できます。書式設定されたテキスト、コントロール、および結果のみをユーザーに表示するには、コードを非表示にします。
この例では、ユーザーが指定した入力値に基づいて計算を実行する基本的な対話型フォームをライブ エディターで作成する方法を示します。このフォームでは、ドロップダウン リストと数値スライダーを使用してユーザーに入力を促すプロンプトを表示し、ボタンを使用して指定された入力値で計算を実行してグラフをプロットします。
ソーラー パネル電力出力推定フォームを表示して操作するために、この例を MATLAB® で開きます。
フォームの作成
MATLAB でこの例を開くことで、ソーラー パネル電力出力推定フォームのコピーを開くことができます。フォームを自分で再作成する場合は、SolarPanelEstimatorForm.mlx
という名前のライブ スクリプトを作成します。次に、説明テキストおよびコードを追加し、コントロールを構成し、コードを非表示にします。
コードの追加
ソーラー パネル電力出力推定フォームのコード セクションの説明テキストおよびコードをコピーして、パネルの位置、サイズ、および効率性に基づいてソーラー パネルのセットの電力出力を計算します。
コントロールの構成
このフォームでは、ドロップダウン リストと数値スライダーを使用してユーザーに入力を促すプロンプトを表示し、ボタンを使用して指定された入力値で計算を実行してグラフをプロットします。
コードをコピーすると、コントロールが現在の値に置き換えられます。コントロールをコードに再度追加するには、変数 "location" の値をドロップダウン リストに置き換え、変数 "pSize
" および "eff
" の値を数値スライダーに置き換えます。次に、コントロールを右クリックし、[コントロールの構成] を選択し、以下のようにコントロールのオプションを指定することで、コントロールを構成します。
"location" ドロップダウン リスト — [ラベル] を
Location:
に設定し、[項目のラベル] および [項目の値] を位置および対応する座標のセットに設定します。[実行] 実行オプションをNothing
に設定します。"pSize" スライダー — [ラベル] を
Panel Size (m^2):
に設定し、[最小値] および [最大値] の値をそれぞれ0
および40
に設定します。[実行] 実行オプションをNothing
に設定します。"eff" スライダー — [ラベル] を
Panel Efficiency:
に設定し、[最小値] および [最大値] の値をそれぞれ0
および100
に設定します。[実行] 実行オプションをNothing
に設定します。
ボタンをコードに再度追加するために、コードの末尾にボタンを挿入します。次に、ボタンを右クリックして [コントロールの構成] を選択し、ボタンを構成します。[ラベル] を Calculate
に設定し、[実行] 実行オプションを Current section
に設定します。ユーザーがボタンを押すと、現在のセクションのコードが実行され、ドロップダウン リストおよびスライダーの現在値に基づいて計算が更新されます。
コードの非表示化
この例をフォームとして表示し、コードを非表示にしてコントロールと結果のみが表示されるようにするには、[ビュー] タブに移動して [コードを非表示] をクリックします。これで、ユーザーは、ドロップダウン リストから選択したり、スライダーを調整したり、ボタンをクリックしたりして結果を表示し、フォームを操作できるようになりました。ライブ エディターは、ユーザーが指定した入力値に基づいてソーラー パネル電力出力推定を計算します。
ソーラー パネル電力出力推定フォームのコード
このセクションでは、説明テキスト、コード、サンプル結果など、SolarPanelEstimatorForm.mlx ライブ スクリプト ファイルの内容全体を示しています。
ソーラー パネル電力出力推定
パネルの位置を指定します。
% Calculate Solar Time location = [40.714 -74.006 -5]; lambda = location(2); % Longitude phi = location(1); % Latitude UTCoff = location(3); % UTC offset if(UTCoff < 0) TZ = "UTC" + num2str(UTCoff); else TZ = "UTC+" + num2str(UTCoff); end january1 = datetime(2016,1,1,"TimeZone",TZ); % January 1st localYear = 2018; localMonth = 6; localDay = 1; localHour = 12; localTime = datetime(localYear,localMonth,localDay,localHour,0,0,"TimeZone",TZ); d = caldays(between(january1,localTime,"Day")); % Day of year solarCorr = solarCorrection(d,lambda,UTCoff); % Correction to local time solarTime = localTime + minutes(solarCorr); % Calculate Solar Declination and Elevation delta = asind(sind(23.45)*sind(360*(d - 81)/365)); % Declination omega = 15*(solarTime.Hour + solarTime.Minute/60 - 12); % Hour angle alpha = asind(sind(delta)*sind(phi) + ... % Elevation cosd(delta)*cosd(phi)*cosd(omega)); % Calculate Air Mass and Solar Radiation AM = 1/(cosd(90-alpha) + 0.50572*(6.07955+alpha)^-1.6354); sRad = 1.353*0.7^(AM^0.678); % kW/m^2 % Calculate Solar Radiation on Fixed Panels gamma = acosd((sind(delta)*cosd(phi) - cosd(delta)*sind(phi)*cosd(omega))/cosd(alpha)); if (hour(solarTime) >= 12) && (omega >= 0) gamma = 360 - gamma; end beta = 180; % Panel azimuth tau = 35; % Panel tilt pRad = sRad*max(0,(cosd(alpha)*sind(tau)*cosd(beta-gamma) + sind(alpha)*cosd(tau)));
パネル サイズおよび効率性の値を指定します。
% Calculate Panel Size and Efficiency pSize = 32; % Panel size in m^2 eff = 25; % Panel efficiency pElec = eff*pSize*pRad; % Panel electric output in kW
結果:
disp("Expected electrical output = " + num2str(pElec) + " kW")
Expected electrical output = 717.5021 kW
% Calculate Power Generation Over Time isFixed = 1; date = datetime(localYear,localMonth,localDay,"TimeZone",TZ); [times,sRad,pRad] = hourlyPanelRadiation(date,lambda,phi,UTCoff,tau,beta,isFixed); plot(times,sRad,times,pRad) title("Solar and Panel Radiation for " + string(date,"mmmm dd yyyy")) xlabel("Hour of Day"); ylabel("Radiation, kW/m^2") legend("Available Solar Radiation","Solar Radiation on Panel","Location","South")