modelica - Modelica - 在模拟期间冻结特定时间值
问题描述
我遇到的问题可以在 Fortran 等因果环境中轻松解决,但在 Modelica 中证明是困难的,考虑到我的知识有限
考虑一个带有入口和出口的体积。入口质量流量是指定的,而出口质量流量是根据体积中的压力计算的。当体积中的压力超过设定点时,出口面积开始从其初始值线性增加至最大值并随后保持固定。换句话说:
A = min( const * (t - t*) + A_0, A_max)
if p > p_set
where t* = the time at which pressure in the volume exceeds the set pressure.
t*
问题是:在模拟过程中有要捕获的功能吗?或者如何对模型进行编程来做到这一点?我尝试了很多方法,但模型永远不会关闭。欢迎和赞赏的想法!
节日快乐/新年快乐!
穆罕默德
解决方案
您可能会发现我书中的示例和示例很有用。它使用基于时间的采样,而您可能希望它基于您的压力值。但原理是一样的。这将允许您记录事件发生的时间。
针对您的具体情况,以下(未经测试的)代码可能非常接近您想要的:
...
Modelica.SIunits.Time t_star=-1;
equation
when p >= p_set then
t_star = time;
end when;
A = if t_star<0 then A_max else min(const*(t - t_star) + A_0, A_max);
推荐阅读
- amazon-iam - AWS ECS 任务无法启动,因为守护进程无法创建日志流
- eclipse - 调用 maven-war-plugin 期间的 NPE
- pandas - 用 0 替换轴 0 上的重复项
- python - 如何使用 tweepy 获取超过 500 个 Twitter 用户的关注者和关注者列表?
- sapui5 - 无法将 CAP 应用程序部署到 Cloud Foundry
- angular - TSLint:现有规则的自定义错误消息
- amazon-ec2 - 在 ec2 上安装 google-cloud-sdk 的公钥问题
- sql - SQL 只返回重复记录
- java - Jboss 使用 Keycloak 记录到 slf4j/log4j2
- types - Apex 中是否存在隐式输入?