Main Content

使用 TCP/IP 的外部模式仿真

设置并运行外部模式仿真,该仿真在开发计算机和所选硬件板之间使用 TCP/IP 或串行 (RS-232) 通信通道。

  1. 创建和配置一个简单模型。

  2. 编译、部署并启动目标可执行文件。

  3. 调整参数。

创建和配置模型

在示例的此部分,您创建一个简单模型 ex_extModeExample。您还创建名为 ext_mode_example 的文件夹来存储模型和生成的可执行文件。

要创建文件夹和模型,请执行以下操作:

  1. 在 MATLAB® 命令行中,键入:

    mkdir ext_mode_example
  2. ext_mode_example 作为您的工作文件夹:

    cd ext_mode_example
  3. 在 Simulink® 中创建一个模型,其中包含一个用作输入信号的 Sine Wave 模块,两个并联的 Gain 模块,两个并联的 Scope 模块。请务必对 GainScope 模块进行标记。

    Scope block A displays the output of Gain block A, and Scope block B displays the output of Gain block B.

  4. 定义并分配两个 MATLAB 工作区变量 AB

    A = 2;
    B = 3;
  5. 打开 Gain 模块 A 并将其增益参数设置为变量 A

    Use the Function Block Parameters dialog box to configure the Gain block.

  6. 打开 Gain 模块 B 并将其增益参数设置为变量 B

    当目标应用程序在外部模式下编译并连接到 Simulink 时,您可以将新增益值下载到正在执行的目标应用程序。为此,您可以为工作区变量 AB 赋予新值,或在模块参数对话框中编辑值。有关详细信息,请参阅调整参数

  7. 验证模型的运行。打开 Scope 模块并运行模型。当 A = 2B = 3 时,输出会显示。

    Scope block A and Scope block B display the simulation output signals.

  8. 将模型另存为 ex_extModeExample

编译目标可执行文件

设置外部模式目标应用程序所需的模型和代码生成参数。然后,生成代码并编译目标应用程序。

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

  2. 硬件板运行弹出窗口中,将硬件板设置为受支持的 ARM® Cortex®-R 硬件板。

  3. 准备部分中,点击硬件设置。这将打开“配置参数”对话框,显示由系统目标文件确定的硬件实现设置。

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

    1. 类型字段中,选择定步长

    2. 求解器字段中,选择离散(无连续状态)

    3. 点击求解器详细信息。在定步长字段中,指定 0.1

    4. 点击应用

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

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

运行目标应用程序

您现在运行 ex_extModeExample 目标可执行文件,并使用 Simulink 作为正在运行的目标应用程序的交互式前端。可执行文件位于您的工作文件夹中。运行目标应用程序,并在 Simulink 和目标之间建立通信。

要运行目标应用程序,请执行以下操作:

  1. 硬件选项卡的在硬件上运行部分中,点击监控并调节。然后:

    1. 停止时间字段中,指定 inf,这将使模型一直运行到目标应用程序收到来自 Simulink 的停止消息为止。

    2. 分步命令下,点击部署

    目标应用程序开始执行,并进入等待状态。

  2. 打开模型中的 Scope 模块。在开始执行模型之前,信号在示波器上不可见。

  3. 硬件选项卡的在硬件上运行部分中,点击监控并调节。然后,在分步命令下,点击连接。此操作启动 Simulink 和目标应用程序之间的握手。当 Simulink 和目标连接时,连接按钮变为断开连接

  4. 在硬件上运行部分中,点击 ,这将开始执行生成的模型代码。模型中的两个示波器显示 Gain 模块 A 和 B 的输出。

您已在 Simulink 和正在运行的目标应用程序之间建立通信。现在,您可以在 Simulink 中调整模块参数,并观察参数变化的影响。

调整参数

通过为 MATLAB 工作区中的变量 AB 赋予新值,您可以更改任一 Gain 模块的增益因子。当您在仿真期间更改工作区中的模块参数值时,必须以显式方式用这些更改来更新模块图。更新模块图时,新值会下载到目标应用程序中。

  1. 硬件选项卡的准备部分中,点击批处理模式

  2. 在命令行窗口中,为两个变量赋予新值,例如:

    A = 0.5;
    B = 3.5;
  3. 硬件选项卡的准备部分中,点击更新所有参数。Simulink 会更新模块参数并将新增益值下载到目标应用程序。

在某些情况下,您还可以调节用于指定模块参数值的表达式。要在仿真期间更改表达式,请使用“模块参数”对话框:

  1. Sine Wave 模块对话框中,将振幅设置为 0.5

  2. 点击应用确定。Simulink 会将新模块参数值下载到目标应用程序。

要同时断开 Simulink 与主机/目标通信的连接并结束目标应用程序的执行,请在硬件选项卡的在硬件上运行部分中,点击停止

在仿真过程中,您无法更改 Sine Wave 模块的采样时间。模块采样时间是模型结构定义的一部分,也是生成的代码的一部分。因此,如果要更改模块采样时间,您必须停止外部模式仿真,重置模块的采样时间,并重新编译可执行文件。

外部模式仿真期间的模块参数可调性取决于生成的代码表示模块参数的方式。

