我想修改 modelica 中现有的迟滞模型,以便除了使用死区导致我的控制延迟启动之外,它还考虑自上次关闭周期以来的持续时间。如果关闭周期小于我设置的阈值,即使“canSwitch”条件变为 true,y 也会返回 false(即不是 canSwitch)。这个想法是模仿空调的行为,对于某些空调来说,即使设定值超过死区,如果空调关闭的时间少于 5 分钟,它也会在 5 分钟后才会打开。
下面是我写的代码。它增加了延迟,但仅限于第一个周期。当它变为 true 后,即使 canSwitch 变为 false,它在模拟的其余部分仍然保持 true。我发现这个问题是由于 when 子句仅在发生事件时才处于活动状态。因此,我将“when canSwitch”行编辑为“when initial()”,但现在它给出错误,表明问题被过度指定。请任何有关如何解决此问题的想法将不胜感激。
这是制作交流控制器的另一种方法,所以请原谅我没有直接回答你的问题。
我将使用
Modelica.Blocks.Logical
中的块以图形方式设计控制器模型。我经常发现用这种方式更容易解决问题。下图显示了一个示例实现。
AC 由 RS 触发器打开/关闭,RS 触发器充当存储器,取代了迟滞块。复位条件是温度低于或等于20℃(
T_off
)。设置条件是温度高于或等于 25 °C (T_on
) 并且控制器已关闭 (Q!
) 至少 300 秒。
显然,您可以将控制器模型包装在 SISO 块中以供重用。
右侧的电路代表空调和过程(房间正在冷却加热)。当空调开启时,室温每分钟降低 1 °C。关闭时,室温每分钟升高0.3°C。
值是任意选择的。
模拟结果如下所示