使用 XCP 通信进行外部模式仿真
在外部模式仿真中,您可以实时调节参数并监控目标应用程序信号。使用硬件板运行 App,您可以设置和运行使用 XCP 通信通的外部模式仿真。
对于外部模式仿真,您可以:
在您的开发计算机上编译目标应用程序。
将目标应用程序部署到目标硬件。
将 Simulink® 连接到在目标硬件上运行的目标应用程序。
开始在目标硬件上执行生成的代码。
在开发计算机上运行 XCP 外部模式仿真
配置并运行使用 XCP 通信协议的外部模式仿真。在仿真期间:
使用 Scope 模块、Dashboard 模块和仿真数据检查器监控信号。
使用 Dashboard 模块调节参数。
为 XCP 配置信号监控和参数调节
为此示例创建一个文件夹。
mkdir ext_mode_xcp_example cd ext_mode_xcp_example
打开 Simulink 并创建一个简单模型
xcpExample
,其中包含以下模块:Sine Wave
Scope
Half Gauge
Knob
双击 Sine Wave 模块。将采样时间设置为 0.1,然后点击确定。
将 Sine Wave 模块连接到 Scope 模块,并命名该连接(例如,命名为
Test Signal
)。配置用于记录的信号:
右键点击
Test Signal
。从上下文菜单中,选择记录所选信号。如果您未启用信号记录,您将无法使用 Scope 模块查看信号或将信号数据流式传输到仿真数据检查器。
配置 Half Gauge 模块以监视
Test Signal
的值:双击 Half Gauge 模块。
在 Simulink 编辑器中,选择
Test Signal
。在“模块参数”对话框中:
将模块连接到
Test Signal
。在最大值字段中,输入一个值,例如
1
。
点击确定。
配置 Knob 模块以调节 Sine Wave 模块的振幅参数:
双击 Knob 模块。
在 Simulink 编辑器中,选择 Sine Wave 模块。
在“模块参数”对话框中:
将模块连接到 Sine Wave 模块的振幅参数。
在最小值和最大值字段中,分别输入值,例如 0.1 和 1。
点击确定。
将模型另存为
xcpExample
。
指定硬件并准备模型
从 Simulink 工具条上的 App 选项卡中,点击硬件板运行。
在硬件板运行弹出窗口中,将硬件板设置为受支持的 ARM® Cortex®-R 硬件板。
在硬件选项卡的准备部分中,点击硬件设置。将打开“配置参数”对话框,显示由硬件板确定的硬件实现设置。
在求解器窗格上,请执行下列步骤:
在类型字段中,指定定步长。
在求解器详细信息下的定步长字段中,指定一个值,例如 0.1。
在硬件实现 > 硬件板设置 > 外部模式窗格上,将通信接口设置为
XCP on TCP/IP
。点击确定。然后保存模型。
编译、部署和启动目标应用程序
为仿真停止时间指定非默认值。在硬件选项卡的在硬件上运行部分,将停止时间字段设置为
Inf
。点击 。
软件在连接的硬件板上编译和部署模型并将其作为应用程序启动。
将 Simulink 连接到目标应用程序。
运行生成的模型代码。
您也可以单独执行这些步骤。
在硬件选项卡的部署部分中,点击编译、部署和启动 。
在在硬件上运行部分,展开监控并调节下拉列表。
在分步命令下,点击连接 。
点击启动 。
监控信号和调节参数
您可以通过以下方式监控 Test Signal
:
Scope 模块 - 双击该模块。
仿真数据检查器 - 点击“仿真数据检查器”按钮。当仿真数据检查器打开时,选中测试信号复选框,这将显示流式数据。
Half-Gauge 模块。
要更改正弦波的振幅,请将 Knob 模块上的指针旋转至所需值。
要在仿真期间调节可调模块参数,您也可以使用以下方法:
如果模块参数是 MATLAB® 工作区中的变量,请在命令行窗口中为该变量赋予新值。然后,在 Simulink 编辑器中,通过按 Ctrl+D 来更新图。Simulink 会将新值下载到目标应用程序。
打开“模块参数”对话框。在参数字段中,指定必需的值。当您点击应用或确定时,Simulink 会将新参数值下载到目标应用程序。
要同时更改多个可调参数,请执行以下操作:
在准备部分中,点击批处理模式。
在模型中,修改所需的参数。
点击更新所有参数。软件会同时修改目标应用程序上的参数值。
有关使用生成的代码进行参数调节的详细信息,请参阅在生成的代码中创建可调标定参数。
停止目标应用程序
要在到达 StopTime
之前停止执行生成的模型代码并断开目标应用程序的连接,请在 Simulink 编辑器工具栏上,点击“停止”按钮 。
如果您要在不停止代码执行的情况下断开目标应用程序与 Simulink 的连接,请点击 。然后,在分步命令下,点击断开连接。
XCP 外部模式仿真的图形控制
您可以通过以下方式控制 XCP 外部模式仿真:
Simulink 编辑器工具栏上的硬件选项卡。要显示硬件选项卡,请从 Simulink 工具条上的 App 选项卡中,点击在硬件板上运行。
“外部模式控制面板”。要打开此对话框,请在硬件选项卡的准备部分中,点击 。然后,在信号监控和跟踪下,点击控制面板。
下表列出了可用于 XCP 外部模式仿真的控件。
外部模式操作 | 工具条 | 外部模式控制面板 |
---|---|---|
编译目标应用程序并在硬件上运行。 | 在硬件上运行 > 编译、部署和启动 | 不适用 |
将 Simulink 连接到正在等待或运行的目标应用程序。 | 在硬件上运行 > 连接 当 Simulink 连接到目标应用程序时,连接呈灰显状态,而断开连接 处于活动状态。 | 连接 当 Simulink 连接到目标应用程序时,连接变为断开连接。 |
开始在目标环境中实时执行生成的代码。 | 在硬件上运行 > 开始 | 启动实时代码 当生成的代码开始执行时,按钮变为停止实时代码。 |
断开 Simulink 与目标环境的连接,但不停止代码的实时执行。 | 在硬件上运行 > 断开连接 当 Simulink 与目标应用程序断开连接时,断开连接呈灰显状态,而连接 处于活动状态。 | 断开连接 |
停止目标应用程序的执行,并断开 Simulink 与目标环境的连接。 | 在在硬件上运行部分中,使用停止按钮 。 | 停止实时代码 |
调整批量模块参数。 | 准备部分中的批处理模式 和更新所有参数 按钮。 | 批量下载 要调节一批模块参数,请执行以下操作:
|
从命令行运行 XCP 外部模式仿真
您可以使用命令或脚本来运行 XCP 外部模式仿真。要检索和设置模型参数的值,请使用 get_param
和 set_param
命令。
要运行这些命令,您必须打开 Simulink 模型并运行目标应用程序。
将模型仿真模式设置为外部模式。
set_param(gcs,'SimulationMode','external');
将 Simulink 连接到目标应用程序。
set_param(gcs,'SimulationCommand','connect')
运行生成的模型代码。
set_param(gcs,'SimulationCommand','start');
要调节参数,请通过一行命令来更改其工作区变量值。例如,如果将模块参数值指定为
Simulink.Parameter
对象,请将新值赋给Value
属性。myParamObj.Value = 5.23;
要将新值下载到目标应用程序,请更新模型。
set_param(gcs,'SimulationCommand','update');
停止目标应用程序,并断开 Simulink 与目标环境的连接。
set_param(gcs,'SimulationCommand','stop');
要在不停止执行生成代码的情况下断开 Simulink 与目标应用程序的连接,请使用以下命令:
set_param(gcs,'SimulationCommand','disconnect');
XCP 外部模式限制
下表描述了适用于使用 XCP 通信的外部模式仿真的限制。
功能 | 详细信息 |
---|---|
更改模型结构的参数更新 | 您无法更改:
如果您进行的参数更新会更改模型结构,则您必须重新编译目标应用程序。 如果状态数不变,您可以更改 Transfer Fcn、Discrete Transfer Fcn 和 Discrete Filter 模块的分子多项式和分母多项式参数。 您无法更改 State-Space、Zero-Pole 和 Discrete Zero-Pole 模块中由用户指定的或计算的参数(即在零极点到状态空间变换过程中得到的 A、B、C 和 D 矩阵)中的零值项。 在 State-Space 模块中,如果在可控标准实现中指定矩阵,则允许在保留此实现和矩阵维度的前提下对 A、B、C 和 D 矩阵进行更改。 如果 Simulink 模块图与目标应用程序不匹配,Simulink 会产生错误,指出校验和不匹配。校验和会考虑顶层模型,但不考虑引用模型。要重新编译目标应用程序,请使用更新后的模块图。 |
信号值显示 | 不支持仿真期间信号值的图形显示。例如,您无法使用仿真中的数据显示菜单项悬停时显示值标签、点击时切换值标签和显示所选端口的值标签。有关详细信息,请参阅在模型图中显示信号值。 |
信号触发和数据存档 | 不支持外部模式控制面板上提供的信号和触发、装载触发器、取消触发器和数据存档功能。 |
信号流式传输 | 不支持流式传输信号的动态选择。要选择不同信号进行流式传输,请重新编译模型。 |
覆盖信号记录设置 | 不支持使用信号记录选择器覆盖信号记录设置。 |
编译器调试符号格式 | 您的工具链必须以下列格式之一生成调试信息:
|
内联参数 | 如果将 |
全局变量 | 信号、参数和状态必须指定为全局变量。存储变量的目标内存位置必须在 0 - 4294967295 范围内。 |
参数结构体 | 您无法调节作为结构体的参数。 |
纯整数代码 | 支持纯整数代码。对于代码生成,如果 如果您没有在执行命令中指定 如果在执行命令中指定
|
可变大小信号 | 不支持上传可变大小信号。 |
Scope 和 Floating Scope 模块,以及波形查看器 | 不支持某些信号数据类型。仿真会产生警告。 |
引用模型中的示波器 | 在模型层次结构中,如果顶层模型在外部模式下运行,而引用模型在普通模式或加速模式下运行,则不会显示引用模型中的示波器。 |
非零仿真开始时间 | 不支持非零仿真开始时间。使用求解器 > 开始时间默认值 |
作用域为文件的数据 | 不支持作用域为文件的数据。例如,应用内置自定义存储类 |
行优先代码生成 | 不支持以行优先格式生成的代码。 |