Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

使用 XCP 通信进行外部模式仿真

在外部模式仿真中,您可以实时调节参数并监控目标应用程序信号。使用硬件板运行 App,您可以设置和运行使用 XCP 通信信道的外部模式仿真

对于外部模式仿真,您可以:

  1. 在您的开发计算机上编译目标应用程序。

  2. 将目标应用程序部署到目标硬件。

  3. 将 Simulink® 连接到在目标硬件上运行的目标应用程序。

  4. 开始在目标硬件上执行生成的代码。

在开发计算机上运行 XCP 外部模式仿真

配置并运行使用 XCP 通信协议的外部模式仿真。在仿真期间:

  • 使用 Scope 模块、Dashboard 模块和仿真数据检查器监控信号。

  • 使用 Dashboard 模块调节参数。

为 XCP 配置信号监控和参数调节

  1. 为此示例创建一个文件夹。

    mkdir ext_mode_xcp_example
    cd ext_mode_xcp_example

  2. 打开 Simulink 并创建一个简单模型 xcpExample,其中包含以下模块:

    • Sine Wave

    • Scope

    • Half Gauge

    • Knob

  3. 双击 Sine Wave 模块。将采样时间设置为 0.1,然后点击确定

  4. Sine Wave 模块连接到 Scope 模块,并命名该连接(例如,命名为 Test Signal)。

  5. 配置用于记录的信号:

    1. 右键点击 Test Signal

    2. 从上下文菜单中,选择记录所选信号。如果您未启用信号记录,您将无法使用 Scope 模块查看信号或将信号数据流式传输到仿真数据检查器。

  6. 配置 Half Gauge 模块以监视 Test Signal 的值:

    1. 双击 Half Gauge 模块。

    2. 在 Simulink 编辑器中,选择 Test Signal

    3. 在“模块参数”对话框中:

      • 将模块连接到 Test Signal

      • 最大值字段中,输入一个值,例如 1

    4. 点击确定

  7. 配置 Knob 模块以调节 Sine Wave 模块的振幅参数:

    1. 双击 Knob 模块。

    2. 在 Simulink 编辑器中,选择 Sine Wave 模块。

    3. 在“模块参数”对话框中:

      • 将模块连接到 Sine Wave 模块的振幅参数。

      • 最小值最大值字段中,分别输入值,例如 0.1 和 1。

    4. 点击确定

  8. 将模型另存为 xcpExample

指定硬件并准备模型

  1. 从 Simulink 工具条上的 App 选项卡中,点击硬件板运行

  2. 硬件选项卡的准备部分中,点击硬件设置。将打开“配置参数”对话框,显示由硬件板确定的硬件实现设置。

  3. 求解器窗格上,请执行下列步骤:

    1. 类型字段中,指定固定步长

    2. 求解器详细信息下的固定步长字段中,指定一个值,例如 0.1。

  4. 硬件实现 > 硬件板设置 > 外部模式窗格上,将通信接口设置为 XCP on TCP/IP

  5. 点击确定。然后保存模型。

编译、部署和启动目标应用程序

  1. 为仿真停止时间指定非默认值。在硬件选项卡的在硬件上运行部分,将停止时间字段设置为 Inf

  2. 点击

    1. 软件在连接的硬件板上编译和部署模型并将其作为应用程序启动。

    2. 将 Simulink 连接到目标应用程序。

    3. 运行生成的模型代码。

    您也可以单独执行这些步骤。

    1. 硬件选项卡的部署部分中,点击编译、部署和启动

    2. 在硬件上运行部分,展开监控并调节下拉列表。

    3. 分步命令下,点击连接

    4. 点击启动

监控信号和调节参数

您可以通过以下方式监控 Test Signal

  • Scope 模块 - 双击该模块。

  • 仿真数据检查器 - 点击“仿真数据检查器”按钮。当仿真数据检查器打开时,选中测试信号复选框,这将显示流式数据。

  • Half-Gauge 模块。

要更改正弦波的振幅,请将 Knob 模块上的指针旋转至所需值。

