为了使室内保持舒适的温度,许多家庭都会使用暖气或空调一类的温度调节装置。一个简单的温控器通常具有开 和 关 两个设定点,并以此来实现对温度的控制。只要使用事件 接口,您就能轻而易举地在 COMSOL Multiphysics 中模拟此类控制方案,具体操作请参考之前发布的一篇博客文章。在本文中,我们将在温控器仿真中加入延时功能,使加热器在开启与关闭操作之间保持一定的时间间隔。
温控器为什么采用延时功能
暖气或加热器中典型的温控器通常有两个温度设定点:
- 开,此时将热量调节到最高
- 关,此时将热量关闭
在设置时,您只需要手动输入一个温度设定点,系统将以此温度为中心,自动将调高或调低后的温度设为第二个设定点。讨论温控器的博客文章专门介绍了一种适用于模拟此类控制方案的方法。今天,我们将在温控器仿真中加入延时功能,让加热器在切换状态后保持一段时间不变。
加入延时功能的原因有很多,其中最重要的一点是为了防止加热器发生短循环。反复开关设备很可能会导致系统部件过度磨损,造成不必要的维修成本。
许多不同的延时方案都能有效地防止短循环。最常见的一种方法是让加热器在由开启状态切换到关闭状态时,延迟一段时间再完成切换。下面我们来看一看如何在 COMSOL Multiphysics 中模拟这一控制方案。
在 COMSOL Multiphysics 中实现温控器的延时功能
现在假设您建立了一个房屋传热模型(或基于其他系统),并且希望通过带延时功能的温控器来控制屋内的加热器。实现方式为指定模型中的一点作为温控器温度传感器的安装位置,如需了解更具体的信息请参考之前的一篇关于模拟温控器的博客文章。正如上文所述,我们将使用事件 接口来控制模型中加热器的开/关状态。
房屋的传热模型。温控器能够监测传感器温度,并控制加热器的开/关状态。
在开始设置之前,我们必须先详细说明一下我们希望温控器具有怎样的功能:温控器模型应具有上限设定值和下限设定值,并且我们希望加热器在指定的延迟时间内保持当前的开启或关闭状态。我们可将其概括为以下两条语句:
- 若加热器的关闭状态超过了指定的延迟时间,并且室内温度低于下限设定值,则打开加热器。
- 若加热器的开启状态超过了指定的延迟时间,并且室内温度高于上限设定值,则关闭加热器。
这两个语句可以写入事件 接口。借助此方法,我们就能方便地追踪自上一次切换温控器到当前为止所经过的时间。下方的软件截图显示了如何设置相关的条件。
离散状态 接口定义了两个离散变量,其作用是确定加热器的状态。
上图中的事件 接口包含了多个特征。最上方的是离散状态 接口,其中两个离散变量分别名为 HeaterState
和 TimeOfSwitch
。HeaterState
变量的初始值为 1,这意味着当仿真开始时,加热器处于开启状态。该变量同时在传热固体 接口中被用作所施加的热通量的乘数。只要将 HeaterState
变量设为零,便可以关闭加热器。TimeOfSwitch
变量的作用是存储上一次切换事件发生之后的时长。该变量的初始值为 0,这意味着当 t=0
时,加热器状态已经完成了切换。
只有当事件被触发时,上述两个离散状态 变量才会进行更改。为此,我们需要检查自上一次切换事件到当前为止的时间,还要以上限与下限设定值为基准,检查传感器的温度。如下方截图所示,这些操作都可以在指示器状态 接口中执行。
指示器状态 接口定义了用于触发事件的三个不同的指示器。
上方截图显示了仿真过程中三个被跟踪的指示器。第一个 TurnOn
指示器用于计算表达式 T_bot-T_s
的值。当打开加热器时,T_bot-T_s
即刻由负变正,其中 T_bot
是全局参数,变量 T_s
表示传感器温度,其定义使用了点积分耦合 算子,关于温控器的博客文章介绍了这一点。同样地,TurnOff
指示器对表达式 T_s-T_top
进行计算,当关闭加热器时,它由负值变为正值。
OkToSwitch
指示器用于计算 t-TimeOfSwitch-Delay
的值,若加热器的开启或关闭状态超过了指定的延迟时间,其结果将由负值变为正值,其中 Delay
也是全局参数。上述离散状态和指示器状态都用于触发下方截图中的两个隐式事件。
第一个 隐式事件用于控制打开加热器的时间。
如上方截图所示,第一个隐式事件 的作用是打开加热器。事件条件 为 (OkToSwitch>0)&&(HeaterState==0)&&(TurnOn>0)
,该逻辑条件可以解读为:如果自上一次切换事件发生之后的时间超出指定的延迟时间,并且如果加热器当前处于关闭状态,同时如果传感器温度低于开启状态的限定温度,此时触发隐式切换事件。当事件被触发后,求解器将重新启动,并将 HeaterState
重新初始化为 1,然后便会打开加热器。此外,TimeOfSwitch
被重新初始化为当前时间 t
。之后两个变量保持不变,直至另一个隐式事件被触发。
第二个 隐式事件用于控制关闭加热器的时间。
如上方截图所示,第二个隐式事件 与第一个隐含事件 几乎完全相同,只不过第二个触发的是关闭事件。当满足条件 (OkToSwitch>0)&&(HeaterState==1)&&(TurnOff>0)
时,第二个事件将 HeaterState
重新初始化为零,同时将 TimeSinceSwitch
重新初始化为当前时间。
您可能会好奇:为什么在以上两个隐式事件中,我们总是先检查加热器是否关闭,然后才触发开启事件(反之亦然,先检查加热器是否开启,再触发关闭事件)。这种专门的检查是为了防止过于频繁地触发任意事件并重新初始化 TimeOfSwitch
。模型中其他边界条件发生一些变化或波动时,系统可能会自然地进入这样一种状态:在未加热的情况下,传感器温度逐渐升高,随后超过上限设定值;或者虽然打开了加热器,但传感器温度依旧低于下限设定值。我们不希望这些情况致使任何事件被触发,所以才要进行特别的检查。
利用这些特征,我们顺利地延迟了温控器的切换时间。在执行求解之前,一定要确保离散状态、HeaterState
变量和 TimeOfSwitch
变量的初始值与加热器的初始状态和上一次切换事件相匹配。另外要记住,您可能需要调整事件容差,具体的操作可以参考专门讨论温控器的文章。
现在让我们一起来看看结果。
带延迟功能的温控器只能每隔五分钟切换一次。水平虚线表示温控器的设定温度点。
我们可以从上图中观察到温控器的延迟行为。传感器的初始温度低于两个温度设定点,且时间为零时加热器被打开。大约七分钟后,传感器温度达到上限设定点,此时加热器关闭。紧接着,系统开始相当迅速地冷却,但是直到五分钟之后,温控器才能重新启动。在重新启动之前,温控器温度逐渐降低到设定值以下。加热器打开后,系统温度逐渐上升,同样由于系统中的五分钟延迟切换设置,最终温度超过了上限设定点。我们可以在一段时间内看到“超出”和“过低”现象上不断地重复进行。
关于如何在温控器仿真中加入延时效果的结束语
学会本文介绍的技巧,您就能在温控器模型的任意切换事件之间加入延时设置,这一技巧也适用于许多现实中的控制方案。温控器仿真中是否具有延迟的主要区别在于前者引入了指示器状态 变量,它能够追踪温控器的切换时间。
当然,这种方法具有广泛的应用意义,而不仅仅局限于温度控制。在COMSOL Multiphysics中,任何瞬态问题都可以使用事件 接口来解决。
- 如果您对文章中的技术内容有不理解的地方,或希望学习使用 COMSOL Multiphysics 来满足建模需求,请随时与我们联系
- 阅读相关的博客文章,了解有关事件 接口和房屋热建模的更多信息:
评论 (0)