evaluateEnergyUseHps脚本

这段代码与之前的evaluateEnergyUseLed代码非常相似,但它是用于评估在HPS(高压钠灯)补光条件下GreenLight模型的能源使用情况。代码通过加载2010年在荷兰Bleiswijk进行的试验数据,模拟温室中的加热需求,并将模拟结果与试验中计算的加热数据进行比较。以下是代码的详细解释:


1. 代码背景

  • 研究背景:代码基于Katzin等人的研究(2020),该研究评估了在LED和HPS(高压钠灯)补光条件下温室的加热需求。
  • 数据来源:代码需要从外部数据文件(dataLED.matdataHPS.mat)加载试验数据,这些数据可以通过DOI链接访问。
  • 模型用途:GreenLight模型是一个开源的温室模型,用于模拟温室环境中的能量流动、作物生长等。

2. 代码结构

(1) 初始化

matlab
复制
tic;
  • 启动计时器,用于记录代码运行时间。

(2) 设置模型参数

matlab
复制
setPointAdd = 0.5; % Addition to the set point to make sure the proportional controller really achieves the desired temperature
simType = 'hps';
seasonLength = 112; % season length in days (data length is 112 days)
firstDay = 1; % days since beginning of data
  • setPointAdd:温度设定点的附加值,用于确保比例控制器能够达到目标温度。
  • simType:模拟类型,这里设置为'hps',表示使用HPS补光。
  • seasonLength:模拟的季节长度(112天)。
  • firstDay:从试验数据的第几天开始模拟。

(3) 加载试验数据

matlab
复制
[outdoor, indoor, controls, startTime] = loadGreenhouseData(firstDay, seasonLength, simType);
  • 加载温室试验数据,包括室外环境数据(outdoor)、室内环境数据(indoor)、控制数据(controls)以及模拟开始时间(startTime)。

(4) 数据预处理

matlab
复制
indoor(:,3) = vaporDens2pres(indoor(:,2), indoor(:,3)); % 将水汽密度转换为水汽压力
indoor(:,4) = 1e6*co2ppm2dens(indoor(:,2),indoor(:,4)); % 将CO₂浓度从ppm转换为mg/m³
  • 对室内环境数据进行单位转换,以便模型使用。

(5) 计算天空温度和土壤温度

matlab
复制
outdoor(:,7) = skyTempRdam(outdoor(:,3), datenum(startTime)+outdoor(:,1)/86400); % 计算天空温度
outdoor(:,8) = soilTempNl(secsInYear+outdoor(:,1)); % 计算土壤温度
  • 使用函数skyTempRdamsoilTempNl计算天空温度和土壤温度,并将其添加到室外环境数据中。

(6) 创建GreenLight模型

matlab
复制
hps = createGreenLightModel('none', outdoor, startTime, controls, indoor);
setParamsBleiswijk2010(hps);
setBleiswijk2010HpsParams(hps); % 设置HPS补光参数
  • 创建GreenLight模型,并设置Bleiswijk 2010试验的参数和HPS补光参数。

(7) 设置加热控制

matlab
复制
hps.d.heatSetPoint = DynamicElement('d.heatSetPoint', indoor(:,1:2)); % 使用测量温度作为设定点
addControl(hps, 'boil', proportionalControl(x.tAir, hps.d.heatSetPoint+setPointAdd, hps.p.tHeatBand, 0, 1)); % 添加锅炉控制
addControl(hps, 'boilGro', proportionalControl(x.tAir, hps.d.heatSetPoint+setPointAdd, hps.p.tHeatBand, 0, 1)); % 添加生长管道控制
  • 设置温室的加热控制逻辑,使用比例控制器调节锅炉和生长管道的加热。

(8) 设置初始作物状态

matlab
复制
hps.x.cLeaf.val = 0.7*6240*10; % 初始叶片干重
hps.x.cStem.val = 0.25*6240*10; % 初始茎干重
hps.x.cFruit.val = 0.05*6240*10; % 初始果实干重
  • 设置作物的初始状态,包括叶片、茎和果实的干重。

3. 求解模型

matlab
复制
solveFromFile(hps, 'ode15s'); % 使用ode15s求解模型
hps = changeRes(hps,300); % 设置输出分辨率为5分钟
  • 使用MATLAB的ode15s求解器求解模型,并将输出时间分辨率设置为300秒(5分钟)。

4. 比较模拟结果与试验数据

(1) 设置管道温度

matlab
复制
hps.d.tPipe.val(:,2) = controls(:,5); % 设置管道温度
hps.d.tGroPipe.val(:,2) = controls(:,6); % 设置生长管道温度
  • 将试验数据中的管道温度和生长管道温度输入到模型中。

(2) 计算能量输入

matlab
复制
hps.d.uPipe = DynamicElement('d.uPipe', [hps.d.tPipe.val(:,1), pipeEnergy(controls(:,5)-indoor(:,2))]); % 计算管道能量输入
hps.d.uGroPipe = DynamicElement('d.uGroPipe', [hps.d.tPipe.val(:,1), groPipeEnergy(controls(:,6)-indoor(:,2))]); % 计算生长管道能量输入
  • 根据试验数据计算管道和生长管道的能量输入。

5. 绘制结果

matlab
复制
plot(300e-6*cumsum(hps.a.hBoilPipe+hps.a.hBoilGroPipe)); % 绘制模拟的加热输入
hold on
plot(300e-6*cumsum(hps.d.uPipe+hps.d.uGroPipe)); % 绘制试验数据计算的加热输入
legend('simulated','calculated from data');
  • 绘制模拟的加热输入和试验数据计算的加热输入,并进行比较。

6. 计算相对误差

matlab
复制
eMeas = 1e-6*trapz(hps.d.uPipe+hps.d.uGroPipe); % 试验数据的总能量输入
eSim = 1e-6*trapz(hps.a.hBoilPipe+hps.a.hBoilGroPipe); % 模拟的总能量输入
errorRatio = eSim./eMeas; % 计算相对误差
  • 计算模拟结果与试验数据之间的相对误差。

7. 保存结果

matlab
复制
toc;
save hpsEnergy
  • 停止计时器并保存模拟结果到文件hpsEnergy.mat

总结

这段代码的主要功能是:

  1. 加载试验数据并预处理。
  2. 创建GreenLight模型并设置参数。
  3. 模拟温室在HPS补光条件下的加热需求。
  4. 将模拟结果与试验数据进行比较,并计算相对误差。
  5. 绘制结果并保存。

通过这段代码,用户可以评估GreenLight模型在HPS补光条件下的性能,并验证模型的准确性。与evaluateEnergyUseLed代码的主要区别在于补光类型(HPS vs. LED)和相应的参数设置。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