メインコンテンツ

ライブ エディターを使用した対話型フォームの作成

ライブ エディターでは、対話型フォームや単純なアプリを作成して、小規模な反復可能タスクを実行できます。このようなフォームやアプリを作成する際に、入力を促すプロンプトを表示し、タスクを実行するために対話型コントロールを使用できます。書式設定されたテキスト、コントロール、および結果のみをユーザーに表示するには、コードを非表示にします。

この例では、ユーザーが指定した入力値に基づいて計算を実行する基本的な対話型フォームをライブ エディターで作成する方法を示します。このフォームでは、ドロップダウン リストと数値スライダーを使用してユーザーに入力を促すプロンプトを表示し、ボタンを使用して指定された入力値で計算を実行してグラフをプロットします。

ソーラー パネル電力出力推定フォームを表示して操作するために、この例を MATLAB® で開きます。

Solar Panel Output Estimator form, with code hidden, showing sample input selections and the resulting calculation and output plot

フォームの作成

MATLAB でこの例を開くことで、ソーラー パネル電力出力推定フォームのコピーを開くことができます。フォームを自分で再作成する場合は、SolarPanelEstimatorForm.mlx という名前のライブ スクリプトを作成します。次に、説明テキストおよびコードを追加し、コントロールを構成し、コードを非表示にします。

コードの追加

ソーラー パネル電力出力推定フォームのコード セクションの説明テキストおよびコードをコピーして、パネルの位置、サイズ、および効率性に基づいてソーラー パネルのセットの電力出力を計算します。

コントロールの構成

このフォームでは、ドロップダウン リストと数値スライダーを使用してユーザーに入力を促すプロンプトを表示し、ボタンを使用して指定された入力値で計算を実行してグラフをプロットします。

コードをコピーすると、コントロールが現在の値に置き換えられます。コントロールをコードに再度追加するには、変数 "location" の値をドロップダウン リストに置き換え、変数 "pSize" および "eff" の値を数値スライダーに置き換えます。次に、コントロールを右クリックし、[コントロールの構成] を選択し、以下のようにコントロールのオプションを指定することで、コントロールを構成します。

  • "location" ドロップダウン リスト — [ラベル]Location: に設定し、[項目のラベル] および [項目の値] を位置および対応する座標のセットに設定します。[実行] 実行オプションを Nothing に設定します。

  • "pSize" スライダー — [ラベル]Panel Size (m^2): に設定し、[最小値] および [最大値] の値をそれぞれ 0 および 40 に設定します。[実行] 実行オプションを Nothing に設定します。

  • "eff" スライダー — [ラベル]Panel Efficiency: に設定し、[最小値] および [最大値] の値をそれぞれ 0 および 100 に設定します。[実行] 実行オプションを Nothing に設定します。

Configuration windows for the drop-down list and the two sliders

ボタンをコードに再度追加するために、コードの末尾にボタンを挿入します。次に、ボタンを右クリックして [コントロールの構成] を選択し、ボタンを構成します。[ラベル]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")

Figure contains an axes object. The axes object with title Solar and Panel Radiation for 0000 01 2018, xlabel Hour of Day, ylabel Radiation, kW/m Squared baseline contains 2 objects of type line. These objects represent Available Solar Radiation, Solar Radiation on Panel.

参考

トピック