这段代码是一个完整的温室气候模型模拟流程,用于 HPS(高压钠灯)照明系统 的场景。它加载数据、设置模型参数、运行模拟并保存结果。以下是代码的详细解释:
代码逻辑
1. 模拟参数设置
-
setPointAdd
: 加热设定点的偏移量(例如0
或0.5
)。 -
simType
: 模拟类型(例如'hps'
表示高压钠灯照明系统)。 -
filter
: 数据过滤类型(例如'none'
表示不进行过滤)。 -
simRes
和ctrlRes
: 模拟和控制的时间分辨率(以秒为单位)。 -
scenStart
和scenEnd
: 模拟场景的起始和结束索引。 -
numSim
: 模拟场景的数量。 -
saveTo
: 保存结果的路径和文件名。 -
seasonLength
: 模拟的季节长度(以天为单位)。 -
firstDay
: 数据开始的日期(以天为单位)。
2. 加载数据
-
使用
loadGreenhouseData
函数加载温室的环境数据(如室外温度、室内温度、控制参数等)。 -
对加载的数据进行预处理:
-
将水蒸气密度转换为水蒸气压力。
-
将 CO2 浓度从 ppm 转换为 mg/m³。
-
3. 计算附加数据
-
计算天空温度和土壤温度,并将其添加到
outdoor
数据中。
4. 创建模型
-
使用
createBvModel
函数创建温室模型bv
。 -
根据
simType
设置模型参数(例如setHpsParams
)。 -
调整模型的其他参数,例如:
-
cLeakage
: 泄漏系数。 -
aRoof
: 屋顶通风面积。 -
kBlScr
和kThScr
: 黑屏和保温屏的流量系数。 -
cWgh
和cDgh
: 通风系统的风压系数和排放系数。 -
初始化作物的碳含量(叶、茎、果实)。
-
5. 设置加热控制
-
使用
proportionalControl
函数设置加热控制逻辑:bv(n).u.boil = proportionalControl(x.tAir, bv(n).d.heatSetPoint+setPointAdd, bv(n).p.tHeatBand, 0, 1);
-
设置加热系统的功率:
bv(n).p.pBoil.val = 125*bv(n).p.aFlr.val; bv(n).p.pGroBoil.val = 125*bv(n).p.aFlr.val;
6. 运行模拟
-
使用
ode15s
求解器运行模拟:odeSolve(bv(n), 'ode15s', []);
-
模拟完成后,调整模型的时间分辨率(
changeRes
函数)。
7. 计算能量输入
-
根据控制数据计算实际的加热能量输入:
bv(n).d.uPipe = DynamicElement('d.uPipe', ... [bv(n).d.tPipe.val(:,1), pipeEnergy(controls(:,5)-indoor(:,2))]); bv(n).d.uGroPipe = DynamicElement('d.uGroPipe', ... [bv(n).d.tPipe.val(:,1), groPipeEnergy(controls(:,6)-indoor(:,2))]);
-
绘制模拟值和实际值的累积加热能量输入曲线。
8. 保存结果
-
将模拟结果保存到文件中:
save(saveTo);
9. 提示音
-
使用
beep
函数发出提示音,表示模拟完成。
关键点
-
数据加载与预处理:
-
从外部数据源加载温室环境数据,并进行必要的单位转换和计算(如水蒸气压力、CO2 浓度、天空温度、土壤温度)。
-
-
模型创建与参数设置:
-
根据模拟类型(HPS)设置模型参数。
-
调整通风系统、加热系统、作物生长等参数,以反映 HPS 照明系统的影响。
-
-
加热控制:
-
使用比例控制逻辑设置加热系统的控制策略。
-
计算加热系统的能量输入,并与实际数据进行比较。
-
-
模拟运行:
-
使用数值方法(
ode15s
)求解模型的微分方程,模拟温室环境的动态变化。
-
-
结果保存:
-
将模拟结果保存到文件中,便于后续分析和比较。
-
总结
这段代码的主要功能是加载数据、设置模型参数、运行温室气候模型模拟,并保存结果。通过调整参数和运行模拟,可以分析 HPS 照明系统对温室环境的影响。代码结构清晰,功能明确,便于扩展和修改。