仿真与代码比较
方法生成的代码计算出的答案如何验证slexAircraftExample
模型。它展示了如何捕获和比较两组输出数据。模拟模型产生一组输出数据。执行生成的代码将生成第二组输出数据。
请注意
要获得模型输出和生成代码之间的有效比较,请使用相同的方法解算器的选择而且步长用于模拟运行和构建过程。
配置测井信号数据
配置用于记录和记录信号数据的模型。
确保
slexAircraftExample
是关闭的。清除基本工作空间以消除以前模拟运行的结果。在命令窗口中输入:清晰的
清除操作清除在以前的模拟过程中创建的变量和所有工作空间变量,其中一些是标准变量
slexAircraftExample
模型需要。要打开模型,在命令窗口中输入:
openExample (“slexAircraftExample”)
在模型窗口中,选择文件>另存为,导航到工作文件夹,并保存
slexAircraftExample
模型myAircraftExample
.设置你的模型来记录信号的信号数据:
坚持
,α,rad
,q, rad /秒
.对于每个信号:右击该信号。从上下文菜单中选择属性.
在“信号属性”对话框中,选择测井信号数据.
在日志的名字节中,从下拉列表中选择
自定义
.在文本框中,输入对应信号的日志名称。
信号的名字 日志的名字 坚持
Stick_input
α,rad
α
q, rad /秒
Pitch_rate
点击应用而且好吧.
有关更多信息,请参见使用信号日志导出信号数据.
在“配置参数”对话框中:
集类型来
固定步
.集格式来
结构随时间变化
.清除州复选框。
选择信号记录复选框。
选择在模拟数据检查器中记录已记录的工作空间数据复选框。
保存模型。
继续日志模拟数据.
日志模拟数据
运行仿真,记录信号数据,并在仿真数据检查器中查看数据。
运行模型。当仿真完成后,在Simulink上金宝app®编辑器工具栏,模拟数据检查器按钮将高亮显示,以指示在“仿真数据检查器”中有新的仿真输出。
单击模拟数据检查器按钮打开模拟数据检查器。
将信号分组:
在可视化选项卡上,单击组信号.
在“组信号”对话框中,选择
数据层次结构
从然后列表。点击好吧.
单击
logsout
扩展器查看已记录的信号。单击格式选项卡。
单击次要情节按钮并选择
3 x1
来展示三个次要情节。对于每个信号:
单击顶部的子图。蓝色边框表示地块选择。
属性旁边的复选框
α
信号的名字。信号数据显示在子图中。画出
Pitch_rate
信号在中间的子图。画出
Stick_input
信号在底部的子图。
继续运行可执行文件并加载数据.
运行可执行文件并加载数据
必须重新构建并运行myAircraftExample
可执行文件以获取有效的数据文件,因为您已经修改了模型。
在“配置参数”对话框中,设置mat文件变量名修饰符参数
rt_
.rt_
在本示例的第一部分中为登录选择的每个变量都加上前缀。点击应用而且好吧.
保存模型。
上生成代码C代码选项卡上,单击构建按钮。
构建完成后,从命令窗口运行独立程序。
myAircraftExample !
执行程序将下列消息写入命令窗口。
**启动模型** **创建myAircraftExample。垫* *
加载数据文件
myAircraftExample.mat
.负载myAircraftExample
提示
对于UNIX®在命令窗口中运行可执行程序!。/
executable_name
.如果愿意,可以使用语法从操作系统外壳运行可执行程序./
executable_name
.有关更多信息,请参见运行外部命令、脚本和程序.
继续可视化和比较结果.
可视化和比较结果
当你按照开始的例子序列配置测井信号数据,您可以从模型的Simulink运行和由模型生成的金宝app程序的运行中获取数据。
的执行输出
α,rad
,将数据导入模拟数据检查器。在模拟数据检查器上可视化选项卡,单击进口按钮,打开导入对话框。
指定进口的作为基本工作空间.
指定导入作为新运行.
在的左边信号的名字,单击复选框,清除复选框。
属性的复选框
α,rad
的数据时间序列根是rt_yout
.点击进口.
所选数据现在在下面执行2:importted_data.
查看已执行数据图。
单击
rt_yout
扩展器。单击顶部子图并选择
α,rad
信号的名字。信号数据显示在顶部的子图中。的
α,rad
来自运行1和运行2的信号在子图中重叠,因为信号是等效的。
在模拟和代码生成结果之间可能会看到非常小的差异。造成轻微差异的因素有很多,包括:
不同的编译器优化
语句排序
运行时库
例如,函数调用罪(2.0)
可以返回稍微不同的值,这取决于您使用的C库。这种变化还可能导致您的结果与这些结果之间的差异。
比较模拟和代码生成的状态
在模拟过程中,Simulink记录状态金宝app的顺序与记录状态的顺序不同金宝app仿真软件编码器™记录代码生成期间的状态。如果您想比较模拟和代码生成之间的状态,请按块名对状态进行排序。
例如,默认情况下,Simulink将状态数据导出到金宝appMATLAB变量,xout
.金宝app仿真软件编码器将状态数据导出到变量rt_xout
.为了对这些变量的状态数据进行排序,在MATLAB命令窗口中输入以下命令:
[~, idx1] =排序({xout.signals.blockName});xout_sorted = [xout.signals (idx1) . values);[~, idx2] =排序({rt_xout.signals.blockName});rt_xout_sorted = [rt_xout.signals (idx2) . values);
在MATLAB命令窗口中输入以下命令,可以确认代码生成和模拟的日志顺序相同:
isequal (xout_sorted rt_xout_sorted)