Main Content

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

使用 TCP/IP 或串行通信的外部模式仿真

设置并运行外部模式仿真,该仿真使用 TCP/IP 或串行 (RS-232) 通信信道。

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

  2. 编译目标可执行文件。

  3. 运行目标应用程序。

  4. 调整参数。

该示例使用 GRT 目标,它不需要外部硬件。生成的可执行文件可以通过以下方式运行:

  • 在托管 Simulink®Simulink Coder™ 的开发计算机上运行。

  • 作为独立于 MATLAB® 和 Simulink 的进程运行。

创建和配置模型

在示例的此部分,您创建一个简单模型 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 模块进行标记,如下图所示。

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

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

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

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

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

  8. 将模型另存为 ex_extModeExample

编译目标可执行文件

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

  1. 在 Simulink 工具条的 App 选项卡上,在为在硬件上运行进行设置部分中,点击在自定义硬件上运行

  2. 硬件选项卡的硬件部分的系统目标文件描述列表中,选择一般实时目标(grt.tlc)

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

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

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

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

    3. 点击求解器详细信息。在固定步长字段中,指定 0.1。(否则,当您生成代码时,SimulinkCoder 编译过程会生成警告并提供一个值。)

    4. 点击应用

  5. 数据导入/导出窗格中,清除时间输出复选框。在此示例中,数据不会记录到工作区或 MAT 文件中。点击应用

  6. 代码生成 > 优化窗格中,检查默认参数行为是否设置为可调。如果您进行了更改,请点击应用

  7. 代码生成 > 接口窗格的数据交换接口部分中,选择外部模式

  8. 外部模式配置部分,确保为传输层参数选择了默认值 tcpip

    外部模式支持通过 TCP/IP、串行和自定义传输协议进行通信。MEX 文件名指定实现主机-目标通信的 MEX 文件的名称。TCP/IP 的默认值为 ext_comm,这是 Simulink Coder 软件附带的 MEX 文件。您可以通过提供其他文件来覆盖此默认值。如果您需要支持其他传输层,请参阅为 TCP/IP 或串行外部模式通信创建传输层

    通过 MEX 文件参数字段,您可以指定要传递给外部接口程序的参数,如 TCP/IP 服务器端口号。这些参数特定于您正在使用的外部接口。有关设置这些参数的信息,请参阅TCP/IP 传输的 MEX 文件可选参量串行传输的 MEX 文件可选参量

    此示例使用默认参数。将 MEX 文件参数字段留空。

    静态内存分配复选框控制如何为目标中的外部模式通信缓冲区分配内存。对于此示例,不要选中该复选框。有关详细信息,请参阅 控制目标中通信缓冲区的内存分配

  9. 点击应用以保存外部模式设置。

  10. 保存模型。

  11. 选择代码生成窗格。确保仅生成代码处于清除状态。

  12. 要生成代码并创建目标应用程序,请在模型窗口中,按 Ctrl+B。或者,在硬件选项卡的在硬件上运行部分中,点击监控并调节。然后,在分步命令下,点击编译以监控

    软件会在您的工作文件夹中创建 ex_extModeExample 可执行文件。

运行目标应用程序

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

注意

ex_extModeExample 这样的外部模式程序是基于主机的可执行程序。它的执行不依赖于实时操作系统 (RTOS) 或周期性计时器中断,它也不实时运行。程序只是尽可能快地运行,并且它所计数的时间单位是仿真的时间单位,与程序外的世界中的时间并不一致。

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

  1. 硬件选项卡的在硬件上运行部分中:

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

    2. 点击监控并调节。然后,在分步命令下,点击部署

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

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

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

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

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

调整参数

下表说明如何在仿真期间调整可调模块参数。

方法详细信息

模型数据编辑器

要通过模型数据编辑器调整参数,请执行以下操作:

  1. 在 Simulink 编辑器的硬件选项卡上,在准备部分中,点击调整参数,这将打开模型数据编辑器。

  2. 如果您要同时更新多个可调参数,请在准备部分中,通过切换操作打开保持更新

  3. 在模型数据编辑器的参数选项卡上,在列中,为可调参数指定新值。

  4. 通过切换操作关闭保持更新或点击更新所有参数 (Ctrl+D)。Simulink 同时将新值下载到目标应用程序。

    如果保持更新关闭,则在您指定新值后,Simulink 会立即将新值下载到目标应用程序。