例如,在 Gain A 模块对话框中,您无法在仿真过程中更改增益参数中的表达式 A。在这种情况下,您必须在基础工作区中更改变量 A 的值。您无法更改表达式,因为生成的代码不会为增益参数分配内存存储空间。在这种情况下,代码在结构体中创建字段 A

/* Parameters (auto storage) */
struct P_ex_extModeExample_T_ {
  real_T A;                            /* Variable: A
                                        */
  real_T B;                            /* Variable: B
                                        */
  real_T SineWave_Amp;                 /* Expression: 1
                                        */
  real_T SineWave_Bias;                /* Expression: 0
                                        */
  real_T SineWave_Freq;                /* Expression: 1
                                        */
  real_T SineWave_Phase;               /* Expression: 0
                                        */
};

生成的代码算法使用代码中这一表示模块 Gain A 的字段。在本例中,全局结构体变量 ex_extModeExample_P 使用 P_ex_extModeExample_T_ 类型:

ex_extModeExample_B.GainA = ex_extModeExample_P.A * rtb_SineWave;

当您在基础工作区中更改 A 的值时,仿真会将新值下载到目标应用程序中的字段 A 中。

您可以在仿真过程中更改 Sine Wave 模块参数中的表达式,因为生成的代码会在全局结构体 ex_extModeExample_P 中创建字段来表示模块中的每个参数。当您在模块对话框中更改表达式时,仿真首先计算新表达式。然后,仿真将结果数值下载到目标应用程序中对应的结构体字段。

请参阅在生成的代码中创建可调标定参数

控制目标中通信缓冲区的内存分配

如果选中代码生成 > 接口 > 静态内存分配复选框(针对 GRT 和 ERT 目标),代码生成器将为仅使用静态内存分配的外部模式生成代码("malloc-free" 代码)。选择静态内存分配会启用静态内存缓冲区大小参数。使用此参数指定外部模式静态内存缓冲区的大小。默认值为 1,000,000 字节。如果您为程序输入的值太小,外部模式仿真会在尝试分配超出指定值的内存时发出内存不足错误。在这种情况下,请增大静态内存缓冲区大小字段中的值,并重新生成代码。

要确定分配多少内存,请对目标启用详尽模式(通过在 make 命令行中包含 OPTS="-DVERBOSE")。当它执行时,外部模式显示它尝试分配的内存量以及它每次尝试分配时可用的内存量。如果分配失败,您可以使用此控制台日志来确定静态内存缓冲区大小字段的规定值。

通过外部模式控制面板控制外部模式仿真

外部模式控制面板用于集中控制外部模式操作,包括:

要打开“外部模式控制面板”对话框,请在硬件选项卡的准备部分中,点击控制面板

连接、启动和停止

“外部模式控制面板”执行的连接/断开和启动/停止功能与 Simulink 工具条中硬件选项卡上的相同,请参阅外部模式仿真的图形控制摘要

点击连接按钮会将您的模型连接到正在等待或正在运行的目标应用程序。完成连接后,该按钮将更改为断开连接按钮。断开连接将您的模型与目标环境断开连接,但不会停止目标环境中的实时代码运行。

点击启动实时代码按钮命令会指示目标开始运行实时代码。当实时代码在目标环境中运行时,该按钮变为停止实时代码按钮。停止实时代码用于停止目标应用程序执行,并将您的模型与目标环境断开连接。

将目标应用程序信号数据上传到主机

“外部模式控制面板”允许您触发和取消向主机上传数据。上传数据的目的地可以是 Scope 模块、Display 模块、To Workspace 模块或与外部模式兼容的模块和子系统中列出的其他模块或子系统。

装载触发器取消触发器按钮让您能够手动控制向兼容的模块或子系统上传数据,但不包括浮动示波器。(对于浮动示波器,请使用“外部模式控制面板”的浮动示波器部分。)

  • 要触发向兼容的模块或子系统上传数据,请点击装载触发器按钮。该按钮变为取消触发器

  • 要取消数据上传,请点击取消触发器按钮。该按钮恢复为装载触发器

您可以手动或自动触发数据上传。要配置数据上传的信号和触发器,请参阅配置目标应用程序信号数据的主机监控

部分外部模式兼容模块(包括 Scope、Time Scope 和 To Workspace)允许您将上传的数据记录到磁盘。要配置数据存档,请参阅配置目标应用程序信号数据的主机存档

“外部模式控制面板”的浮动示波器部分控制数据何时上传到 Floating Scope 模块以及上传多长时间。当在外部模式下使用时,浮动示波器:

  • 不出现在“外部信号和触发”对话框中。

  • 不将数据记录到外部模式存档。

  • 仅支持手动触发。

浮动示波器部分包含以下参数:

  • 启用数据上传选项,用作浮动示波器的装载触发器按钮。当目标断开连接时,该选项控制连接浮动示波器时是否装载触发器。当目标连接时,该选项充当装载或取消触发器的切换按钮。

    • 要触发向浮动示波器上传数据,请选中启用数据上传

    • 要取消向浮动示波器上传数据,请清除启用数据上传

  • 持续时间编辑字段,指定在触发事件后外部模式记录浮动示波器数据的基本速率步数。默认情况下,该字段设置为自动,这将使用在“外部信号和触发”对话框中设置的持续时间值。默认持续时间值是 1000 个基本速率步。