要在仿真期间调节可调模块参数,您也可以使用以下方法:

  • 如果模块参数是 MATLAB® 工作区中的变量,请在命令行窗口中为该变量赋予新值。然后,在 Simulink 编辑器中,通过按 Ctrl+D 来更新图。Simulink 会将新值下载到目标应用程序。

  • 打开“模块参数”对话框。在参数字段中,指定必需的值。当您点击应用确定时,Simulink 会将新参数值下载到目标应用程序。

要同时更改多个可调参数,请执行以下操作:

  1. 准备部分中,点击批处理模式

  2. 在模型中,修改所需的参数。

  3. 点击更新所有参数。软件会同时修改目标应用程序上的参数值。

有关使用生成的代码进行参数调节的详细信息,请参阅在生成的代码中创建可调标定参数

停止目标应用程序

要在到达 StopTime 之前停止执行生成的模型代码并断开目标应用程序的连接,请在 Simulink 编辑器工具栏上,点击“停止”按钮

如果您要在不停止代码执行的情况下断开目标应用程序与 Simulink 的连接,请点击 。然后,在分步命令下,点击断开连接

XCP 外部模式仿真的图形控制

您可以通过以下方式控制 XCP 外部模式仿真:

  • Simulink 编辑器工具栏上的硬件选项卡。要显示硬件选项卡,请从 Simulink 工具条上的 App 选项卡中,点击在硬件板上运行

  • “外部模式控制面板”。要打开此对话框,请在硬件选项卡的准备部分中,点击 。然后,在信号监控和跟踪下,点击控制面板

下表列出了可用于 XCP 外部模式仿真的控件。

外部模式操作工具条外部模式控制面板

编译目标应用程序并在硬件上运行。

在硬件上运行 > 编译、部署和启动

不适用

将 Simulink 连接到正在等待或运行的目标应用程序。

在硬件上运行 > 连接

当 Simulink 连接到目标应用程序时,连接呈灰显状态,而断开连接 处于活动状态。

连接

当 Simulink 连接到目标应用程序时,连接变为断开连接

开始在目标环境中实时执行生成的代码。

在硬件上运行 > 开始

启动实时代码

当生成的代码开始执行时,按钮变为停止实时代码

断开 Simulink 与目标环境的连接,但不停止代码的实时执行。

在硬件上运行 > 断开连接

当 Simulink 与目标应用程序断开连接时,断开连接呈灰显状态,而连接 处于活动状态。

断开连接

停止目标应用程序的执行,并断开 Simulink 与目标环境的连接。

在硬件上运行部分中,使用停止按钮

停止实时代码

调整批量模块参数。

准备部分中的批处理模式 更新所有参数 按钮。

批量下载

要调节一批模块参数,请执行以下操作:

  1. 在外部模式控制面板中,选择批量下载

    批量下载等效于 Simulink 工具条控件批处理模式

  2. 在 Simulink 编辑器中,修改所需的模块参数。

  3. 当您修改参数时,外部模式控制面板会在下载旁边显示以下消息:

    Parameter changes pending... 
    Simulink 将在本地存储修改后的参数。

    下载等效于 Simulink 工具条控件更新所有参数

  4. 点击下载。Simulink 会将一批修改后的参数下载到目标应用程序。

从命令行运行 XCP 外部模式仿真

您可以使用命令或脚本来运行 XCP 外部模式仿真。要检索和设置模型参数的值,请使用 get_paramset_param 命令。

要运行这些命令,您必须打开 Simulink 模型并运行目标应用程序。

  1. 将模型仿真模式设置为外部模式。

    set_param(gcs,'SimulationMode','external');

  2. 将 Simulink 连接到目标应用程序。

    set_param(gcs,'SimulationCommand','connect')

  3. 运行生成的模型代码。

    set_param(gcs,'SimulationCommand','start');

  4. 要调节参数,请通过一行命令来更改其工作区变量值。例如,如果将模块参数值指定为 Simulink.Parameter 对象,请将新值赋给 Value 属性。

    myParamObj.Value = 5.23;

  5. 要将新值下载到目标应用程序,请更新模型。

    set_param(gcs,'SimulationCommand','update');

  6. 停止目标应用程序,并断开 Simulink 与目标环境的连接。

    set_param(gcs,'SimulationCommand','stop');

    要在不停止执行生成代码的情况下断开 Simulink 与目标应用程序的连接,请使用以下命令:

    set_param(gcs,'SimulationCommand','disconnect');