有关详细信息,请参阅模型数据编辑器

“模块参数”对话框

要通过“模块参数”对话框调整参数,请执行下列步骤:

  1. 对于要更新的每个模块,请执行以下操作:

    1. 双击该模块,打开“模块参数”对话框。

    2. 在参数字段中,指定新参数值。

    3. 点击应用确定

  2. 如果保持更新打开,请通过切换操作关闭保持更新或点击更新所有参数 (Ctrl+D)。Simulink 同时将新值下载到目标应用程序。

    如果保持更新关闭,则在您点击应用确定后,Simulink 会立即将新模块值下载到目标应用程序。

MATLAB 工作区

如果模块参数是 MATLAB 工作区变量,请执行以下操作:

  1. 在命令行窗口中,为变量赋予新值。

  2. 在 Simulink 编辑器的硬件选项卡上,在准备部分中,点击更新所有参数 (Ctrl+D)。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 中创建字段来表示模块中的每个参数。当您在模块对话框中更改表达式时,仿真首先计算新表达式。然后,仿真将结果数值下载到目标应用程序中对应的结构体字段。

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

停止目标应用程序

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

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

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

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

TCP/IP 或串行外部模式控制面板

“外部模式控制面板”用于控制 TCP/IP 或串行外部模式操作,包括:

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

连接、启动和停止

“外部模式控制面板”执行的连接/断开和启动/停止功能与 Simulink 工具条中硬件选项卡上的相同(请参阅TCP/IP 或串行外部模式仿真的图形控制项汇总)。

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

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

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

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

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

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

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

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

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

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

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

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

  • 仅支持手动触发。

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

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

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

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

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

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

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

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

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

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

下图显示了“外部模式控制面板”,其中批量下载选项已激活,参数更改尚未发送。

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

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

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

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

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

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

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

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

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

配置信号数据上传

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

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

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

默认触发器选项

上图显示了“外部信号和触发”对话框的默认设置。“外部信号和触发”对话框的默认操作简化了对目标应用程序的监控。如果使用默认设置,则不需要预配置信号和触发器。您启动目标应用程序,并将 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 所示。

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

设置触发条件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注意

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

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

  • 文件夹注释

  • 文件注释

  • 自动化数据存档

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

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

文件夹注释

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

文件注释

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

自动化数据存档

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

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

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

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

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

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

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

TCP/IP 或串行外部模式仿真的图形控制项汇总

您可以通过以下各项控制 TCP/IP 或串行外部模式仿真:

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

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

下表列出了您可以使用硬件选项卡和“外部模式控制面板”中可用的控制项执行的外部模式操作。

外部模式操作“硬件”选项卡外部模式控制面板

编译目标应用程序。

在硬件上运行 > 编译以监控

不适用

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

在硬件上运行 > 部署

不适用

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

在硬件上运行 > 连接

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

连接

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

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

在硬件上运行 > 开始

启动实时代码

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

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

在硬件上运行 > 断开连接

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

断开连接

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

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

停止实时代码

调整批量模块参数。

准备部分,使用保持更新 更新所有参数 按钮。

批量下载下载

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

兼容模块

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

  • Floating Scope 和 Scope 模块

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

  • Display 模块

  • To Workspace 模块

  • 用户编写的 S-Function 模块

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

  • Record, XY Graph 模块

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

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

信号查看子系统

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

注意

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

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

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

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

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

    有关原子子系统的详细信息,请参阅Simulink 建模组件

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

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

    'blockname' 是子系统的名称。

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

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

    • 它不能有连续状态。

以下模型 sink_examp 包含原子子系统 theSink

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

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

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

支持数据存档的模块

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

  • Scope 模块

  • To Workspace 模块

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

用于下载可调参数的外部模式机制

根据生成目标应用程序时默认参数行为选项的设置,处理参数更新的方式有所不同。下载机制说明了默认参数行为 设置为可调的外部模式通信的操作。内联和可调参数说明了默认参数行为设置为内联的外部模式的操作。

下载机制