将参数下载到目标应用程序

“外部模式控制面板”上的批量下载选项用于启用或禁用批处理参数更改。

默认情况下,批量下载被禁用。如果批量下载被禁用,当您点击确定应用时,那些通过编辑模块参数对话框直接进行的模块参数更改将被发送到目标。执行更新图时,将发送对 MATLAB 工作区变量的更改。

如果选择批量下载,将启用下载按钮。在您点击下载之前,对模块参数所做的更改会存储在本地。当您点击下载时,所有更改将在一次传输中发送。

当参数更改等待批量下载时,“外部模式控制面板”在下载按钮右侧显示消息 Parameter changes pending...。此消息将一直可见,直到 Simulink 引擎收到新参数已安装在目标系统的参数向量中的通知。

The External Mode Control Panel dialog box appears with the Batch download option activated and parameter changes pending.

配置目标应用程序信号数据的主机监控

触发器在信号数据上传中的作用

在外部模式下,是否向主机上传目标应用程序信号数据取决于触发器。触发器是开始数据上传所必须满足的一组条件。触发器可以装载也可以不装载。

  • 如果装载了触发器,软件会检查允许数据上传开始的触发条件。

  • 如果没有装载,软件不会检查触发条件,数据上传无法开始。

  • 当主机连接到目标时会自动装载触发器,也可以通过点击“外部模式控制面板”上的装载触发器按钮手动装载触发器。

当触发器已装载并且满足触发条件时,触发器触发并且数据上传开始。

经过指定时长的数据采集后,触发事件完成,数据上传停止。然后,触发器可以重新装载,或保持未装载,直到您点击装载触发器按钮。

要选择要上传的目标应用程序信号并配置如何触发上传,请参阅配置信号数据上传

配置信号数据上传

点击“外部模式控制面板”的外部信号和触发按钮会打开“外部信号和触发”对话框。

Use the External Signal and Triggering dialog box to select the signals that are collected from the target system.

“外部信号和触发”对话框显示模型中支持外部模式信号上传的模块和子系统列表。有关哪些类型的模块与外部模式兼容的信息,请参阅与外部模式兼容的模块和子系统

在“外部信号和触发”对话框中,您可以选择从目标系统采集并在外部模式下查看的信号。您还可以选择一个触发信号(该信号在满足特定信号条件时触发数据上传),并定义触发条件。

默认触发器选项

上图显示了“外部信号和触发”对话框的默认设置。“外部信号和触发”对话框的默认操作简化了对目标应用程序的监控。如果使用默认设置,则不需要预配置信号和触发器。您启动目标应用程序,并将 Simulink 引擎连接到它。系统将选择外部模式兼容模块并装载触发器。在连接到目标应用程序后,信号上传立即开始。

触发器选项的默认配置是:

  • 全选:打开

  • :手动

  • 模式:普通

  • 持续时间:1000

  • 延迟:0

  • 连接到目标时装载:打开

选择要上传的信号

模型中的外部模式兼容模块出现在“外部信号和触发”对话框的信号选择列表中。您可以使用此列表选择要查看的信号。在选定列中,对每个所选模块都会显示 X

全选复选框用于选择所有信号。默认情况下,全选处于选中状态。

如果清除了全选,您可以使用打开关闭选项选中或清除单个信号。要选择一个信号,请点击其列表条目,然后选择打开选项。要清除一个信号,请点击其列表条目,并选择关闭选项。

全部清除按钮用于清除所有信号。

配置触发器选项

触发器在信号数据上传中的作用中所述,信号数据上传取决于触发器。触发器定义开始上传所必须满足的条件。而且,要开始上传数据,必须装载触发器。当触发器已装载并且满足触发条件时,触发器将触发并开始上传。经过指定时长的数据采集后,触发事件完成,数据上传停止。

要控制何时以及如何从目标系统采集(上传)信号数据,请在“外部信号和触发”对话框中配置以下触发器选项

  • 手动信号。控制按钮或信号是否触发数据上传。

    选择手动会指示外部模式使用“外部模式控制面板”上的装载触发器按钮作为开始上传数据的触发器。当您点击装载触发器时,数据上传开始。

    选择信号会指示外部模式使用触发信号作为开始上传数据的触发器。当触发信号满足触发条件时(即,信号在指定方向越过触发电平),触发事件发生。(在触发信号部分指定触发条件。)如果触发器已装载,外部模式会监控触发事件的发生。当触发事件发生时,数据上传开始。

  • 模式普通一次。控制触发事件完成后触发器是否重新装载。

    普通模式下,外部模式会在每次触发事件后自动重新装载触发器。在触发器触发时,下一次数据上传开始。

    一次模式下,每次装载触发器时,外部模式仅采集一个缓冲区的数据。

    有关模式设置的详细信息,请参阅配置目标应用程序信号数据的主机存档

  • 持续时间:指定触发事件后外部模式上传数据的基本速率步数(默认值为 1000)。例如,如果持续时间设置为 1000,并且模型的基本(最快)速率为一秒:

    • 对于以一秒的基本速率采样的信号(1.0 赫兹),外部模式在触发事件期间采集 1000 个连续样本。

    • 对于以两秒采样的信号(0.5 赫兹),外部模式在触发事件期间采集 500 个样本。

  • 延迟:指定要应用于数据采集的延迟。延迟表示触发事件和数据采集开始之间经过的时间。延迟以基本速率步数表示。它可以是正值或负值(默认值为 0)。负延迟对应于预触发。当延迟为负值时,将采集并上传触发事件之前的数据。

  • 连接到目标时装载:选中或清除。无论由按钮还是信号触发数据上传(由定义),触发器都必须装载好才能允许开始数据上传。

    如果选择此选项,将在连接到目标时装载触发器。

    • 如果触发手动,则立即开始数据上传。

    • 如果触发信号,则立即开始监控触发信号。当触发信号满足触发条件(如触发信号部分所定义)时,数据上传开始。

    如果您清除了连接到目标时装载,可以通过点击“外部模式控制面板”上的装载触发器按钮手动装载触发器。

