专栏
标签
代码数据迭代问题
一般问题
发布于 2025-05-08 21:40:10
查看 27过去416天

接下来描述一下我的逻辑和我遇到的问题。从valve_PID1输出的tracking_w_need作为气体实际流量同时输入到燃料电池PEMFCyan_zheng1模块f_outZC端口和feedback模块w_actul端口。valve_PID1输出的tracking_w_need作为目标气体流量输入到feedback模块的f_in1端口,通过里面的公式循环。燃料电池输出的功率p反馈到feedback模块p端口。feedback模块输出的信号为w_neednew,到valve_PID1模块的setpoint端口。这就是大概的流程。我解释一下valve_PID1里面的公式setpoint=tracking_w_need;,目的是让setpoint数值不变,直接赋值给tracking_w_need,以w_in1的形式进入feedback模块。通过这几个公式更新迭代数值“algorithm
if error1 / w_in1 <= 0.01 then
w_neednew := w_in1 + a * (p0 - p);
else
w_neednew := w_in1;
end if;

if w_neednew <= 0 then
w_neednew := 0.001;
end if;

equation
test = a * (p0 - p);
error1 = abs(w_in1 - w_actul);
test3 = w_neednew - w_in1;”现在的问题是,我想让上一次的输出的tracking_w_need作为第二次的w_in1输入。但是,feedback输出的w_neednew恒等于setpoint=tracking_w_need,这就导致,通过tracking_w_need=w_in1递推得到,w_neednew = w_in1 ,这与公式w_neednew := w_in1 + a * (p0 - p);相矛盾,显然,前一步的数据未封存更新。你听懂我的问题了吗?想办法帮我修改一下。

所属专栏:Sysplorer基础平台
产品信息:Sysplorer系统建模仿真环境
系统建模
附件 2 个附件(87kb)

全部回答 2

发布于 2025-05-08 21:43:50

矛盾本质上是由于w_in1直接引用了当前时刻的tracking_w_need(即当前时刻的w_neednew),导致算法无法基于前一次迭代的值进行更新。需引入时间步长延迟,保存前一次的tracking_w_need作为下一次的w_in1输入。

发布于 2025-05-09 09:27:20

您好,如果是想要使用延迟模块的话,可以使用 delay 组件,如下图所示;也可以使用 when sample pre 的组合语法,具体使用方式可以查看官网培训课程Modelica语法详解。我们目前不提供模型调试服务。
image.png

用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天