XCP 外部模式限制

下表描述了适用于使用 XCP 通信的外部模式仿真的限制。

功能详细信息

更改模型结构的参数更新

您无法更改:

  • 模块的状态、输入或输出的数量

  • 采样时间或采样时间的数量

  • 连续系统的积分算法

  • 模型或模块的名称

如果您进行的参数更新会更改模型结构,则您必须重新编译目标应用程序。

如果状态数不变,您可以更改 Transfer FcnDiscrete Transfer FcnDiscrete Filter 模块的分子多项式和分母多项式参数。

您无法更改 State-SpaceZero-PoleDiscrete Zero-Pole 模块中由用户指定的或计算的参数(即在零极点到状态空间变换过程中得到的 A、B、C 和 D 矩阵)中的零值项。

State-Space 模块中,如果在可控标准实现中指定矩阵,则允许在保留此实现和矩阵维度的前提下对 A、B、C 和 D 矩阵进行更改。

如果 Simulink 模块图与目标应用程序不匹配,Simulink 会产生错误,指出校验和不匹配。校验和会考虑顶层模型,但不考虑引用模型。要重新编译目标应用程序,请使用更新后的模块图。

信号值显示

不支持仿真期间信号值的图形显示。例如,您无法使用仿真中的数据显示菜单项悬停时显示值标签点击时切换值标签显示所选端口的值标签。有关详细信息,请参阅在模型图中显示信号值

信号触发和数据存档

不支持外部模式控制面板上提供的信号和触发装载触发器取消触发器数据存档功能。

信号流式传输

不支持流式传输信号的动态选择。要选择不同信号进行流式传输,请重新编译模型。

覆盖信号记录设置不支持使用信号记录选择器覆盖信号记录设置。

编译器调试符号格式

您的工具链必须以下列格式之一生成调试信息:

  • DWARF

  • PDB

内联参数

如果将 DefaultParameterBehavior 设置为 'Inlined',代码生成器会在生成的代码中嵌入数值模型参数值,而不是符号参数名称。您可以使用 Simulink.Parameter 对象从内联中删除参数并声明参数可调。不过,当您将 Simulink 连接到目标应用程序时,可调参数的数值不会自动上传到模型中。Simulink 会产生警告。

全局变量

信号、参数和状态必须指定为全局变量。存储变量的目标内存位置必须在 0 - 4294967295 范围内。

参数结构体

您无法调节作为结构体的参数。

纯整数代码

支持纯整数代码。对于代码生成,如果 'PurelyIntegerCode''on',请指定分辨率大于或等于 1 微秒的 'FixedStep'。例如,指定 1.000001,而不是 1.0000001。

如果您没有在执行命令中指定 -tf finalTime,目标应用程序将无限期运行生成的模型代码,而忽略 StopTime

如果在执行命令中指定 -tf finalTime

  • finalTime 值表示基本速率时钟计时单元,而不是秒。

  • finalTime 的最大值(以计时单元为单位)是 MAX_int32_T

可变大小信号

不支持上传可变大小信号。

Scope Floating Scope 模块,以及波形查看器

不支持某些信号数据类型。仿真会产生警告。

引用模型中的示波器

在模型层次结构中,如果顶层模型在外部模式下运行,而引用模型在普通模式或加速模式下运行,则不会显示引用模型中的示波器。

非零仿真开始时间

不支持非零仿真开始时间。使用求解器 > 开始时间默认值 0.0

作用域为文件的数据

不支持作用域为文件的数据。例如,应用内置自定义存储类 FileScope 的数据项。仿真会产生警告。

行优先代码生成

不支持以行优先格式生成的代码。

相关主题

外部网站