在外部模式下仿真时,模型中的每个速率都会在目标上创建一个缓冲区。缓冲器中的每个条目都足够大,可以将该速率下每个信号所需的所有数据保留一个时间步(时间+数据+识别信号的外部模式索引)。环形缓冲区中的条目数由外部模式触发器的持续时间参数 (ExtModeTrigDuration) 决定。分配给目标以用于缓冲信号的内存与持续时间和上传的信号数量成比例。持续时间还指示在外部模式下触发事件后日志数据的基本速率步数。

持续时间值指定在每个数据缓冲区中要采集的连续数据点数。您输入的持续时间值应等于您需要采集的连续采样点数,而不是依赖一系列缓冲区来保持连续。如果输入的值小于采样点总数,在将值从数据缓冲区传输到 MATLAB 工作区期间,您可能会丢失采样点。Simulink 软件仅在一个缓冲区内保持点连续性。在缓冲区之间,因为传输时间的原因,一些样本可能会被忽略。

持续时间值会影响 ScopeTo Workspace 模块的将数据点限制为最后值。模块保存到 MATLAB 工作区的采样点数是这两个值中的较小者。要设置模块保存的采样点数,请清除将数据点限制为最后。然后,使用持续时间指定保存的采样点数。

选择触发信号

您可以指定一个信号作为触发信号。要选择触发信号,请从触发器选项部分的菜单中,选择信号。此操作将启用触发信号部分中的参数。然后,在信号选择列表中选择信号,并点击触发信号按钮。

当您选择一个信号作为触发信号时,信号选择列表的触发列中会相应出现一个 T。在下图中,Scope A 信号是触发信号。Scope B 也被选中以便查看,如选定列中的 X 所示。

Use the External Signal and Triggering dialog box to select the signals that are collected from the target system.

选择触发信号后,您可以使用触发信号部分定义触发条件,并设置触发信号端口元素参数。

设置触发条件

使用“外部信号和触发”对话框的触发信号部分设置触发条件和属性。仅当触发器选项部分中的触发器参数设置为信号时,才能启用触发信号参数。

默认情况下,触发器模块的第一个输入端口的任何元素都会导致触发器触发(即“端口”指定为 1,“元素”指定为“任何”)。您可以通过调整触发信号部分中的端口元素值来修改此行为。端口字段接受数字或关键字 last元素字段接受数字或关键字 anylast

触发信号部分,您还可以定义触发事件发生的条件。

  • 方向上升沿下降沿任一沿。当信号穿越阈值时应遵循的行进方向。默认值为上升沿

  • 电平:一个值,指示信号必须沿指定方向穿越该阈值才能触发触发器。默认情况下,水平为 0。

  • 释抑:仅适用于普通模式。释抑以基本速率步数表示,是一个触发事件从终止到重新装载之间的时间。

连接时修改信号和触发选项

在配置信号数据上传并将 Simulink 连接到正在运行的目标可执行文件后,您可以修改信号和触发选项,而无需断开与目标的连接。

如果触发器已装载(例如,触发器选项连接到目标时装载已选中,这也是默认设置),则无法修改“外部信号和触发”对话框。要修改信号和触发选项,请执行以下操作:

  1. 打开“外部模式控制面板”。

  2. 点击取消触发器。将停止触发且停止显示上传数据。

  3. 打开“外部信号和触发”对话框,根据需要修改信号和触发器选项。例如,您可以在信号选择部分中启用或禁用范围,在触发器选项部分中更改触发器模式,例如从普通更改为一次

  4. 点击装载触发器。触发和上传数据的显示恢复,并应用了您的修改。

    Use the External Signal and Triggering dialog box to modify signal and trigger options.

配置目标应用程序信号数据的主机存档

在外部模式下,您可以使用 Simulink 的 Scope 和 To Workspace 模块将数据存档到磁盘。

