在本教程中,您将学习如何:
使用MATLAB函数MATLAB添加块®Simulink函数金宝app®用于建模、仿真和部署到嵌入式处理器的模型。
这种功能对于用MATLAB的文本语言而不是Simulink的图形语言来编码算法很有用。金宝app
使用coder.extrinsic
调用MATLAB代码MATLAB函数块。
此功能允许您快速创建原型。您可以从Simulink调用现有的MATLAB代码,而不必使这些代码适合于代码金宝app生成。
在生成代码之前,检查现有的MATLAB代码是否适合代码生成。
在生成代码之前,必须准备好代码。
在生成代码时指定可变大小的输入。
要完成本教程,您应该对MATLAB软件有基本的熟悉。您还应该了解如何创建和模拟基本的Simulink模型。金宝app
要完成本教程,您必须安装以下产品:下载188bet金宝搏
MATLAB
MATLAB编码器™
金宝app
金宝app仿真软件编码器
C编译器
有关受支持的编译器的列表,请金宝app参见金宝app支持编译器.
在生成C代码之前,必须设置C编译器。看到设置C编译器.
有关安装MathWorks的说明®下载188bet金宝搏产品,请参阅针对您的平台的MATLAB安装文档。如果您已经安装了MATLAB并想要检查安装了哪些MathWorks产品,请输入下载188bet金宝搏版本
在MATLAB命令窗口中。
本节描述本教程使用的示例。要完成本教程,您不必熟悉算法。
本教程的示例使用卡尔曼滤波器从一系列基于过去位置的噪声输入中估计在二维空间中移动的物体的位置。位置向量有两个分量,x
而且y
,表示其水平坐标和垂直坐标。
卡尔曼滤波器有广泛的应用,包括控制、信号和图像处理;雷达声纳;还有金融建模。它们是递归滤波器,从一系列不完整或有噪声的测量中估计线性动态系统的状态。卡尔曼滤波器算法依赖于滤波器的状态空间表示,并使用存储在状态向量中的一组变量来完全描述系统的行为。它利用状态转移矩阵和过程噪声估计线性递归地更新状态向量。
本节描述了卡尔曼滤波器的算法,并在本教程提供的滤波器的MATLAB版本中实现。
该算法使用卡尔曼滤波估计器根据移动物体过去的位置预测其位置。它通过更新卡尔曼状态向量来估计当前的位置,其中包括位置(x而且y),速度(Vx而且v),加速度(斧头而且唉)的运动物体。卡尔曼状态向量,间的
,为持久变量。
%初始条件持久化x_est p_est if isempty(x_est) x_est = 0 (6,1);P_est = 0 (6,6);结束
间的
初始化为空6 x1
列向量,并在每次使用过滤器时更新。
卡尔曼滤波器使用运动定律来估计新状态:
这些运动定律被捕捉在状态转换矩阵中一个
,它是一个矩阵,包含的系数值x
,y
,Vx
,Vy
,一个x
,一个y
.
%初始状态转换矩阵dt=1;A=[1 0 dt 0 0 0;…0 1 0 dt 0 0;…0 0 1 0 dt 0;…0 0 0 1 0 dt;…0 0 0 0 10;…0 0 0 0 0 1];
过滤过程分为两个阶段:
预测状态和协方差
卡尔曼滤波器使用先前估计的状态,间的
,来预测当前状态,x_prd
.预测状态和协方差计算为:
%预测状态及协方差x_prd = A * x_est;p_prd = A * p_est * A' + Q;
估计
该滤波器还使用电流测量,z
,预测状态,x_prd
,以估计当前状态的更准确的近似值。估计状态和协方差计算为:
%测量矩阵H = [1 0 0 0 0 0 0;0 1 0 0 0 0];Q =眼睛(6);R = 1000 *眼(2);
%估计S = H * p_prd' * H' + R;B = H * p_prd';klm_gain = (S \ B)';%估计状态和协方差x_est = x_prd + klm_gain * (z - H * x_prd);p_est = p_prd - klm_gain * H * p_prd;计算估计的测量y = H * x_est;
微积分,西蒙。自适应滤波理论.上马鞍河,新泽西州:Prentice-Hall, Inc., 1996。
本教程使用以下文件:
金宝app本教程的每个步骤的Simulink模型文件。
本教程每一步的MATLAB示例代码文件。
在本教程中,您将使用调用包含卡尔曼滤波算法的MATLAB文件的Simulink模金宝app型。
包含示例输入数据的mat文件。
绘图的MATLAB文件。
教程文件可以在以下文件夹中找到:docroot \工具箱\仿真软金宝app件\ \卡尔曼例子
.要运行本教程,必须将这些文件复制到本地文件夹。有关说明,请参见本地复制文件.
类型 | 的名字 | 描述 |
---|---|---|
MATLAB函数文件 | ex_kalman01 |
一个标量卡尔曼滤波器的MATLAB基线实现。 |
ex_kalman02 |
原版算法适合代码生成。 | |
ex_kalman03 |
卡尔曼滤波器的版本,适用于代码生成和使用与基于帧和基于包的输入。 | |
ex_kalman04 |
禁用代码生成的内联。 | |
金宝appSimulink模型文件 | ex_kalman00 |
金宝app没有Simulink模型MATLAB函数块。 |
ex_kalman11 |
完整的Simuli金宝appnk模型MATLAB函数块为标量卡尔曼滤波器。 | |
ex_kalman22 |
金宝app一个Simulink模型MATLAB函数块用于卡尔曼滤波器,接受固定大小(基于帧的)输入。 | |
ex_kalman33 |
金宝app一个Simulink模型MATLAB函数块用于卡尔曼滤波器,接受可变大小(基于包的)输入。 | |
ex_kalman44 |
金宝app调用Simulink模型ex_kalman04.m ,它已禁用内联。 |
|
MATLAB数据文件 | 位置 |
包含算法使用的输入数据。 |
图文件 | plot_trajectory |
画出物体的轨迹和卡尔曼滤波估计的位置。 |
将教程文件复制到本地工作文件夹:
创建本地金宝搏官方网站
文件夹,例如,c: 金宝app\模型、卡尔曼滤波、解决方案金宝搏官方网站
.
改为docroot \工具箱\仿真软金宝app件\例子
文件夹中。在MATLAB命令行输入:
Cd (fullfile(docroot, 'toolbox', 金宝app'simulink', 'examples'))
的内容卡尔曼
子文件夹到您的本地金宝搏官方网站
目录的完整路径名金宝搏官方网站
文件夹:
拷贝文件(“卡尔曼”、“金宝搏官方网站”)
例如:
拷贝文件(“卡尔曼”、“c: \仿真软件\卡尔金宝app曼\解决方案”)金宝搏官方网站
你的金宝搏官方网站
文件夹现在包含了本教程的完整解决方案集。金宝搏官方网站如果您不想为本教程中的每个任务执行步骤,您可以查看解决方案以查看代码的外观。金宝搏官方网站
创建本地工作
文件夹,例如,c: 金宝app\模型、卡尔曼滤波、工作
.
从您的金宝搏官方网站
文件夹到您的工作
文件夹中。
ex_kalman01
ex_kalman00
位置
plot_trajectory
你的工作
文件夹现在包含了开始本教程所需的所有文件。
建立你的MATLAB函数Block需要一个受支持的编译器。金宝appMATLAB自动选择一个作为默认编译器。如果您的系统上安装了多个支持matlab的编译器,则可以金宝app使用墨西哥人设置
命令。看到更改默认编译器.
首先,检查ex_kalman00
本教程提供的模型,以理解您试图使用卡尔曼滤波器解决的问题。
打开ex_kalman00
在Simulink金宝app中的模型:
将MATLAB当前文件夹设置为包含本教程工作文件的文件夹。在MATLAB命令行输入:
cd工作
工作
包含文件的文件夹的完整路径名称。在MATLAB命令行输入:
ex_kalman00
该模型是一个不完整的模型,用于演示如何将MATLAB代码与Simulink集成。金宝app完整的模型是ex_kalman11
,本教程也提供了。
模型回调函数。模型使用这个回调函数:
从mat文件加载位置数据。
属性的第二个输入,设置Index生成器块使用的数据选择器块。
查看此回调函数:
在建模选项卡上,选择模型设置>模型属性.
选择回调选项卡。
选择InitFcn
在模型的回调窗格。
出现回调。
加载position.mat;[R、C] =大小(位置);idx = (1: C) ';t = idx-1;
源块。该模型使用了两个源控件的位置数据和标量索引选择器块。
选择器。该模型使用选择器块,该块选择其输入信号的元素,并根据其索引输入和它的索引输入生成输出信号指数的选择设置。通过改变该块的配置,可以生成不同大小的信号。
浏览选择器块设置,双击选择器块,查看功能块参数。
在这个模型中,指数的选择对于第一个端口是选择所有
第二个端口是索引向量(端口)
.因为输入是a2 x 310
位置矩阵,索引数据从1
来310
,选择器Block只输出一个2 x1
在每个采样时间输出。
MATLAB函数块。该模型使用MATLAB函数块来绘制物体的轨迹和卡尔曼滤波估计的位置。这个函数:
First声明数字
,持有
,plot_trajectory
函数作为外部函数,因为这些MATLAB可视化函数不支持代码生成。金宝app当调用不受支持的MATLAB函数时,必金宝app须将其声明为外部函数,以便MATLAB可以执行它,但不会尝试为其生成代码。
创建一个图形窗口,并在模拟期间保持该图形窗口。否则,每个采样时间都会显示一个新的图形窗口。
调用plot_trajectory
函数,它绘制了物体的轨迹和卡尔曼滤波估计的位置。
模拟停止时间。模拟停止时间为309
,因为过滤器的输入是一个包含310
元素和Simulink使用金宝app从零开始的索引。
要自己修改模型和代码,请完成本节中的练习。否则,打开提供的模型ex_kalman11
在你的金宝搏官方网站
子文件夹查看修改后的模型。
对于本教程,您将添加MATLAB函数块到ex_kalman00.mdl
随教程提供的模型。您必须从一个空的Simulink模型开始开发自己的测试平台。金宝app
添加MATLAB函数块。要添加MATLAB函数块到ex_kalman00
模型:
开放ex_kalman00
在仿真金宝app软件。
ex_kalman00
添加一个MATLAB函数块到模型:
在MATLAB命令行中,键入slLibraryBrowser
打开Simulink L金宝appibrary浏览器。
从Simulink库列表中,选择金宝app用户定义函数
图书馆。
单击MATLAB函数块并将其拖到ex_kalman00
模型。将该块放在所读的红色文本注释的上方在这里放置MATLAB函数块。
从模型中删除红色文本注释。
在当前文件夹中保存模型为ex_kalman11
.
打电话给你的MATLAB来自MATLAB函数块的代码。调用您的MATLAB代码从MATLAB函数布洛克:
双击MATLAB函数块,打开MATLAB函数块编辑器。
删除编辑器中显示的默认代码。
将以下代码复制到MATLAB函数块。
函数y = kalman(u) %#编码原y = ex_kalman01(u);
保存模型。
连接MATLAB函数块输入和输出
连接MATLAB函数阻塞输入和输出,使您的模型看起来像这样。
保存模型。
模拟模型:
2 .在Sim金宝appulink模型窗口中,单击运行.
当Si金宝appmulink运行模型时,它将物体的轨迹绘制为蓝色,卡尔曼滤波器估计的位置为绿色。最初,您可以看到估计位置与物体的实际位置收敛需要很短的时间。然后发生三次位置的突然变化——每次卡尔曼滤波器都在几次迭代后重新调整并跟踪对象。
模拟停止。
你已经证明了你的MATLAB算法在Simulink中工作。金宝app现在可以修改筛选器以接受固定大小的输入,如中所述修改过滤器以接受固定大小的输入.
到目前为止,在本教程中使用的过滤器使用了一个简单的批处理过程,每次接受一个输入,因此必须为每个输入重复调用该函数。在本教程的这一部分中,您将学习如何修改算法以接受固定大小的输入,这使得算法适合于基于帧的处理。然后修改模型,以提供固定大小的数据帧作为输入,并调用每次一帧传入数据的过滤器。
修改你的MATLAB代码。要自己修改代码,请完成本节中的练习。否则,打开提供的文件ex_kalman03.m
在你的金宝搏官方网站
子文件夹查看修改后的算法。
现在可以修改算法来处理包含多个输入的向量。您需要找到向量的长度,并依次为向量中的每个元素调用筛选器代码。的过滤器算法来实现这一点为
循环。
开放ex_kalman02.m
在MATLAB编辑器中。在MATLAB命令行输入:
编辑ex_kalman02.m
添加一个为
循环筛选器代码。
在评论之前:
预测状态和协方差
我= 1:尺寸(z, 2)
后:
计算估计的测量y = H * x_est;
结束
选择之间的代码为
语句和结束语句,右键单击打开上下文菜单并选择智能缩进缩进代码。
你的过滤器代码现在应该是这样的:
我= 1:尺寸(z, 2)%预测状态及协方差x_prd = A * x_est;p_prd = A * p_est * A' + Q;%估计S = H * p_prd' * H' + R;B = H * p_prd';klm_gain = (S \ B)';%估计状态和协方差x_est = x_prd + klm_gain * (z - H * x_prd);p_est = p_prd - klm_gain * H * p_prd;计算估计的测量y = H * x_est;结束
方法修改用于计算估计状态和协方差的行我th
输入元素z
.
变化:
x_est = x_prd + klm_gain * (z - H * x_prd);
X_est = x_prd + klm_gain * (z(1:2)- H * x_prd);
修改计算估计测量值的行,以将结果附加到我th
元素的输出y
.
变化:
y = H * x_est;
y(我):= H * x_est;
右上方的代码分析器消息指示器变成橙色,表示代码分析器检测到警告。代码分析器用橙色强调违规代码,并在右侧放置一个橙色标记。
将指针移到橙色标记上可查看错误信息。
代码分析器检测到这一点y
必须在编写子脚本之前完全定义,并且不能通过在生成的代码中建立索引来增加变量。
要解决此警告,请为输出预分配内存y
,与输入大小相同z
.的前面添加此代码为
循环。
%预分配输出信号:y= 0(大小(z));
橙色标记消失,代码右上角的代码分析器消息指示器变成绿色,这表明您已经修复了代码分析器检测到的所有错误和警告。
将函数名更改为ex_kalman03
并将文件另存为ex_kalman03.m
在当前文件夹中。
您已经准备好开始教程中的下一个任务,修改您的模型以调用更新的算法.
修改您的模型以调用更新的算法。要自己修改模型,请完成本节中的练习。否则,打开提供的模型ex_kalman22.mdl
在你的金宝搏官方网站
子文件夹查看修改后的模型。
接下来,更新您的模型,以提供固定大小的数据帧和调用的输入ex_kalman03
每次一帧传入数据。
开放ex_kalman11
在Simulink金宝app中的模型。
ex_kalman11
双击MATLAB函数块,打开MATLAB函数块编辑器。
替换调用的代码ex_kalman02
用一个电话ex_kalman03
.
函数y = kalman(u) %#编码原Y = ex_kalman03(u);
关闭编辑器。
修改InitFcn
回调函数:
在建模选项卡上,选择模型设置>模型属性.
打开“模型属性”对话框。
在此对话框中,选择回调选项卡。
选择InitFcn
在模型的回调窗格。
将现有的回调函数替换为:
加载position.mat;[R、C] =大小(位置);FRAME_SIZE = 5;idx = (1: FRAME_SIZE: C) ';LEN =长度(idx);t = (1: LEN) 1;
5
,以及要递增的索引5
.点击应用关闭“模型属性”对话框。
更新选择器块来使用正确的索引。
双击选择器块,查看功能块参数。
打开“功能块参数”对话框。
设置第二个指数的选择来起始索引(端口)
.
设置输出的大小对于第二个输入FRAME_SIZE
,点击应用并关闭对话框。
现在,指数的选择对于第一个端口是选择所有
第二个端口是起始索引(端口)
.因为下标增量是5
每次采样时间,输出大小为5
,选择器块输出2 x5
在每个采样时间输出。
将模型仿真停止时间更改为61
.现在帧大小是5
,因此模拟在五分之一的样本时间内完成。
在Simuli金宝appnk模型窗口中,在建模选项卡上,单击模型设置.
在“配置参数”对话框的左侧窗格中,选择解算器.
在右侧窗格中,设置停止时间来61
.
点击应用并关闭对话框。
将模型另存为ex_kalman22.mdl
.
测试修改后的算法。模拟模型:
2 .在Sim金宝appulink模型窗口中,单击运行.
当Si金宝appmulink运行模型时,它将对象的轨迹绘制为蓝色,卡尔曼滤波器估计位置为绿色,就像之前使用批处理滤波器时一样。
模拟停止。
您已经证明了您的算法接受固定大小的信号。现在你已经为下一个任务做好了准备,使用过滤器接受可变大小的输入.
在本部分教程中,您将学习如何在Simulink模型中指定可变大小的数据。金宝app然后用可变大小的输入测试卡尔曼滤波算法,看看该算法是否适合处理不同大小的数据包。有关在Simulink中使用可变大小数据的更多信息,请参见金宝app可变大小信号基础.
更新模型以使用可变大小的输入。要自己修改模型,请完成本节中的练习。否则,打开提供的模型ex_kalman33.mdl
在你的金宝搏官方网站
子文件夹查看修改后的模型。
开放ex_kalman22.mdl
在仿真金宝app软件。
ex_kalman22
修改InitFcn
回调函数:
在建模选项卡上,选择模型设置>模型属性.
打开“模型属性”对话框。
选择回调选项卡。
选择InitFcn
在模型的回调窗格。
将现有的回调函数替换为:
加载position.mat;Idx =[11;2 3;4 6;7 10;11 15;31 70;71 100;101 200;201 250;LEN =长度(idx);t = (0:1: LEN-1)”;
101
来200
,包含100个元素。点击应用然后关闭模型属性对话框。
更新选择器块来使用正确的索引。
双击选择器块,查看功能块参数。
打开“功能块参数”对话框。
设置第二个指数的选择来开始和结束索引(端口)
,然后按应用并关闭对话框。
这个设置意味着索引端口的输入在每个采样时间指定输入的开始和结束索引。因为索引输入在每个采样时间指定不同的开始和结束索引,所以选择器块在模拟过程中输出一个可变大小的信号。
使用“端口和数据管理器”设置MATLAB函数输入x
和输出y
作为可变大小的数据。
双击MATLAB函数块,打开MATLAB函数块编辑器。
从编辑器菜单中选择编辑数据.
在Ports and Data Manager左窗格中,选择输入u
.
端口和数据管理器显示有关的信息u
在右侧窗格中。
在一般选项卡,选择变量的大小复选框,然后单击应用.
在左侧窗格中,选择输出y
.
在一般标签:
设置大小的y
来[100]
来指定一个2-D矩阵的上界2
对于第一维和One hundred.
方法中指定的最大大小输入InitFcn
回调。
选择变量的大小复选框。
点击应用.
关闭“端口和数据管理器”。
现在对另一个做同样的事情MATLAB函数块。使用端口和数据管理器设置可视化块输入y
而且z
作为可变大小的数据。
双击可视化块,打开MATLAB函数块编辑器。
从编辑器菜单中选择编辑数据.
在Ports and Data Manager左窗格中,选择输入y
.
在一般选项卡,选择变量的大小复选框,然后单击应用.
在左侧窗格中,选择输入z
.
在一般选项卡,选择变量的大小复选框,然后单击应用.
关闭“端口和数据管理器”。
将模型仿真停止时间更改为10
.这一次,过滤器在每个采样时间处理11个不同大小的输入中的一个。
将模型另存为ex_kalman33.mdl
.
测试修改后的模型。模拟模型:
2 .在Sim金宝appulink模型窗口中,单击运行.
当Si金宝appmulink运行模型时,它将物体的轨迹绘制为蓝色,卡尔曼滤波器估计的位置为绿色。
注意,信号线之间选择器块,跟踪和可视化块改变,以显示这些信号是可变大小的。
模拟停止。
您已经成功地创建了一个接受可变大小输入的算法。接下来,您将学习如何调试MATLAB函数块,如中所述调试MATLAB函数块.
您可以调试MATLAB函数就像你可以在MATLAB中调试函数一样。
双击MATLAB函数块,调用卡尔曼滤波器打开MATLAB函数块编辑器。
在编辑器中,单击行左边缘的破折号(-)字符:
Y = kalman03(u);
这一行的空白处会出现一个红色的小球,表示您已经设置了一个断点。
2 .在Sim金宝appulink模型窗口中,单击运行.
当执行达到断点时,模拟暂停,左侧空白中出现一个绿色小箭头。
将指针放在变量上u
.
的价值u
出现在指针旁边。
从MATLAB函数块编辑器菜单中,选择一步.
的kalman03.m
文件在编辑器中打开,您现在可以使用一步,一步,走出.
选择走出.
的kalman03.m
文件关闭,然后MATLAB函数块代码重新出现在编辑器中。
将指针放在输出变量上y
.
您现在可以看到的价值y
.
单击红色小球以删除断点。
从MATLAB函数块编辑器菜单中,选择退出调试.
关闭编辑器。
关闭图形窗口。
现在你已经为下一个任务做好了准备,生成C代码.
你已经证明了你的算法可以在Simulink中工作。金宝app接下来为您的模型生成C/ c++代码。代码生成需要金宝app仿真软件编码器.
请注意
在生成代码之前,必须检查MATLAB代码是否适合代码生成。如果将MATLAB代码作为外部函数调用,则必须在生成代码之前删除外部调用。
重命名MATLAB函数块跟踪
.要重命名该块,双击注释MATLAB函数
以下MATLAB函数将文本替换为跟踪
.
的代码生成时MATLAB函数块,金宝app仿真软件编码器使用生成代码中的块的名称。使用一个有意义的名字是很好的习惯。
在生成代码之前,请确保金宝app仿真软件编码器创建代码生成报告。此HTML报告提供了对生成文件列表的轻松访问,其中包含用于生成代码的配置设置的摘要。
在Simuli金宝appnk模型窗口中,在建模选项卡上,单击模型设置.
打开“配置参数”对话框。
在“配置参数”对话框的左侧窗格中,选择报告下代码生成.
在右侧窗格中,选择创建代码生成报告而且自动打开报表.
点击应用并关闭“配置参数”对话框。
保存您的模型。
为跟踪块生成代码:
右键单击跟踪块并选择C / c++代码>构建选定的子系统.
在为子系统构建代码窗口中,单击构建.有关更多信息,请参见为各个子系统生成代码和可执行文件(金宝app仿真软件编码器).
Simu金宝applink软件将生成一个错误,通知您它不能将可变大小的信号记录为数组。您需要更改保存到MATLAB工作区的数据的格式。修改此格式:
在Simuli金宝appnk模型窗口中,在建模选项卡上,单击模型设置.
打开“配置参数”对话框。
在“配置参数”对话框的左侧窗格中,选择数据导入/导出并设置格式来结构随时间变化
.
记录的数据现在是一个具有两个字段的结构:一个时间字段和一个信号字段,使Simulink能够记录可变大小的信号。金宝app
点击应用并关闭“配置参数”对话框。
保存您的模型。
重复步骤3.
来为跟踪块生成代码。
的金宝app仿真软件编码器软件为该块生成C代码并启动代码生成报告。
有关使用代码生成报告的更多信息,请参见代码生成报告(金宝app仿真软件编码器).
在代码生成报告的左窗格中,单击Tracking.c
链接查看生成的C代码。注意,在生成的代码中MATLAB函数块,跟踪
的函数可能没有单独的函数代码ex_kalman03
函数,因为函数内联默认启用。
修改你的过滤算法禁用内联:
在ex_kalman03.m
,在函数声明后,添加:
coder.inline('永远');
将函数名更改为ex_kalman04
并将文件另存为ex_kalman04.m
在当前文件夹中。
在你的ex_kalman33
模型,双击跟踪块。
打开MATLAB函数块编辑器。
修改对要调用的筛选算法的调用ex_kalman04
.
函数y = kalman(u) %#编码原Y = ex_kalman04(u);
将模型另存为ex_kalman44.mdl
.
生成并检查C代码。
重复步骤3。
在代码生成报告的左窗格中,单击Tracking.c
链接查看生成的C代码。
属性的生成的C代码ex_kalman04
函数。
/*本地函数的正向声明*/ static void Tracking_ex_kalman04(const real_T z_data[620], const int32_T z_sizes[2], real_T y_data[620], int32_T y_sizes[2]);函数块:' |
在修改MATLAB代码之前,请备份它。
确定文件的命名约定,并经常保存临时版本。例如,本教程使用两位数字后缀来区分过滤器算法的不同版本。
出于模拟目的,在生成代码之前,使用调用MATLAB代码coder.extrinsic
检查您的算法是否适合在Simulink中使用。金宝app这种做法提供了以下好处:
您不必使MATLAB代码适合代码生成。
您可以在MATLAB中调试MATLAB代码,同时从Simulink调用它。金宝app
创建一个金宝app仿真软件编码器代码生成报告。此HTML报告提供了对生成文件列表的轻松访问,其中包含用于生成代码的配置设置的摘要。