仿真测试踩坑实录:实操步骤+避坑指南

发布于 更新于
2,520
详情介绍

经本人实际测试, Simulink R2021b以及ModelSim 10.7, 在仿真测试时遇到过信号不同步, 模型出现跑飞情况, 端口配置还报过错, 这些都是实际操作中遇过的坑点, 新手只要依照步骤一步步去操作, 便能够轻松躲开这类常见问题。

1. 仿真模型搭建与参数配置

一开始, 开启Simulink, 创建空白的模型, 于Library Browser之中拖进Signal Generator、Scope以及Gain模块。双击Signal Generator, 将Wave form设定成Sine, 把Amplitude填写为1, 将Frequency填写成50Hz。把Gain模块参数填写为2, Scope维持默认采样时间-1意味着继承。接下来, 点击Model Configuration Parameters, 将Stop timedef设置为零点儿五, Solver选择fixed-step ode4, Fixed-step size填入零点零零零五。

新手要避开坑, 新手容易碰到“仿真跑不完”这种情况, 或者结果波形很诡异。常见的报错是代数环警告, 其原因是反馈回路没有添加Unit Delay或者Memory模块。 解决问题的办法是: 在反馈路径上添加一个Unit Delay, 延迟一个步长, 以此破坏代数环。

第二步, 对模型输入以及输出和Workspace变量进行连接。用右键点击Scope输出线, 从中选择Signal Properties, 于Logging name处填写sim_out。与此同时, 将Model Explorer打开, 在Base Workspace里添加From Workspace模块, Data参数填写成[t_data, u_data], 在这里t_data是时间向量, u_data是输入信号矩阵, 其列数需和模块端口数相一致。

在新手需要避开的坑里面, 常有报错“当Simulink不能加载那个MAT文件的时候”, 其缘由乃是变量名出现了拼写错误, 或者工作区没有在之前提前加载数据的情况。而核心的出错缘由在于, From Workspace模块的Data参数必须使用变量名, 而不能够直接去写数字矩阵。方法是这样的: 在MATLAB的命令窗口之中, 首先运行这样的: t_data设定为从0开始, 以0.001为步长直到0.5;u_data等于sin函数作用在2乘以圆周率乘以50再乘以t_data的结果, 之后再去运行该模型。

2. 仿真运行与结果分析

第一件事, 开启仿真, 点击Run按钮。处于仿真结束状况之后,于命令行键入plot(sim_out.time, sim_out.signals.values)去查看波形。要是波形不正确, 核查Scope的采样时间是不是被设置成-1, 亦或是模型有没有含代数环。

【新手需避坑】, 常见波形呈现“锯齿状”或者“缺失数据”, 其原因在于, Fixed-step size设置得过大, 进而致使采样点不足。推荐把0.0001秒作为步长, 如此一来, 既能确保精度, 又不会拖慢仿真速度。要是步长小于0.0001, 仿真时间会急剧增加, 并且对于存在高频噪声的系统而言是多余的。

接着是第二步, 要对两种方案加以对比, 其中方案A采用fixed-step solver(像是ode4这样的), 而方案B则采用variable-step solver(比如ode45那样的)。方案A适宜进行嵌入式代码生成, 其步长是固定不变的, 结果能够得以复现, 然而模型的柔韧性欠佳;方案B适用于纯算法验证, 仿真的速度比较快, 不过生成的代码较为复杂。舍弃与选取的逻辑是这样的, 要是你打算去做硬件在环也就是HIL测试, 那就必定得选方案A, 要是仅仅是进行算法原型验证, 那方案B会更加节省时间。

这个高频报错“Derivative of state ‘1’ in block, ‘…’at time 0.0 is not finite”要给新手避坑, 其原因是模型里存在除零或者无穷大运算。一次性解决的流程如下: 首先, 将仿真暂停, 进而查看报错块的路径;接着, 把该块打开, 以此检查输入信号有无可能是零;然后, 在输入端添加一个Saturation模块, 对上下限予以限制, 就像[0.001, 1000]这样;随后, 再次进行仿真。要是仍然出现报错, 就要检查模型里是否包含代数环, 要是有的话再添加Unit Delay。

此种方法不适用于并非实时仿真也不是纯数学验证的场景, 举例来说好比你要解复杂的微分方程, 还要做蒙特卡洛模拟, 在这样的状况下, Simulink的固定步长仿真极有可能会严重地拖慢速度。而替代的方案是直接运用MATLAB脚本去写ode45求解器, 它具备灵活以及高效的特点, 不过却少了Simulink所拥有的图形化调试便利。

0 讨论
热门最新
总结
暂无总结
0 / 600