要了解存档功能如何工作,请设想存档未启用时的数据处理。有两种情况,一次模式和普通模式。

  • 在一次模式下,触发事件发生后,每个所选模块都会将其数据写入工作区,就像在仿真结束时一样。如果触发了另一个一次模式,现有工作区数据将被覆盖。

  • 在普通模式下,外部模式会在每次触发事件后自动重新装载触发器。因此,您可以将普通模式视为一系列一次模式。该系列中的每个一次(除了最后一个)都称为中间结果。由于触发器可以随时触发,因此将中间结果写入工作区会导致工作区变量发生不可预测的覆盖。因此,默认行为是只将最后一次 one-shot 的结果写入工作区。中间结果将被丢弃。如果您知道各次触发之间都有足够的时间来检查中间结果,您可以通过选择将中间结果写入工作区选项来覆盖默认行为。此选项无法防止工作区数据不被后续触发覆盖。

如果您使用 Simulink 的 Scope 模块将数据存档到磁盘,请打开“示波器”参数对话框,并选择选项将数据记录到工作区。该选项是必需的,原因如下:

  • 数据首先从示波器数据缓冲区传输到 MATLAB 工作区,再写入 MAT 文件。

  • 在“示波器”参数对话框中输入的变量名称与 MATLAB 工作区和 MAT 文件中的相同。通过保存数据,可以将使用变量名称参数命名的变量保存到 MAT 文件中。

注意

如果没有选择 Scope 模块选项将数据记录到工作区,用于数据记录的 MAT 文件仍将创建,但是为空。

“启用数据存档”对话框支持:

  • 文件夹注释

  • 文件注释

  • 自动化数据存档

在“外部模式控制面板”上,点击数据存档按钮,打开“启用数据存档”对话框。如果您的模型连接到了目标环境,请在配置数据存档时断开连接。要启用对话框中的其他控制项,请选择启用存档

Use the Enable Data Archiving dialog box to enable archiving.

“启用数据存档”对话框支持下列操作。

文件夹注释

要为某一文件夹中的一批相关数据文件添加注释,请在“启用数据存档”对话框中,点击编辑目录注释。MATLAB 编辑器随即打开。在此窗口中键入注释,这些注释将以文件形式保存到指定文件夹中。默认情况下,注释保存到数据存档最近一次写入的文件夹中。

文件注释

要为单个数据文件添加注释,请在“启用数据存档”对话框中,点击编辑文件注释。文件查找器窗口随即打开,默认情况下,它将定位到您最近一次写入的文件。选择 MAT 文件会打开编辑窗口。在此窗口中,添加或编辑您要随单个 MAT 文件一起保存的注释。

自动化数据存档

要配置将日志记录结果自动写入磁盘(可以选择是否包括中间结果),请使用启用存档选项及其启用的控制项。该对话框提供以下相关控制项:

  • 目录:指定保存数据的文件夹。如果选择装载触发器时递增目录,外部模式会追加后缀。

  • 文件:指定保存数据的文件的名称。如果选择触发一次后递增文件,外部模式会追加后缀。

  • 装载触发器时递增目录:每次点击装载触发器按钮,外部模式都会使用一个新文件夹来写入日志文件。文件夹以增量方式命名,例如,dirname1dirname2 等。

  • 触发一次后递增文件:新数据缓冲区保存在增量命名的文件中:filename1filename2 等。文件增量命名在普通模式下自动发生。

  • 将文件后缀追加到变量名称:外部模式以增量方式命名文件时,每个文件均包含具有相同名称的变量。如果选择将文件后缀追加到变量名称,每个文件将包含唯一的变量名称。例如,外部模式在以增量方式命名的文件中(file_1file_2 等)保存名为 xdata 的变量时,将其命名为 xdata_1xdata_2 等。这种方法支持将 MAT 文件加载到工作区并通过 MATLAB 命令提示符比较变量。如果没有唯一名称,在 MATLAB 工作区中,xdata 的每个实例都将覆盖它的前一个实例。

  • 将中间结果写入工作区:如果您希望 SimulinkCoder™ 软件将中间结果写入工作区,请选择此选项。

外部模式仿真的图形控制摘要

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

  • Simulink 工具条中的硬件选项卡。要显示硬件选项卡,请在 Simulink 工具条的 App 选项卡中,点击在自定义硬件上运行

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

下表列出了硬件选项卡上的功能,您可以使用这些功能来控制外部模式仿真。

外部模式操作“硬件”选项卡外部模式控制面板按钮
将您的模型连接到正在等待或正在运行的目标应用程序在硬件上运行 >
连接
按钮
连接
开始在目标环境中运行实时代码开始按钮 启动实时代码
断开模型与目标环境的连接(不停止运行实时代码)在硬件上运行 >
断开连接
按钮
断开连接
停止目标应用程序的执行,并断开模型与目标环境的连接停止按钮 停止实时代码

与外部模式兼容的模块和子系统

兼容模块

在外部模式下,您可以使用以下类型的模块来接收和查看从目标应用程序上传的信号:

  • Floating Scope 和 Scope 模块

  • DSP System Toolbox™ 产品中的 Spectrum Analyzer 和 Time Scope 模块

  • Display 模块

  • To Workspace 模块

  • 用户编写的 S-Function 模块

    S-function API 中内置了外部模式方法。此方法支持用户编写兼容外部模式的模块。请参阅 matlabroot/simulink/include/simstruc.h

  • XY Graph 模块