在外部模式下,Simulink 引擎不对模块图所示的系统进行仿真。默认情况下,启用外部模式时,Simulink 引擎会将参数下载到目标系统。在初始下载后,引擎将保持等待模式,直到您更改了模块图中的参数,或直到引擎从目标接收到了数据。

当您更改模块图中的参数时,Simulink 引擎会调用外部接口 MEX 文件,将新参数值(及其他信息)作为参数传递。外部接口 MEX 文件包含用于实现进程间通信 (IPC) 信道一端的代码。该信道将 Simulink 进程(MEX 文件在其中执行)连接到正在执行外部程序的进程。MEX 文件通过使用该信道向外部程序传输新参数值。

通信信道的另一端在外部程序中实现。此端将新参数值写入目标的参数结构体 (model_P) 中。

Simulink 端通过向外部程序发送包含参数信息的消息来启动参数下载操作。在客户端/服务器计算的术语中,Simulink 端是客户端,外部程序是服务器。这两个进程可以是远程进程,也可以是本地进程。当客户端和服务器处于远程时,使用诸如 TCP/IP 之类的协议来传输数据。当客户端和服务器位于本地时,可以使用串行连接或共享内存来传输数据。

下图显示了这种关系。每当您更改模块图中的参数时,Simulink 引擎都会调用外部接口 MEX 文件。然后,MEX 文件通过使用通信信道将参数下载到外部程序。

外部模式架构

内联和可调参数

默认情况下,外部模式程序中的参数(TCP/IP 和串行外部模式的限制中列出的除外)是可调的;也就是说,您可以使用本节中所述的下载机制来更改它们。

如果您将默认参数行为设置为内联(通过“配置参数”对话框的优化窗格),则 Simulink Coder 代码生成器会在生成的代码中嵌入模型参数的数值(常量),而不是符号参数名称。内联参数有助于生成体积更小、运行更高效的代码。然而,内联参数实际上为常量,因此是不可调的。

Simulink Coder 软件可让您通过内联大多数参数来提高整体效率,同时保留对您的应用程序非常重要的所选参数的运行时调整灵活性。在内联参数时,您可以使用 Simulink.Parameter 对象从内联中删除单个参数,并声明它们是可调的。此外,您可以使用这些对象来控制参数在生成的代码中的表示方式。

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

主机/目标连接上的自动参数上传.  每次 Simulink 引擎连接到在默认参数行为设置为内联状态下生成的目标应用程序时,目标应用程序都会将其可调参数的当前值上传到主机。这些值赋给对应的 MATLAB 工作区变量。此过程在主机和目标之间同步参数值。如果可调参数存储在模型工作区或数据字典中,则不会上传这些值,并且 Simulink 会产生警告。

模型所需的工作区变量必须在主机/目标连接时初始化。否则上传无法继续,并会导致错误。一旦建立了连接,这些变量将更新以反映目标系统上的当前参数值。

仅当在默认参数行为设置为内联的情况下生成目标应用程序时,参数才会自动上传。下载机制说明了默认参数行为设置为可调时外部模式通信的操作。

选择客户端和服务器的通信协议

简介

SimulinkCoder 产品提供可实现基于 TCP/IP 或串行协议的外部模式通信的客户端和服务器端的代码。如果您的目标系统支持 TCP/IP,您可以将 SimulinkCoder 产品中基于套接字的外部模式实现与生成的代码结合使用。否则,请使用提供的串行传输层选项,或对其进行自定义。

低级传输层处理消息的物理传输。Simulink 引擎和模型代码都独立于此传输层。传输层和直接与传输层对接的代码被分别隔离在不同的模块中,这些模块负责格式化、发送和接收消息及数据包。

使用 TCP/IP 实现

在 The Open Group UNIX® 或 PC 系统上,您可以将基于 TCP/IP 的外部模式客户端/服务器实现与实时程序结合使用。有关自定义外部模式传输层的帮助,请参阅为 TCP/IP 或串行外部模式通信创建传输层

