Main Content

使用实时编辑器创建交互式表单

在实时编辑器中,您可以创建交互式表单或简单的 App 来执行小型、可重复的任务。创建这些表单或 App 时,您可以使用交互式控件来提示提供输入并执行任务。要仅向用户显示格式化文本、控件和结果,请隐藏代码。

此示例说明如何在实时编辑器中创建一个基本的交互式表单,以根据用户提供的输入完成计算。该表单使用下拉列表和数值滑块提示用户进行输入,然后使用按钮根据提供的输入运行计算并绘制图。

要查看 Solar Panel Output Estimator 表单并与之交互,请在 MATLAB® 中打开此示例。

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

创建表单

您可以通过在 MATLAB 中打开此示例来打开 Solar Panel Output Estimator 表单的副本。要自己重新创建该表单,请创建一个名为 SolarPanelEstimatorForm.mlx 的实时脚本。然后,添加描述性文本和代码,配置控件,并隐藏代码。

添加代码

复制 Solar Panel Output Estimator 表单的代码一节中的描述性文本和代码,根据太阳能电池板的位置、大小和效率计算一组电池板的输出。

配置控件

该表单使用下拉列表和数值滑块提示用户提供输入,然后使用按钮根据提供的输入运行计算并绘制图。

在您复制代码时,控件将被替换为其当前值。要将控件添加回代码中,请使用下拉列表替换 location 变量的值,并使用数值滑块替换 pSizeeff 变量的值。然后,对控件进行配置,具体方法是右键点击控件,选择配置控件,并按如下所述指定控件选项:

  • 位置下拉列表 - 将标签设置为 Location:,并将项目标签项目值设置为一组位置及其对应的坐标。将 Run 执行选项设置为 Nothing

  • pSize 滑块 - 将标签设置为 Panel Size (m^2):,并将最小值最大值分别设置为 040。将 Run 执行选项设置为 Nothing

  • eff 滑块 - 将标签设置为 Panel Efficiency:,并将最小值最大值分别设置为 0100。将 Run 执行选项设置为 Nothing

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

要将按钮添加回代码中,请在代码末尾插入一个按钮。然后,右键点击该按钮并选择配置控件,对其进行配置。将标签设置为 Calculate,并将运行执行选项设置为 Current section。当用户按下该按钮时,当前节中的代码会运行,从而根据下拉列表和滑块的当前值更新计算。

隐藏代码

要在隐藏代码并仅显示控件和结果的情况下以表单形式查看示例,请转至视图选项卡,然后点击隐藏代码。用户现在可以通过从下拉列表中选择值、调整滑块并点击按钮查看结果,与表单进行交互。实时编辑器基于用户提供的输入计算太阳能电池板输出估计值。

Solar Panel Output Estimator 表单的代码

本节提供 SolarPanelEstimatorForm.mlx 实时脚本文件的完整内容,包括描述性文本、代码和示例结果。

Solar Panel Output Estimator

指定电池板的位置。

% 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.

相关主题