您可以将某些子系统指定为信号查看子系统,并使用它们接收和查看从目标应用程序上传的信号。有关详细信息,请参阅 信号查看子系统

您可以使用“外部信号和触发”对话框选择外部模式兼容模块和子系统并装载触发器。默认情况下,模型中的此类模块处于选中状态,并且手动触发器设置为在连接到目标应用程序时装载。

信号查看子系统

信号查看子系统是原子子系统,它封装了来自目标系统的信号的处理和查看。信号查看子系统仅在主机上运行,不在目标系统中生成代码。信号查看子系统以普通、快速、快速加速和外部仿真模式运行。

注意

如果信号查看子系统放置在 SIL 或 PIL 组件中,例如 SIL 或 PIL 模式的顶层模型、SIL 或 PIL 模式的 Model 模块或者 SIL 或 PIL 模块中,则它处于非激活状态。但是,SIL 或 PIL 组件可以为在支持模式下运行的信号查看子系统馈送信号。

如果您要在查看或记录信号之前处理或调节信号,但又不想在目标系统上执行这些任务,则信号查看子系统非常有用。通过使用信号查看子系统,您可以在目标系统上生成更小、更高效的代码。

与其他外部模式兼容模块一样,信号查看子系统显示在“外部信号和触发”对话框中。

要将子系统声明为信号查看子系统,请执行以下操作:

  1. 在“模块参数”对话框中,选择视为原子单元选项。

    有关原子子系统的详细信息,请参阅Generate Subsystem Code as Separate Function and Files

  2. 要打开 SimViewingDevice 属性,请使用 set_param 命令:

    set_param('blockname', 'SimViewingDevice','on')

    'blockname' 是子系统的名称。

  3. 确保子系统满足以下要求:

    • 它必须为纯 Sink 模块。也就是说,不能包含 Outport 模块或 Data Store 模块。仅当对应的 From 模块包含在子系统边界内时,它才能包含 Goto 模块。

    • 它不能有连续状态。

模型 sink_examp 包含原子子系统 theSink

The Sine Wave block provides input to the subsystem, theSink.

子系统 theSink 对其输入信号应用增益和偏移,并将其显示在 Scope 模块上。

The Scope block displays the simulation output signal.

如果 theSink 声明为信号查看子系统,则生成的目标应用程序仅包括 Sine Wave 模块的代码。如果在“外部信号和触发”对话框中选择并装载了 theSink,目标应用程序将在仿真过程中向 theSink 上传正弦波信号。然后,您可以修改 theSink 中模块的参数,并观察上传的信号。

如果 theSink 未声明为信号查看子系统,其 Gain、Constant 和 Sum 模块将作为目标系统上的子系统代码运行。正弦波信号在经过这些模块处理后,将上传到 Simulink 引擎,并可在 sink_examp/theSink/Scope2 上查看。额外的信号处理和从主机下载模块参数变化,将增加对目标系统的处理要求。

支持数据存档的模块

在外部模式下,您可以使用以下类型的模块将数据存档到磁盘:

  • Scope 模块

  • To Workspace 模块

您可以使用“启用数据存档”对话框配置数据存档,如配置目标应用程序信号数据的主机存档中所述。

以编程方式使用外部模式

您可以从 MATLAB 命令行或在脚本中以编程方式运行外部模式仿真。使用 get_paramset_param 命令检索和设置模型仿真命令行参数(如 SimulationModeSimulationCommand)的值以及外部模式命令行参数(如 ExtModeCommandExtModeTrigType)的值。

以下模型仿真命令假设 Simulink 模型已打开,该模型将通过外部模式连接的目标应用程序也已加载。

  1. 将 Simulink 模型更改为外部模式:

    set_param(gcs,'SimulationMode','external')
  2. 将打开的模型连接到加载的目标应用程序:

    set_param(gcs,'SimulationCommand','connect')
  3. 开始运行目标应用程序:

    set_param(gcs,'SimulationCommand','start')
  4. 停止运行目标应用程序:

    set_param(gcs,'SimulationCommand','stop')
  5. 断开目标应用程序与模型的连接:

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

要调整工作区参数,请在命令提示符下更改其值。如果工作区参数是 Simulink.Parameter 对象,请将新值赋给 Value 属性。

myVariable = 5.23;
myParamObj.Value = 5.23;

在外部模式下,要下载工作区参数,需要更新模型图。以下模型仿真命令将启动模型更新:

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

要触发和取消向示波器上传数据,请使用 ExtModeCommandarmFloatingcancelFloating,或 armWiredcancelWired。例如,要触发然后取消向有线(非浮动)示波器上传数据,请执行以下命令:

set_param(gcs,'ExtModeCommand','armWired')
set_param(gcs,'ExtModeCommand','cancelWired')

下表列出了您可以在 get_paramset_param 命令中使用的外部模式命令行参数。该表包含简短描述、有效值(粗体突出显示了默认值)以及“外部模式”对话框中与之对应的等效项。有关等效于“配置参数”对话框中接口窗格选项的外部模式参数,请参阅模型配置参数:代码生成接口

