问:NGM中reinit内置函数如何使用?
答:reinit 是 Modelica 中用于在事件发生时重新初始化状态变量的函数,通常在离散事件或状态切换时使用。例如,建模碰撞、切换、电机启动等动态过程。
关键字如下reinit(x, expr);
· x: 重新初始化的状态变量,必须是导数存在的变量。
· expr: 重新赋给 x 的新值。
· reinit 只能在 when 语句或 if 语句中使用。
只能重置状态变量(动态变量),不能直接重置普通变量。
举例:参考弹跳小球模型中用reinit描述触底瞬间反弹的事件
model bounceball
parameter Real h0= 10"小球初始高度";
Real h"小球高度";
Real v(start = 0)"小球速度";
parameter Real e=0.7"能量损耗剩余比例";
Boolean flying"小球飞行状态";
parameter Real g= 9.8"重力加速度";
initial equation //初始化状态方程
h = h0;
v = 0;
equation
der(h) = v;
der(v) = if flying then -g else 0;//如果飞行中没有触地,受重力,加速度g方向向下,触地后重力支持力平衡
flying = not ( h <= 0 and v <= 0);//判断是否在下落过程中
when h <= 0 then
reinit( v, -e * pre(v));//触地后触发反弹事件
end when;
end bounceball;
仿真事件推荐设置开始事件0s 结束时间15s