在本人实际进行的MATLAB/Simulink R2021b与Speedgoat实时目标机的联合调试过程当中, 经历过因仿真步长设置不正确造成系统出现崩溃状况的情况, 也遭遇过IO板卡驱动识别遭……
在本人实际进行的MATLAB/Simulink R2021b与Speedgoat实时目标机的联合调试过程当中, 经历过因仿真步长设置不正确造成系统出现崩溃状况的情况, 也遭遇过IO板卡驱动识别遭遇失败的状况, 对于新手而言, 只要依照步骤一步步去展开操作, 便能够较为轻松地避开此类常见问题。
第一步 配置实时仿真系统基础环境
将MATLAB打开之后, 于命令行的窗口之中把slrtinstall输入进去, 以此启动xPC Target安装向导, 将目标机的类型选定为Speedgoat Baseline, 通信协议挑选UDP, 在“Target Network”的面板里, 把IP地址设置成192.168.7.2, 子网掩码采用默认的255.255.255.0。随后点击“Build”来生成引导盘, 将生成的iso文件借助Boot USB Writer写入到U盘之中。
【新手需留意避开雷区】此处在通常情况下, 报出 “No target machine found” 这一错误的频率是相当之高的。其缘由在于针对主机跟目标机而言, 它们的网关并不是处于同一个网段范围之内的。核心的能够起到解决作用的办法是: 将主机的有线网卡IP设定成分属于192.168.7.x这个网段的数值, 举例来说, 像192.168.7.1这样的数值, 并且网关要处于留空的状态。一定不要采用通过WiFi进行连接的方式, 必须要采用通过有线直接连接的方式。
第二步 建立Simulink模型并设定求解器参数
建立Simulink空白的模型, 将“PWM Generator”模块以及“DC Motor”模块拖入其中。双击“Configuration Parmeters”, 于Solver选项卡内, 把Type选定为“Fixed-step”, 将求解器选为“ode4(Runge-Kutta)”。最为关键的一项操作: 把基础步长设定为1e-4秒, 这是仿真精度与实时性的最优平衡点。进的幅度过于大, 那么电机的模型就会呈现出发散的状况, 进的幅度太过小, 目标机的CPU会出现过载进而直接导致死机。
关于新手需避开的坑, 在运行时出现了名为“Task overrun”的警告, 其缘由在于模型之中使用的连续模块数量过多,解决的办法是, 将要换成离散版本的诸如PID控制器等连续模块, 通过右键点击模块选择“Block Parameters”, 将所有与Sample time相关的内容全部改成1e – 4, 并且在高频信号路径上额外添加一个用于做速率匹配的“Rate Transition”模块。
第三步 编译部署并启动硬件在环仿真
选择指向“Code Generation”标签页面,将 System target file 选定为“slrt.tlc”。点击“Build”来进行编译从而形成 dlm 文件, 此进程大概历经 2 – 5 分钟。编译成功之后, 在 xPC Explorer 里面找到目标机器, 右键点击“Load – and – Run”。此时留意观测目标机显示屏, 出现“Execution time: 0.00012s”, 这便表明运行处于正常状态。先来对比一下这两种方案, 一种是采用TCP/IP协议进行传输, 其延迟大概是0.5ms, 这种方案适合于低速控制场景, 另一种是运用Shared Memory协议, 它的延迟仅仅只有0.05ms, 该方案适合高频电流环仿真, 不过它需要目标机额外去插一块共享内存卡。
【新手需防入坑】编译之时报出“Unresolved symbol: rt_OneStep”这种情况属于高频出现的故障。其缘由在于模型当中交叉使用了变步长模块。具备快速解决的流程: 将模型参数面板予以打开, 点击“Diagnostics”这个标签, 把“Data store memory”的检查修改为“none”。将模型里每一个带有“Continuous”字样的积分模块都消除掉, 全部替换为“Discrete-Time Integrator”。在重新进行编译之际, 务必要勾选“Generate code only”, 接着手动去运行一回“make_rtw”命令, 如此便完成了。
这个办法不适用于纯数字信号处理类型的仿真, 像FPGA算法的验证就是这样的情况。对于这种场景而言, 建议更换为使用Vivado Simulator搭配Modelsim, 把步长设定为纳秒级别, 要走全数字仿真的流程, 硬件在环的做法反倒显得多余。
微信扫一扫
还没有评论呢,快来抢沙发~