外部模式命令行参数

参数和值对话框等效项描述
ExtModeAddSuffixToVar
off, on
启用数据存档:将文件后缀追加到变量名称复选框为每个增量命名的文件增量命名变量名称。
ExtModeArchiveDirName
character vector
启用数据存档:目录文本字段将数据保存在指定的文件夹中。
ExtModeArchiveFileName
character vector
启用数据存档:文件文本字段将数据保存在指定文件中。
ExtModeArchiveMode
character vector - off, auto, manual
启用数据存档:启用存档复选框

激活自动数据存档功能。

要指定 manual,请运行 set_param(gcs, 'ExtModeArchiveMode', 'manual')

请注意,如果您指定 autoExtModeAutoIncOneShot 将设置为 on

ExtModeArmWhenConnect
off, on
外部信号和触发:连接到目标时装载复选框一旦 Simulink Coder 软件连接到目标,立即装载触发器。
ExtModeAutoIncOneShot
off, on
启用数据存档:触发一次后递增文件复选框在增量命名的文件中保存新数据缓冲区。
ExtModeAutoUpdateStatusClock(仅限 Windows® 平台)
offon
不适用连续上传并在模型窗口状态栏上显示目标时间。
ExtModeBatchMode
off, on
外部模式控制面板:批量下载复选框在批处理模式下启用或禁用参数下载。
ExtModeChangesPending
off, on
不适用当启用 ExtModeBatchMode 时,指示参数是否保留在要下载到目标的参数队列中。
ExtModeCommand
character vector - armFloating, armWired, cancelFloating, cancelWired
  • armFloatingcancelFloating 等效于选中和清除“外部模式控制面板”中的浮动示波器 > 启用数据上传复选框

  • armWiredcancelWired 等效于“外部模式控制面板”中的装载触发器取消触发器按钮

向目标应用程序发出外部模式命令。
ExtModeConnected
off, on
外部模式控制面板:连接/断开连接按钮指示与目标应用程序的连接状态。
ExtModeEnableFloating
off, on
外部模式控制面板:启用数据上传复选框当与浮动示波器建立连接时,启用或禁用触发器的装载和取消。
ExtModeIncDirWhenArm
off, on
启用数据存档:装载触发器时递增目录复选框每次装载触发器时,将日志文件写入增量命名的文件夹中。
ExtModeLogAll
off, on
外部信号和触发:全选复选框将可用信号从目标上传到主机。
ExtModeParamChangesPending
off, on
不适用Simulink Coder 软件连接到目标并且 ExtModeBatchMode 启用时,指示参数是否仍保留在要下载到目标的参数队列中。比 ExtModeChangesPending 更高效,因为它检查与目标的连接。
ExtModeSkipDownloadWhenConnect
off, on
不适用无需下载参数即可连接到目标应用程序。
ExtModeTrigDelay
integer (0)
外部信号和触发:延迟文本字段指定发生触发事件和开始数据采集之间经过的时间量(以基本速率步数表示)。
ExtModeTrigDirection
character vector - rising, falling, either
外部信号和触发:方向菜单指定当信号穿越阈值时规定的行进方向。
ExtModeTrigDuration
integer (1000)
外部信号和触发:持续时间文本字段指定触发事件后外部模式记录数据的基本速率步数。
ExtModeTrigDurationFloating
character vector - integer (auto)
外部模式控制面板:持续时间文本字段指定浮动示波器的持续时间。如果指定自动,则使用 ExtModeTrigDuration 的值。
ExtModeTrigElement
character vector - integer, any, last
外部信号和触发:元素文本字段指定属于指定触发器模块输入端口的、可导致触发器触发的元素。
ExtModeTrigHoldOff
integer (0)
外部信号和触发:释抑文本字段指定触发事件终止和触发器重新装载之间的基本速率步数。
ExtModeTrigLevel
integer (0)
外部信号和触发:电平文本字段指定触发信号要触发触发器所必须穿越的阈值。
ExtModeTrigMode
character vector - normal, oneshot
外部信号和触发:模式菜单指定触发器是在每次触发事件后自动重新装载,还是每次装载时只采集一个缓冲区的数据。
ExtModeTrigPort
character vector - integer (1), last
外部信号和触发:端口文本字段指定属于指定触发器模块的、其元素可导致触发器触发的输入端口。
ExtModeTrigType
character vector - manual, signal
外部信号和触发:菜单指定是在触发器装载时还是在指定的触发器信号满足触发器条件时开始记录数据。
ExtModeUploadStatus
character vector - inactive, armed, uploading
不适用返回外部模式上传机制的状态 - 非活动、已装载或上传。
ExtModeWriteAllDataToWs
off, on
启用数据存档:将中间结果写入工作区复选框将中间结果写入工作区。

在外部模式下以动画方式显示 Stateflow

如果您有 Stateflow®,您可以在外部模式下以动画方式显示图。在外部模式下,您可以以动画方式显示 Stateflow 图中的状态,并在浮动示波器或信号查看器中查看测试点信号。

在外部模式下以动画方式显示仿真期间的状态

