基于模型的设计(MBD)在空调控制软件中的开发实践
2021-12-24杨敏
杨敏
(特灵科技亚太研发中心,上海 200051)
1 引言
随着大众对生活环境期望的提高,空调的功能需求不断提升,空调控制系统已然成为空调产品和建筑工程的核心和关键。作为大型建筑控制系统灵魂的空调控制软件,其开发技术与方法已成为行业的重点研究对象。
本研发中心承担开发的某空调控制工程项目,规模较大,采用了基于模型的设计(Model Based Design,MBD)的理念与技术。该项目在开发过程中,就其控制软件,尝试以Matlab/Simulink通用软件为基础平台,有机融合了架构筹划、算法设计、模型搭建、程序编写、代码生成、数据分析、模拟仿真、全程协调等于一体,其过程涵盖了传统开发模式的所有环节和要素,在各要素间无缝衔接,并运用数学运算和可视化等方法进行了搭建模型和协同开发[1]。本文重点介绍其中算法模块结构设计、控制算法代码生成和集成、仿真平台搭建和仿真测试过程等内容。
2 传统开发与MBD的对比
1)传统的大型空调控制软件开发流程通常包含3个环节,各环节相对独立又互为关联,如:
(1)算法工程师根据项目基本需求设计算法,并在Matlab非图形界面下,采用纯数学方式计算或在Simulink环境下简单建模,在进行初步模拟验证后输出设计描述文档;
(2)软件工程师接收和消化算法工程师提交的设计后,借助于实体控制器编写程序和代码,形成一体化的完整控制软件;
(3)系统工程师在实验室环境下对控制算法和软件逻辑进行针对性验证。
2)根据实际开发实践的经验和效果,上述传统开发模式存在以下明显弊端:
(1)限于专业知识、开发经验、能力与表达等因素,软件工程师与算法工程师对控制需求和算法的理解常有差异,交付的软件能否准确实现算法意图存在较大不确定性;
(2)限于测试条件,许多控制工况难于在实验室环境下进行客观模拟或者完整实现;
(3)实验室环境下的测试成本昂贵且非常耗时;
(4)整个开发过程的工作环境、信息收集、需求研判、方案拟订等诸多环节相对而言难于独立,需要交叉配合的环节较为繁复,过程返工频次较多。
3)本项目的空调控制软件开发引入了MBD的理念和技术,其质量和效率等方面所显现的优势,为传统开发模式难以比拟,主要体现在以下几方面。
(1)引入模块概念,软件架构清晰。现代大型空调系统普遍具有这样一个显著特点,即控制的需求多、环节多、设备多。因此,在应用MBD技术设计算法模型时,宜引入解耦设计思路,即将整个空调控制系统解耦成多个低耦合度的子系统,而诸如温度控制、压力控制、通风控制、设备输出保护等各子系统又有着独立的输入和输出,以模块化形式实现各自不同的控制目标。在Matlab/Simulink交互式环境下,各模块作用及相关数据关联与流动状况清晰可见[2]。
(2)直接生成代码,开发效率陡增。除了将本项目所生成的算法代码输入空调控制软件平台外,还可以直接通过Simulink Embedded Coder代码生成器依据对象ToolChain(交叉编译工具链)直接生成嵌入式算法代码,继而进行HIL(Hardware In Loop,硬件在环)仿真测试,其中无须手写代码,也弱化了传统模式下算法工程师与软件工程师因控制需求与算法等理解差异而产生的波折与矛盾,提高了开发质量和效率。
(3)模拟实际工况,测试成本锐减。实验室环境下,大型空调控制软件的测试成本昂贵,且耗时费力,而在Matlab/Simulink环境下,采用Plant Model结合控制算法模型的仿真方式,即能有效模拟控制软件的长时间运行状态,仅仅几秒的模拟计算便能生成传统模式下通常需要一整天运算的数据,其效率可见一斑。
另外,在酝酿和设计本项目的实验室环境下模拟系统(或设备)及其操作方案时,先行参照一些基本参数和历史模型,预设Plant Model;投建实验室相关系统(或设备)期间,依然持续采集和完善相关数据,及时优化、完善Plant Model,然后验证算法。由此,算法工程师摆脱了既往需具备实验条件后才能较为可靠地验证算法的传统方式,缩短了项目开发周期,也减少了各项资源投入。
3 依托MBD进行算法模块结构设计
3.1 模块化结构开发
大型空调系统中一般设有多个控制目标,如室内温度、湿度、管道压力,以及节能需求和优化等,各个环节有机衔接为一套稳定高效的控制算法。相应的,在本项目的Simulink模型设计中,将各个控制目标解耦合成为独立的subsystem(子系统)和若干下属子系统,设温度控制、压力控制、通风控制、设备输出保护等模块,形成模块化结构(见图1)。在Matlab/Simulink开发环境下,将各个子系统分别保存为独自文件,并定义接口,以便扩展、维护和多人合作开发。通过各类子系统或模块之间的有序连接,实现数据从输入端到输出端的传递。
图1 空调控制算法模块结构示意图
3.2 Simulink模块库在设计中的应用
Simiulink模块库是Simulink预置的功能模块工具箱,适用于设计中搭建模型,其中有标准模块库(如数学、逻辑和位操作,子系统,自定义函数,等等)、扩展与专业库(如状态图,测试模块,控制系统模块,等等),以及用户自定义模块,如图2所示。
图2 Simulink模块库(部分)
结合本项目算法模块结构设计,重点介绍几种常用的Simulink模块应用。
1)状态图(State Flow)
状态图是一种以图形化方式描述对象状态变化迁移的工具。基于标准建模语言(UML),Simulink的状态图作为一个子系统嵌入到模型中,完成状态跳转和行为时序。
图3 为风机关闭时序状态图,表示当所有制冷/制热设备都关闭并维持设定时间后,才能关闭风机,以保证设备安全。图3中,左、右状态框分别显示制冷/制热的运行状态和关闭状态,其间通过设备开关进行切换,即状态跳转至关闭状态后启动计时,并在计时结束后控制风机停止。
图3 风机关闭时序状态图
2)Truth Table(真值表)
本 项 目ThermoStat(恒 温 器)中,采 用6个输入开关的组合来决定系统模式,即Emergency Heat(快 速 制 热)、Heat1~4(制 热1~4挡)、Cool1~4(制 冷1~4挡)、Fan Only(吹 风)和Off(关机)。其实现方式为:
(1)在表1的Truth Table的Condition Table(条件表)中,以X、Y1、Y2、W1、W2和G 6个开关作为输入Condition,组合为D1~D14的14种结果;在Actions中,示出编号1~14,配合表2使用。
表1 Condition Table(条件表)
(2)表2的 Action Table(动作表),对应表1的Action编号执行相关动作,模式输出设置分别为紧急制热、制热、制冷、风扇和关机等。
表2 Action Table(动作表)
3)Matlab Function
虽然Simulink模块库蕴藏着丰富的模块,但对于某些领域或场景的应用仍具一定局限性,如相关模块与模型搭建需求匹配性较低,或相关模块可读性较差以及不便直接调用模块等,此时,可 启 用Matlab Function,用Matlab的M语言自行手写代码。较之Simulink支持的C语言代码,M语言更为简洁明了,其内置有支持算法模块化结构设计的函数,如线性插值LookupTable、矩阵操作的多种运算等可直接调用。本项目中,应用了M语言编写计算焓值的Matlab Function(见图4),而在Simulink中直接调用该Matlab Function计算函数(见图5)。
4 控制算法代码生成和集成
Simulink的 代 码 生 成 器(Simulink Coder和Embedded Coder)工具箱提供了将模型转换为C/C++代码,并对代码进行审查和优化的功能[3]。在实际应用中,需要在模型中配置求解器(Solver)和系统目标文件(System target file),其中:
1)求解器是Simulink提供的一系列对于计算仿真步长的解算方法。本项目的生成代码应用中,由于程序被周期性地调用,所以选择定步长离散求解器。
2)系统目标文件是一种能被代码生成器用来生成在特定目标硬件或特定操作系统执行代码的文件。Simulink预置有多种系统目标文件,常用的有grt.tlc(适用于Visual C/C++的目标文件)和ert.tlc(适用于嵌入式系统的目标文件),本项目根据自身的应用场景,选择了后者。
本项目研发中,将Simulink生成的C/C++代码,通过自行编写的Wrapper(包裹代码)嵌入已建的控制软件平台进行编译,以实现算法模块与空调控制软件平台之间的数据交互,如图6所示。
图6 控制算法代码生成和集成系统示意图
图6 为控制算法代码生成和集成系统示意,其中,控制算法程序的运行方式为:空调控制软件平台周期性地通过Wrapper模块,从算法模块中调用算法程序,并向其输入诸如传感器值、设备状态等经转化为匹配格式的信息,然后提取计算结果,转换为约定的数据格式后输入空调控制软件平台,以执行后续步骤。
5 仿真测试平台搭建和仿真测试过程
当完成控制算法模型后,需对控制算法进行仿真调试,即在特定的条件下,输入各种工况和参数来测试控制效果。针对本项目所开发的仿真测试平台,其主体由测试模块和测试界面应用程序等组成,如图7所示。该平台主要作用为:
图7 仿真测试平台示意图
1)由测试界面设定所需的测试工况;
2)将一系列工况记录于Excel专用表格,一并导入Matlab/Simulink平台,以测试不同工况切换后的功能状况;
3)重现某些特殊工况,以对比调整模型前后的输出结果。
5.1 测试模块
本项目中,测试模块采用Simulink创建,将控制算法模块作为子系统予以调用,向其提供算法数据源和测试数据源,使其在各种模拟工况下进行仿真测试。其中:算法数据源包括系统类型、模式设定、温度、压力等传感器的测量值和设定值,以及各设备运行状态等;测试数据源或是测试人员通过人机交互界面输入的数据,或是存储于Excel专用表格中的历史数据,或是Plant Model的模拟数据进行闭环控制[4]。
以下着重说明Plant Model在测试模块中的应用。
本项目的Plant Model由空调设备模型和环境模型两部分组成。开发中,引入了本研发中心为适应自有的计算机设备而自行开发的个性化Plant Model通用设计模块,用于测试模型的输出模拟反馈。由图8、图9所示,当Plant Model获得当前空调设备模型的压缩机运行状态、风阀开度等输出信息后,结合Zone Model(环境模型)所设定的房间大小、负载、室外温度、湿度等测试状态信息进行逻辑分析和运算,从而模拟出室内温度和换热器温度等,并反馈给控制算法模型。
图8 Plant Model和控制算法模型关系图
图9 空调模型与环境模型关系图
由于Plant Model所涉内容较多、算法复杂、仿真速度较慢等因素,在本项目开发阶段初期,采取了从Plant Model提取特征数据进行线性插值的方法,以适当简化Plant Model,提高仿真效率;当进入常规测试阶段,则依然使用完整的Plant Model。
同时,在实验室环境下测试空调控制软件,因受条件制约,难于模拟如同工程实地运行状态下的所有工况,一般仅选择性地模拟若干典型工况。但是,考虑到空调系统对环境对象的敏感性,以及控制环节诸多关系的复杂性,就大型空调控制软件而言,仍需择取较为完整的工况进行仿真。而利用Plant Model,可以简捷地模拟各种可能的运行工况,从而了解控制方案的初步效果。
5.2 测试界面
Matlab/Simulink通用软件作为可视化仿真工具,支持系统设计、功能仿真、自动代码生成以及嵌入式系统的连续测试和验证。
本项目中,借助于Matlab专业软件的APP Designer工具,开发了包含数据状态、参数设置等众多功能与信息的个性化人机交互界面(见图10),与利用Matlab/Simulink平台所开发的算法模型及测试环境等进行数据交换,从而直接从本项目自身特点和需求着手,进行Simulink可视化仿真。
图10 人机交互界面
5.3 仿真测试实例
基于MBD,本项目自建模至测试阶段的整个开发过程十分简洁流畅,随时可在仿真测试状态下进行迭代,使控制算法模型逐步得到优化。
本项目处于仿真测试时,除了配备Simulink Scope(仿真示波器)观测波形和数据外, 还常用Simulink Data Inspector(仿真数据检查器)检查信号波形和数据,借以辅助性比较、验证。
如图11所示,为借助于Simulink Data Inspector所显示的本项目算法修改前后两次仿真差异对比,其上图为室内温度比较,下图为室内温度容差比较,非常直观和清晰。鉴于第一次模拟仿真显示的室内温度控制不甚理想,经修改算法,第二次模型仿真较第一次有了一定改善。
图11 仿真结果比较
本项目研发中,便是通过如此一次次迭代仿真测试和修改算法,直至取得满意结果。
6 结语
近年来,MBD技术在汽车制造等行业的产品工程设计方面成效显著,但在大型空调控制软件开发方面的案例屈指可数。本研发中心基于MBD理念与技术,依托Matlab/Simulink平台所开发完成的北美某大型空调控制工程控制软件,其系统完整简洁,架构脉络清晰,模块无缝衔接,一定程度上浓缩和优化了既往空调控制软件的技术和知识,最大限度地消除了传统开发方式的弊端,提高了软件质量和工作效率,有效缩短了软件开发周期,显示了其开发技术在传统模式基础上实质性地跨上了一个新台阶。
目前,对于大型空调控制系统,实验室环境下的测试尚不可少,但有机融合实验室试验与软件模拟仿真测试两种方式,取长补短,无疑是开发、测试空调控制系统的最佳途径。尤其在软件模拟运行基础上获得的初步数据和结果,能够有效地为后续实验室试验积累经验和消除试验设备运行时的隐患。