使用实时编辑器创建交互式表单
在实时编辑器中,您可以创建交互式表单或简单的 App 来执行小型、可重复的任务。创建这些表单或 App 时,您可以使用交互式控件来提示提供输入并执行任务。要仅向用户显示格式化文本、控件和结果,请隐藏代码。
此示例说明如何在实时编辑器中创建一个基本的交互式表单,以根据用户提供的输入完成计算。该表单使用下拉列表和数值滑块提示用户进行输入,然后使用按钮根据提供的输入运行计算并绘制图。
要查看 Solar Panel Output Estimator 表单并与之交互,请在 MATLAB® 中打开此示例。
创建表单
您可以通过在 MATLAB 中打开此示例来打开 Solar Panel Output Estimator 表单的副本。要自己重新创建该表单,请创建一个名为 SolarPanelEstimatorForm.mlx
的实时脚本。然后,添加描述性文本和代码,配置控件,并隐藏代码。
添加代码
复制 Solar Panel Output Estimator 表单的代码一节中的描述性文本和代码,根据太阳能电池板的位置、大小和效率计算一组电池板的输出。
配置控件
该表单使用下拉列表和数值滑块提示用户提供输入,然后使用按钮根据提供的输入运行计算并绘制图。
在您复制代码时,控件将被替换为其当前值。要将控件添加回代码中,请使用下拉列表替换 location 变量的值,并使用数值滑块替换 pSize
和 eff
变量的值。然后,对控件进行配置,具体方法是右键点击控件,选择配置控件,并按如下所述指定控件选项:
位置下拉列表 - 将标签设置为
Location:
,并将项目标签和项目值设置为一组位置及其对应的坐标。将 Run 执行选项设置为Nothing
。pSize 滑块 - 将标签设置为
Panel Size (m^2):
,并将最小值和最大值分别设置为0
和40
。将 Run 执行选项设置为Nothing
。eff 滑块 - 将标签设置为
Panel Efficiency:
,并将最小值和最大值分别设置为0
和100
。将 Run 执行选项设置为Nothing
。
要将按钮添加回代码中,请在代码末尾插入一个按钮。然后,右键点击该按钮并选择配置控件,对其进行配置。将标签设置为 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")