You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Modelica滞环模型以实现空调式停机后延时启动逻辑?

Modelica滞环模型修复:停机时长判断逻辑实现问题

问题分析

你遇到的核心问题是:

  • 原代码仅处理了首次启动的延时逻辑,未捕捉canSwitch从true切换为false的状态变化,导致停机时输出y始终保持true
  • 改用when initial()后触发过约束错误,是因为initial()仅在模型初始化时执行一次,无法处理后续的状态更新,同时可能和离散变量的初始值定义冲突

正确实现方案

下面是符合需求的Modelica代码,核心是通过离散状态变量跟踪停机状态和时间,在canSwitch状态变化时触发逻辑判断:

model HysteresisWithMinOffTime
  input Boolean canSwitch; // 死区判定后的启动允许信号
  parameter Real minOffTime = 300; // 最小停机时长(单位:秒,对应5分钟)
  output Boolean y; // 最终控制输出

  discrete Real lastOffTime(start=0); // 记录上次停机的时间点
  discrete Boolean isOff(start=true); // 当前是否处于停机状态
protected
  Real currentTime = time;
equation
  // 捕捉canSwitch的状态跳变,处理启停逻辑
  when change(canSwitch) then
    if not canSwitch then
      // 切换至停机状态:记录停机时间,置输出为false
      lastOffTime = currentTime;
      isOff = true;
      y = false;
    else
      // 尝试启动:判断停机时长是否满足阈值
      if currentTime - lastOffTime >= minOffTime then
        isOff = false;
        y = true;
      else
        // 停机时长不足,保持停机状态
        y = false;
      end if;
    end if;
  end when;

  // 初始化逻辑:设定初始状态为停机
  when initial() then
    isOff = true;
    y = false;
    lastOffTime = 0;
  end when;
end HysteresisWithMinOffTime;

关键修复点说明

  • 离散状态变量:用discrete修饰lastOffTime和isOff,确保状态更新是离散事件触发,避免连续变量的约束冲突
  • 状态跳变捕捉:使用change(canSwitch)作为触发条件,覆盖canSwitch从true到false、false到true的所有跳变场景,确保停机时能正确记录时间并置输出为false
  • 启动判断逻辑:当canSwitch变为true时,先计算当前时间与上次停机时间的间隔,满足阈值才启动输出
  • 初始化隔离:单独用initial()处理初始状态,避免和后续事件逻辑冲突,解决过约束问题

内容的提问来源于stack exchange,提问作者Shalomated

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:08:19