要通过 TCP/IP 使用 Simulink 外部模式,请执行以下操作:

  • 确保您已指定目标的 TCP/IP 传输的外部接口 MEX 文件。

    MathWorks® 提供的目标在 matlabroot/toolbox/simulink/simulink/extmode_transports.m 中指定外部接口 MEX 文件的名称。接口的名称在“配置参数”对话框的接口 窗格的外部模式配置部分中显示为不可编辑的文本。TCP/IP 默认值为 ext_comm

    要为自定义目标指定 TCP/IP 传输,您必须将以下形式的条目添加到 MATLAB 路径上的 sl_customization.m 文件中:

    function sl_customization(cm)
      cm.ExtModeTransports.add('stf.tlc', 'transport', 'mexfile', 'Level1');
    %end function
    • stf.tlc 是您为其注册传输的系统目标文件的名称(例如,'mytarget.tlc'

    • transport 是要在“配置参数”对话框的接口窗格的传输层菜单中显示的传输协议的名称(例如,'tcpip'

    • mexfile 是传输协议的关联外部接口 MEX 文件的名称(例如,'ext_comm'

    您可以通过增加 cm.ExtModeTransports.add 行来指定多个目标和/或传输,例如:

    function sl_customization(cm)
      cm.ExtModeTransports.add('mytarget.tlc', 'tcpip', 'ext_comm', 'Level1');
      cm.ExtModeTransports.add('mytarget.tlc', 'serial', ...
                               'ext_serial_win32_comm', 'Level1');
    %end function
  • 请确保适当配置模板联编文件以链接 TCP/IP 服务器代码的源文件,并确保该文件在编译生成的代码时定义编译器标志。

  • 编译外部程序。

  • 运行外部程序。

  • 将 Simulink 模型设置为外部模式,并连接到目标。

下图显示基于 TCP/IP 的实现的结构。

基于 TCP/IP 的外部模式客户端/服务器实现

TCP/IP 传输的 MEX 文件可选参数.  在“外部目标接口”对话框中,您可以指定传递给外部模式接口 MEX 文件的可选参数,以便与正在执行的目标通信。

  • 目标网络名称:运行外部程序的计算机的网络名称。默认情况下,这是运行 Simulink 产品的计算机,例如 'myComputer'。您也可以使用 IP 地址,例如 '148.27.151.12'

  • 详细级别:控制数据传输过程中显示的信息的详细级别。值为 01,含义如下:

    0 - 无信息
    1
    - 详细信息

  • TCP/IP 服务器端口号:默认值为 17725。您可以将端口号更改为 25665535 之间的值,以避免端口冲突。

参数为位置参数,必须按以下顺序指定:

<TargetNetworkName> <VerbosityLevel> <ServerPortNumber>

例如,如果您要指定详细级别(第二个参数),则您还必须指定目标网络名称(第一个参数)。参数可以用空白或逗号分隔。例如:

'148.27.151.12' 1 30000

您可以在启动外部程序时为其指定命令行选项。请参阅运行外部程序

使用串行实现

控制串行通道上的主机/目标通信类似于控制 TCP/IP 通道上的主机/目标通信。

要在串行通道上使用 Simulink 外部模式,您必须:

  • 确保您已指定目标的串行传输的外部接口 MEX 文件。

    MathWorks 提供的目标在 matlabroot/toolbox/simulink/simulink/extmode_transports.m 中指定外部接口 MEX 文件的名称。接口的名称在“配置参数”对话框的接口 窗格的外部模式配置部分中显示为不可编辑的文本。串行默认值为 serial

    要为自定义目标指定串行传输,您必须将以下形式的条目添加到 MATLAB 路径上的 sl_customization.m 文件中:

    function sl_customization(cm)
      cm.ExtModeTransports.add('stf.tlc', 'transport', 'mexfile', 'Level1');
    %end function
    • stf.tlc 是您为其注册传输的系统目标文件的名称(例如,'mytarget.tlc'

    • transport 是要在“配置参数”对话框的接口窗格的传输层菜单中显示的传输协议的名称(例如,'serial'

    • mexfile 是传输协议的关联外部接口 MEX 文件的名称(例如,'ext_serial_win32_comm'

    您可以通过增加 cm.ExtModeTransports.add 行来指定多个目标和/或传输,例如:

    function sl_customization(cm)
      cm.ExtModeTransports.add('mytarget.tlc', 'tcpip', 'ext_comm', 'Level1');
      cm.ExtModeTransports.add('mytarget.tlc', 'serial', ...
                               'ext_serial_win32_comm', 'Level1');
    %end function
  • 请确保适当配置模板联编文件以链接串行服务器代码的源文件,并确保该文件在编译生成的代码时定义编译器标志。

  • 编译外部程序。

  • 运行外部程序。

  • 将 Simulink 模型设置为外部模式,并连接到目标。

串行传输的 MEX 文件可选参数.  在“配置参数”对话框的接口窗格的 MEX 文件参数字段中,您可以指定传递给外部模式接口 MEX 文件的参数,以便与执行目标通信。对于串行传输,ext_serial_win32_comm 的可选参数如下:

  • 详细级别:此参数控制数据传输期间显示的信息的详细级别。此参数的值是:

    • 0(无信息),或

    • 1(详细信息)

  • 串行端口 ID:主机的端口 ID,指定为整数或字符向量。例如,将 USB 转串行转换器的端口 ID 指定为 '/dev/ttyusb0'Simulink Coder 会对整数端口 ID 加上前缀 \\.\COM(在 Windows® 上)或 /dev/ttyS(在 Unix 上)。

    使用串行连接启动目标应用程序时,必须指定用于将其连接到主机的端口 ID。为此,请包含 -port 命令行选项。例如:

    mytarget.exe -port 2 -w
  • 波特率:指定整数值。默认值为 57600

MEX 文件选项参数为位置参数,必须按以下顺序指定:

<VerbosityLevel> <SerialPortID> <BaudRate>

例如,如果您要指定串行端口 ID(第二个参数),则您还必须指定详细级别(第一个参数)。参数可以用空白或逗号分隔。例如:

1 '/dev/ttyusb0' 57600

启动外部程序时,可以指定命令行选项。

运行外部程序

要在外部模式下使用 Simulink 产品,外部程序必须处于运行状态。

如果目标应用程序与主机在同一台计算机上执行,并且通信是通过环回串行电缆进行的,则目标的端口 ID 不能与主机的端口 ID 相同(如 MEX 文件参数编辑字段所指定)。

要运行外部程序,请键入以下形式的命令:

model -opt1 ... -optN

model 是外部程序的名称,-opt1 ... -optN 是选项。(请参阅 外部程序的命令行选项。)在本节的示例中,外部程序的名称是 ext_example

Windows 环境中运行外部程序.  在 Windows 环境中,您可以通过以下任一方式运行外部程序:

  • 打开命令提示符窗口。在命令提示符下,键入目标可执行文件的名称,后跟可能的选项,例如:

    ext_example -tf inf -w
  • 您也可以从 MATLAB 命令行窗口启动目标可执行文件。命令必须以感叹号 (!) 开头,且以“与”符号 (&) 结尾,如下例所示:

    !ext_example -tf inf -w &

    “与”符号 (&) 使操作系统生成另一个进程来运行目标可执行文件。如果不包含“与”符号,程序仍会运行,但您无法在 MATLAB 命令提示符下输入命令或手动终止可执行文件。

UNIX 环境中运行外部程序.  在 UNIX 环境中,您可以通过以下任一方式运行外部程序:

  • 打开一个 Xterm 窗口。在命令提示符下,键入目标可执行文件的名称,后跟可能的选项,例如:

    ./ext_example -tf inf -w
  • 您也可以从 MATLAB 命令行窗口启动目标可执行文件。您必须在后台运行它,以便仍可访问 Simulink 环境。命令必须以感叹号 (!) 和点斜杠(./ 表示当前目录)开头,且以“与”符号 (&) 结尾,如下例所示:

    !./ext_example -tf inf -w &

    “与”符号 (&) 使操作系统生成另一个进程来运行目标可执行文件。

外部程序的命令行选项.  Simulink Coder 代码生成器生成的外部模式目标可执行文件支持以下命令行选项:

  • -tf n

    -tf 选项会覆盖在 Simulink 模型中设置的停止时间。参数 n 指定程序将运行的秒数。值 inf 指示模型无限期运行。在本例中,模型代码将一直运行,直到目标应用程序收到来自 Simulink 引擎的停止消息。

    以下示例将停止时间设置为 10 秒。

    ext_example -tf 10

当在外部模式下编译和执行纯整数 ERT 目标时,目标会将停止时间参数 (-tf) 解释为基本速率步数,而不是执行秒数。

  • -w

    指示目标应用程序进入等待状态,直到收到来自主机的消息。此时,目标正在运行,但没有执行模型代码。当您从仿真菜单中选择启动实时代码或点击“外部模式控制面板”中的启动实时代码按钮时,将发送开始消息。

    如果要查看从时间步 0 的目标应用程序执行数据,或要在目标应用程序开始执行模型代码之前修改参数,请使用 -w 选项。

  • -port n

    指定目标应用程序的 TCP/IP 端口号或串行端口 ID n。目标应用程序的端口号必须与用于 TCP/IP 传输的主机的端口号相匹配。端口号取决于传输类型。

    • 对于 TCP/IP 传输:端口号是 25665535 之间的整数,默认值为 17725。目标硬件上运行的另一个 TCP/IP 服务不能使用所选端口。

    • 对于串行传输:端口 ID 是整数或字符向量。例如,将 USB 转串行转换器的端口 ID 指定为 '/dev/ttyusb0'

  • -baud r

    指定为整数时,此选项仅适用于串行传输。

实现外部模式协议层

如果您要实现自己的外部模式通信传输层,您必须修改 SimulinkCoder 产品提供的某些代码模块,并创建新外部接口 MEX 文件。请参阅为 TCP/IP 或串行外部模式通信创建传输层

以编程方式使用外部模式

您可以从 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')

使用 'SimulationCommand' 参数的 set_param 命令是异步的。如果从脚本连续运行这些命令,每个命令都会启动,而不会等待前一个命令运行完毕才启动下一个命令。要检查每个命令是否完成,请在脚本中使用带 'SimulationStatus' 参数的 get_param 命令。例如,对于步骤 1 至 3,在脚本中指定以下命令:

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

isExternalSimulationActive = false;
while ~isExternalSimulationActive
    simStatus = get_param(gcs, 'SimulationStatus');
    isExternalSimulationActive = strcmp(simStatus, 'external');
end
set_param(gcs,'SimulationCommand','start');

有关详细信息,请参阅以编程方式运行仿真

诊断查看器显示由 get_paramset_param 命令产生的错误消息。

要调整工作区参数,请在命令提示符下更改其值。如果工作区参数是 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 和串行外部模式的限制

功能详细信息
服务代码接口

当生成的代码在目标环境中执行时,对于从配置了基于 ERT 的系统目标文件和服务代码接口的组件模型生成的代码,不支持使用外部模式来调整参数和监控信号。

更改参数

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

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

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

  • 连续系统的积分算法

  • 模型或模块的名称

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

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

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

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

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

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

上传数据

对于具有定点值的参数,不支持从目标应用程序上传参数值。

上传可变大小的信号

下列目标不支持上传可变大小的信号:

  • Simulink Real-Time™

  • Texas Instruments® C2000™

仿真中的信号值显示

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

可调结构体参数

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

C++ 代码

不支持生成的 C++ 代码。如果指定以下配置参数设置,仿真会生成错误:

  • 语言 - C++

  • 代码接口打包 - C++ 类

纯整数代码

支持纯整数代码。

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

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

  • finalTime 值表示基本速率步数,而不是秒数。

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

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

半精度

不支持半精度数据类型。

Simulink.ImageType 不支持 Simulink.ImageType 数据类型。
存档数据

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

引用模型中的示波器

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

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

ScopeDisplay 模块连接到 Simulink 消息模块

在外部模式仿真期间,连接到 Simulink 消息模块的 ScopeDisplay 模块不提供显示画面。

仿真的开始时间

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

中间步长值

一些 Simulink 模块可以在一个仿真时间步内生成多个值。例如:

对于外部模式仿真中的每个时间步,Simulink 从目标应用程序仅上传这些模块的最终值。Simulink 不上传在时间步中生成的中间值。

作用域为文件的数据

不支持作用域为文件的数据,例如,应用内置自定义存储类 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)。

行优先代码生成

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

仿真数据导出

不支持仿真输出、信号和状态数据的导出。

相关主题