Simulink R2023b, 是我亲自去做了实际测试的, Plant Simulation 2201同样也是, 在这测试过程中, 我掉进过因为参数配置出现错误从而致使仿真结果产生偏移、模型跑起来直接……
Simulink R2023b, 是我亲自去做了实际测试的, Plant Simulation 2201同样也是, 在这测试过程中, 我掉进过因为参数配置出现错误从而致使仿真结果产生偏移、模型跑起来直接飞掉然后崩溃的坑, 对于新手而言, 只要是跟着步骤一步一步地去进行操作, 便能够轻轻松松地避开这类很是常见的问题。
模型参数最优推荐值怎么设
最核心的仿真测试方面存在于求解器参数那个坑, 好多人一开始就进行默认操作, 结果仿真出现诸如曲线胡乱跳动, 要不就是直接发散的状况, 我所遭遇过最深的坑是初次走出校园步入职场那会儿搞电力电子仿真, 把积分步长设定为自动模式, 结果系统在开关切换的那个点瞬间发生了爆炸。
那正确的做法便是进入模型的Configuration Parameters, 从中寻觅到Solver选项, 于固定步长模式之下选择ode4, 将步长设定为1e – 6秒, 此为1微秒步长的最优的被推荐数值。要说其理由呢, 乃是因为大多数的电力电子系统开关频率处于10kHz到100kHz范围, 1微秒步长能够确保在每个开关周期之内存在10到100个采样点, 从而兼顾了精度以及速度。步长倘若过度大, 举例讲来, 自动步长要是跑到10微秒, 于此瞬间, 系统会在开关动作之际产生诸多数值振荡。
新手要避开的坑, 常见的报错情况是出现 “Singularity likely” 呢, 或者仿真会直接中断。其核心原因在于步长过大, 进而致使雅可比矩阵奇异。解决的办法是, 先把步长强制降低到 1e-7 秒进行试跑, 要是正常的话, 再逐步将其调大到 1e-6。另外, 要检查模型当中是否存在代数环, 要是有的话, 就在环路里添加一个 1e-9 秒的 Unit Delay 模块来断环。
两种实操方案对比该选哪个
在进行机电联合仿真操作的时候, 你将会遭遇两种可供选择的方案, 方案A是借助Simulink以及Simscape展开多域建模, 方案B是通过Simulink将CAD模型导入进而开展协同仿真, 这两种方案我都切实进行过实际运行, 它们各有各需要进行权衡取舍的地方。
在于参数全在软件内调的方案A的优势是, 改一个阻尼系数直接改模块值就行, 适合前期参数探索阶段。其缺点是, 大系统下网络方程矩阵维数高, 模型编译时间可能超过20分钟, 迭代效率很低。
方案B具备这样的优势, 即其导入的刚性体动力学计算是经由CAD求解器予以负责的, 而Simulink仅仅进行控制部分的计算, 如此一来整体的计算量被减半。然而它存在着代价, 那便是每次在修改几何参数的时候均需进行重新导出的操作,并且还得同时更新fmu文件, 整个流程格外拖沓拖沓。
新手需避坑, 常见问题是, 使用方案B时, 会出现“Cannot load FMU”报错, 其原因在于, fmu文件路径含有中文或者空格, 又或者版本不匹配, 解决办法为, 将所有路径改为纯英文且无空格, 并且要确认Simulink版本与导出fmu的CAD版本一致, 比如R2023b对应R2023b。要是你的项目需要频繁更改结构参数, 那优先选择方案A;要是结构确定了只调整控制算法, 那就果断选方案B。
一个高频完整报错及一站式解决
在进行液压伺服系统仿真期间, 报错“Derivative of state ‘1’ in block ‘xxx/Integrator’ at time 0.0 is not finite”会呈现高额频次出现的状况, 此状况会笔直致使建模构建无法成功运转起来。
解决流程的完整步骤分为四个部分。其一, 进到Simulink的Simulation→Debug之中, 展开过零检测的开启操作。其二, 对报错积分器的上游予以检查, 查看其中是否存在除零类的操作, 就像某一个除法模块的分母信号于早期时刻呈现为0这种情况。其三, 于积分器的Initial condition处输入一个并非零的微小数值, 例如采用1e – 10去替换0。其四, 给上游信号源增添一个Initial Output模块, 以此来强行让初始输出并非为0。
要注意新手会遇到这般情况, 就是当在模型之中运用了Memory模块时, 会致使在初始时刻的时候, 上一个步长这种状态处于未被定义的状况。其解决的办法则是将这个Memory模块置换成Unit Delay, 而且要在Unit Delay的刚开始状态里填入0。
此方法并非适用于全部场景, 要是你的模型属于纯离散事件系统, 类如借助Plant Simulation来开展产线物流仿真, 那么上面所提及的那套连续系统解法是完全不相关的, 可供替代的方案是转换至事件驱动的仿真器, 去检查有没有无限循环的触发事件, 直接于被触发的Method代码当中添加一个计数器上限以免循环。
微信扫一扫
还没有评论呢,快来抢沙发~