要在外部模式下以动画方式显示图中的状态,请执行以下操作:

  1. 将您要以动画方式显示的图加载到目标计算机上。

  2. 在“配置参数”对话框中,选中外部模式复选框。

  3. 打开“外部模式控制面板”对话框。

  4. 点击外部信号和触发

  5. 在“外部信号和触发”对话框中,设置以下参数。

    位置:选择:
    信号选择窗格要以动画方式显示的图
    触发器选项窗格连接到目标时装载复选框
    触发器选项窗格模式字段的下拉菜单中的普通
  6. 编译模型以生成可执行文件。

  7. 部署目标应用程序。

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

  9. 开始执行生成的模型代码。图会在执行时突出显示状态。

在浮动示波器和信号查看器中查看测试点数据

在外部模式下对 Stateflow 图进行仿真时,可以将本地示波器的图数据指定为测试点,并在浮动示波器和信号查看器中查看测试点数据。

要在外部模式下的仿真过程中查看测试点数据,请执行以下操作:

  1. 打开模型资源管理器,对于要查看的每个数据,请按照以下步骤操作:

    1. 在中间的内容窗格中,选择感兴趣的状态或局部数据。

    2. 在右侧的对话框窗格中,选择记录选项卡,然后选中测试点复选框。

  2. 从浮动示波器或信号查看器中,点击信号选择按钮。

    将打开“信号选择器”对话框。

  3. 在“信号选择器”的模型层次结构窗格中,选择图。

  4. 在“模型层次结构”的列出内容菜单中,选择仅测试点/记录信号,然后选择您要查看的信号。

  5. 按照在外部模式下以动画方式显示仿真期间的状态中所述,在外部模式下对模型进行仿真。

    当仿真运行时,示波器或查看器将显示测试点信号的值。

有关详细信息,请参阅 示波器和查看器在快速加速模式下的行为

TCP/IP 和串行外部模式的限制

功能详细信息
更改参数

通常,如果更改某参数会导致模型结构发生变化,则不能更改该参数。例如,您无法更改以下参数:

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

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

  • 连续系统的积分算法

  • 模型或模块的名称

如果您对模块图的上述参数进行了更改,则您必须用新生成的代码重新编译程序。

您可以通过特定方式更改传递函数和状态空间表示模块中的参数:

  • Transfer Fcn(连续和离散)和 Discrete Filter 模块的参数(分子和分母多项式)可以更改(只要状态数不变)。

  • 一旦外部仿真开始,将无法更改 State-Space 和 Zero Pole(包括连续和离散)模块中由用户指定或计算的参数(即在零极点到状态空间变换过程中得到的 A、B、C 和 D 矩阵)中的零值元。

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

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

上传数据

不支持将定点或枚举类型的数据值上传到工作区参数。

仿真中的信号值显示

模型中信号值的图形显示(如在模型图中显示信号值所述)不受支持。例如,您无法使用仿真中的数据显示菜单选项悬停时显示值标签点击时切换值标签显示所选端口的值标签

可调结构体参数

不支持上传或下载可调结构体参数。

纯整数代码

支持纯整数代码。

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

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

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

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

  • 当 16 位或 32 位计时单元计数器溢出时,Scope 模块中的仿真时间返回到零。

存档数据

Scope 和 To Workspace 模块支持将数据存档到磁盘。但是,其他示波器不支持数据存档。例如,您无法使用 Floating Scope 模块或查看器和生成器管理工具查看器对象来存档数据。

引用模型中的示波器

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

但是,如果顶层模型更改为在普通模式下仿真,则引用模型中示波器的行为在普通模式和加速模式下会有所不同。在普通模式下仿真的引用模型中的示波器会显示,而在加速模式下仿真的引用模型中的示波器不会显示。

仿真的开始时间

不支持非零仿真开始时间。在“配置参数”对话框的求解器窗格中,将开始时间设置为默认值 0.0

作用域为文件的数据

不支持作用域为文件的数据,例如,应用内置自定义存储类 FileScope 的数据项。作用域为文件的数据无法从外部访问。

具有自定义存储类的信号

不支持上传具有自定义存储类 (CSC) 的信号。

使用 printf 语句

要在目标硬件显示器上显示目标应用程序错误和信息性消息,您可以使用 printf 调用。对于某些目标硬件,使用 printf 语句会增加外部模式二进制文件的大小。要禁用 printf 调用,请为目标应用程序编译器指定预处理器宏定义 EXTMODE_DISABLEPRINTF

命令行参量

您可以使用命令行参量来运行目标应用程序。但存在以下限制:

  • 命令行参量的解析需要 sscanf 函数,这会增加一些目标硬件的程序大小。

  • 一些目标应用程序不接受命令行参量。

如果目标硬件不支持命令行参量的解析,请为目标应用程序编译器指定预处理器宏定义 EXTMODE_DISABLE_ARGS_PROCESSING=1

要替换 -w 选项,您可以使用以下命令指定目标应用程序进入并保持等待状态,直到它收到来自 Simulink 的连接消息:

set_param(modelName, 'OnTargetWaitForStart', 'on');
编译过程向编译器提供所需的选项 (-DON_TARGET_WAIT_FOR_START=1)。

行优先代码生成

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

相关主题