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 并将其 Gain 参数设置为变量 A

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

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

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

  8. 将模型另存为 ex_extModeExample

编译目标可执行文件

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

  1. 在 Simulink 工具条的 Apps 选项卡上,在 Setup to Run on Hardware 部分中,点击 Run on Custom Hardware

  2. Hardware 部分,从 System Target File Description 列表中,选择 “Generic Real-Time Target (grt.tlc)”。

  3. Prepare 部分中,点击 Hardware Settings。将打开 Configuration Parameters 对话框,显示由系统目标文件确定的 Hardware Implementation 设置。

  4. Solver 窗格上,请执行下列步骤:

    1. Type 字段中,选择 “Fixed-step”。

    2. Solver 字段中,选择 “discrete (no continuous states)”。

    3. 点击 Solver details。在 Fixed-step size 字段中,指定 “0.1”。(否则,当您生成代码时,SimulinkCoder 编译过程会生成警告并提供一个值。)

    4. 点击 Apply

  5. Data Import/Export 窗格中,清除 TimeOutput 复选框。在此示例中,数据不会记录到工作区或 MAT 文件中。点击 Apply

  6. Code Generation > Optimization 窗格中,检查 Default parameter behavior 是否设置为 “Tunable”。如果您进行了更改,请点击 Apply

  7. Code Generation > Interface 窗格的 Data exchange interface 部分中,选择 External mode

  8. External mode configuration 部分,确保为 Transport layer 参数选择了默认值 “tcpip”。

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

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

    此示例使用默认参数。将 MEX-file arguments 字段留空。

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

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

  10. 保存模型。

  11. 选择 Code Generation 窗格。确保 Generate code only 处于清除状态。

  12. 要生成代码并创建目标应用程序,请在模型窗口中,按 Ctrl+B。或者,在 Hardware 选项卡的 Run on Hardware 部分中,点击 Monitor & Tune。然后,在 Step By Step Commands 下,点击 Build for Monitoring

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

运行目标应用程序

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

注意

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

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

  1. Hardware 选项卡的 Run on Hardware 部分中:

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

    2. 点击 Monitor & Tune。然后,在 Step By Step Commands 下,点击 Deploy

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

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

  3. Hardware 选项卡的 Run on Hardware 部分中,点击 Monitor & Tune。然后,在 Step By Step Commands 下,点击 Connect。此操作启动 Simulink 和目标应用程序之间的握手。当 Simulink 和目标连接时,Connect 按钮变为 Disconnect

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

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

调整参数

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

方法详细信息

Model Data Editor

要通过 Model Data Editor 调整参数,请执行以下操作:

  1. 在 Simulink Editor 的 Hardware 选项卡上,在 Prepare 部分中,点击 Tune Parameters,这将打开 Model Data Editor。

  2. 如果您要同时更新多个可调参数,请在 Prepare 部分中,点击 Batch Mode

  3. 在 Model Data Editor 的 Parameters 选项卡上,在 Value 列中,为可调参数指定新值。

  4. 如果选择了 Batch Mode,请点击 Update All Parameters 或按 Ctrl+D。Simulink 同时将新值下载到目标应用程序。

    如果未选择 Batch Mode,则在您指定新值后,Simulink 会立即将新值下载到目标应用程序。

有关详细信息,请参阅使用 Model Data Editor 配置数据属性

Block Parameter 对话框

要通过 Block Parameter 对话框调整参数,请执行下列步骤:

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

    1. 双击该模块,打开 Block Parameter 对话框。

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

    3. 点击 ApplyOK

  2. 如果选择了 Batch Mode,请点击 Update All Parameters 或按 Ctrl+D。Simulink 同时将新值下载到目标应用程序。

    如果未选择 Batch Mode,则在您点击 ApplyOK 后,Simulink 会立即将新模块值下载到目标应用程序。

MATLAB 工作区

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

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

  2. 在 Simulink Editor 的 Hardware 选项卡上,在 Prepare 部分中,点击 Update All Parameters (Ctrl+D)。Simulink 将新值下载到目标应用程序。

有关详细信息,请参阅创建和编辑变量

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

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

例如,在 Gain A 模块对话框中,您无法在仿真过程中更改 Gain 参数中的表达式 A。在这种情况下,您必须在基础工作区中更改变量 A 的值。您无法更改表达式,因为生成的代码不会为 Gain 参数分配内存存储空间。在这种情况下,代码在结构体中创建字段 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 与主机/目标通信的连接并结束目标应用程序的执行,请在 Hardware 选项卡的 Run on Hardware 部分中,点击 Stop

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

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

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

通过 External Mode Control Panel 控制外部模式仿真

External Mode Control Panel 提供对外部模式操作的集中控制,包括:

要打开 External Mode Control Panel 对话框,请在 Hardware 选项卡的 Prepare 部分中,点击 Control Panel

连接、启动和停止

External Mode Control Panel 执行的连接/断开和启动/停止功能与 Simulink 工具条中 Hardware 选项卡上的相同(请参阅外部模式仿真图形控制项汇总)。

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

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

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

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

Arm TriggerCancel Trigger 按钮让您能够手动控制向兼容的模块或子系统上传数据,但不包括浮动示波器。(对于浮动示波器,请使用 External Mode Control Panel 的 Floating scope 部分。)

  • 要触发向兼容的模块或子系统上传数据,请点击 Arm Trigger 按钮。该按钮变为 Cancel Trigger

  • 要取消数据上传,请点击 Cancel Trigger 按钮。该按钮恢复为 Arm Trigger

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

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

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

  • 不出现在 External Signal & Triggering 对话框中。

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

  • 仅支持手动触发。

Floating scope 部分包含以下参数:

  • Enable data uploading 选项,用作浮动示波器的 Arm Trigger 按钮。当目标断开连接时,该选项控制连接浮动示波器时是否装备触发器。当目标连接时,该选项充当装备或取消触发器的切换按钮。

    • 要触发向浮动示波器上传数据,请选中 Enable data uploading

    • 要取消向浮动示波器上传数据,请清除 Enable data uploading

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

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

External Mode Control Panel 上的 Batch download 选项用于启用或禁用批处理参数更改。

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

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

当参数更改等待批量下载时,External Mode Control Panel 在 Download 按钮右侧显示消息 Parameter changes pending...。此消息将一直可见,直到 Simulink 引擎收到新参数已安装在目标系统的参数向量中的通知。

下图显示了 External Mode Control Panel,其中 Batch download 选项已激活,参数更改尚未发送。

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

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

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

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

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

  • 当主机连接到目标时会自动装备触发器,也可以通过点击 External Mode Control Panel 上的 Arm Trigger 按钮手动装备触发器。

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

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

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

配置信号数据上传

点击 External Mode Control Panel 的 Signal & Triggering 按钮会打开 External Signal & Triggering 对话框。

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

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

默认触发器选项

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

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

  • Select all”:on

  • Source”:manual

  • Mode”:normal

  • Duration”:1000

  • Delay”:0

  • Arm when connecting to target”:on

选择要上传的信号

模型中的外部模式兼容模块出现在 External Signal & Triggering 对话框的 Signal selection 列表中。您可以使用此列表选择要查看的信号。在 Selected 列中,对每个所选模块都会显示 X

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

如果清除了 Select all,您可以使用 onoff 选项选中或清除单个信号。要选择一个信号,请点击其列表条目,然后选择 on 选项。要清除一个信号,请点击其列表条目,并选择 off 选项。

Clear all 按钮用于清除所有信号。

配置触发器选项

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

要控制何时以及如何从目标系统采集(上传)信号数据,请在 External Signal & Triggering 对话框中配置以下 Trigger options

  • Source:“manual” 或 “signal”。控制按钮或信号是否触发数据上传。

    选择 “manual” 会指示外部模式使用 External Mode Control Panel 上的 Arm Trigger 按钮作为开始上传数据的触发器。当您点击 Arm Trigger 时,数据上传开始。

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

  • Mode:“normal” 或 “one-shot”。控制触发事件完成后触发器是否重新装备。

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

    在 “one-shot” 模式下,每次装备触发器时,外部模式仅采集一个缓冲区的数据。

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

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

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

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

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

  • Arm when connecting to target:选中或清除。无论由按钮还是信号触发数据上传(由 Source 定义),触发器都必须装备好才能允许开始数据上传。

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

    • 如果触发 Source 是 “manual”,则立即开始数据上传。

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

    如果您清除了 Arm when connecting to target,可以通过点击 External Mode Control Panel 上的 Arm Trigger 按钮手动装备触发器。

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

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

Duration 值会影响 ScopeTo Workspace 模块的 Limit data points to last 值。模块保存到 MATLAB 工作区的采样点数是这两个值中的较小者。要设置模块保存的采样点数,请清除 Limit data points to last。然后,使用 Duration 指定保存的采样点数。

选择触发信号

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

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

选择触发信号后,您可以使用 Trigger signal 部分定义触发条件,并设置触发信号 PortElement 参数。

设置触发条件

使用 External Signal & Triggering 对话框的 Trigger signal 部分设置触发条件和属性。仅当 Trigger options 部分中的触发器参数 Source 设置为 “signal” 时,才能启用 Trigger signal 参数。

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

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

  • Direction:“rising”、“falling” 或 “either”。当信号穿越阈值时应遵循的行进方向。默认值为 “rising”。

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

  • Hold-off:仅适用于 “normal” 模式。Hold-off 以基本速率步数表示,是一个触发事件从终止到重新装备之间的时间。

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

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

如果触发器已装备(例如,触发器选项 Arm when connecting to the target 已选中,这也是默认设置),则无法修改 External Signal & Triggering 对话框。要修改信号和触发选项,请执行以下操作:

  1. 打开 External Mode Control Panel。

  2. 点击 Cancel Trigger。将停止触发且停止显示上传数据。

  3. 打开 External Signal & Triggering 对话框,根据需要修改信号和触发器选项。例如,您可以在 Signal selection 部分中启用或禁用范围,在 Trigger options 部分中更改触发器 Mode,例如从 “normal” 更改为 “one-shot”。

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

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

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

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

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

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

如果您使用 Simulink 的 Scope 模块将数据存档到磁盘,请打开 Scope 参数对话框,并选择选项 Log data to workspace。该选项是必需的,原因如下:

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

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

注意

如果没有选择 Scope 模块选项 Log data to workspace,用于数据记录的 MAT 文件仍将创建,但是为空。

Enable Data Archiving 对话框支持:

  • 文件夹注释

  • 文件注释

  • 自动化数据存档

在 External Mode Control Panel 上,点击 Data Archiving 按钮,打开 Enable Data Archiving 对话框。如果您的模型连接到了目标环境,请在配置数据存档时断开连接。要启用对话框中的其他控制项,请选择 Enable archiving

Enable Data Archiving 对话框支持下列操作。

文件夹注释

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

文件注释

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

自动化数据存档

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

  • Directory:指定保存数据的文件夹。如果选择 Increment directory when trigger armed,外部模式会追加后缀。

  • File:指定保存数据的文件的名称。如果选择 Increment file after one-shot,外部模式会追加后缀。

  • Increment directory when trigger armed:每次点击 Arm Trigger 按钮,外部模式都会使用一个新文件夹来写入日志文件。文件夹以增量方式命名,例如,dirname1dirname2 等。

  • Increment file after one-shot:新数据缓冲区保存在增量命名的文件中:filename1filename2 等。文件增量命名在 normal 模式下自动发生。

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

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

外部模式仿真图形控制项汇总

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

  • Simulink 工具条中的 Hardware 选项卡。要显示 Hardware 选项卡,请在 Simulink 工具条的 Apps 选项卡中,点击 Run on Custom Hardware

  • External Mode Control Panel。要打开此对话框,请在 Simulink Editor 中 Hardware 选项卡的 Prepare 部分中,点击 。然后在 Signal Monitoring & Tracing 下,点击 Control Panel

下表介绍了 Hardware 选项卡的功能,您可以使用这些功能来控制外部模式仿真。

外部模式操作Hardware 选项卡External Mode Control Panel 按钮
将您的模型连接到正在等待或正在运行的目标应用程序Run on Hardware >
Connect
按钮
Connect
开始在目标环境中运行实时代码Start 按钮 Start Real-Time Code
断开模型与目标环境的连接(不停止运行实时代码)Run on Hardware >
Disconnect
按钮
Disconnect
停止目标应用程序的执行,并断开模型与目标环境的连接Stop 按钮 Stop Real-Time Code

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

兼容模块

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

  • 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 模块

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

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

信号查看子系统

信号查看子系统是原子子系统,它封装了来自目标系统的信号的处理和查看。信号查看子系统仅在主机上运行,不在目标系统中生成代码。信号查看子系统以 Normal、Accelerator、Rapid Accelerator 和 External 仿真模式运行。

注意

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

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

与其他外部模式兼容模块一样,信号查看子系统显示在 External Signal & Triggering 对话框中。

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

  1. 在 Block Parameters 对话框中,选择 Treat as atomic unit 选项。

    有关原子子系统的详细信息,请参阅Control Generation of Functions for Subsystems

  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 模块的代码。如果在 External Signal & Triggering 对话框中选择并装备了 theSink,目标应用程序将在仿真过程中向 theSink 上传正弦波信号。然后,您可以修改 theSink 中模块的参数,并观察上传的信号。

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

支持数据存档的模块

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

  • Scope 模块

  • To Workspace 模块

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

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

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

下载机制

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

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

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

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

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

外部模式架构

内联和可调参数

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

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

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

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

主机/目标连接上的自动参数上传.  每次 Simulink 引擎连接到在 Default parameter behavior 设置为 “Inlined” 状态下生成的目标应用程序时,目标应用程序都会将其可调参数的当前值上传到主机。这些值赋给对应的 MATLAB 工作区变量。此过程在主机和目标之间同步参数值。

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

仅当在 Default parameter behavior 设置为 “Inlined” 的情况下生成目标应用程序时,参数才会自动上传。下载机制说明了 Default parameter behavior 设置为 “Tunable” 时外部模式通信的操作。

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

简介

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 文件的名称。接口的名称在 Configuration Parameters 对话框的 Interface 窗格的 External mode configuration 部分中显示为不可编辑的文本。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 是要在 Configuration Parameters 对话框的 Interface 窗格的 Transport layer 菜单中显示的传输协议的名称(例如,'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 文件可选参数.  在 External Target Interface 对话框中,您可以指定传递给外部模式接口 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 文件的名称。接口的名称在 Configuration Parameters 对话框的 Interface 窗格的 External mode configuration 部分中显示为不可编辑的文本。串行默认值为 serial

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

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

    • transport 是要在 Configuration Parameters 对话框的 Interface 窗格的 Transport layer 菜单中显示的传输协议的名称(例如,'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 文件可选参数.  在 Configuration Parameters 对话框的 Interface 窗格的 MEX-file arguments 字段中,您可以指定传递给外部模式接口 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-file arguments 编辑字段所指定)。

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

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

    指示目标应用程序进入等待状态,直到收到来自主机的消息。此时,目标正在运行,但没有执行模型代码。当您从 Simulation 菜单中选择 Start Real-Time Code 或点击 External Mode Control Panel 中的 Start Real-Time Code 按钮时,将发送开始消息。

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

  • -port n

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

    • 对于 TCP/IP 传输:端口号是 25665535 之间的整数,默认值为 17725

    • 对于串行传输:端口 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');

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

Diagnostic Viewer 显示由 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 命令中使用的外部模式命令行参数。该表包含简短说明、有效值(粗体突出显示了默认值)以及 External Mode 对话框中与之对应的等效项。有关等效于 Configuration Parameters 对话框中 Interface 窗格选项的外部模式参数,请参阅模型配置参数:代码生成接口

外部模式命令行参数

参数和值对话框等效项说明
ExtModeAddSuffixToVar
off, on
Enable Data Archiving:Append file suffix to variable names 复选框为每个增量命名的文件增量命名变量名称。
ExtModeArchiveDirName
character vector
Enable Data Archiving:Directory 文本字段将数据保存在指定的文件夹中。
ExtModeArchiveFileName
character vector
Enable Data Archiving:File 文本字段将数据保存在指定文件中。
ExtModeArchiveMode
character vector - off, auto, manual
Enable Data Archiving:Enable archiving 复选框

激活自动数据存档功能。

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

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

ExtModeArmWhenConnect
off, on
External Signal & Triggering:Arm when connecting to target 复选框一旦 Simulink Coder 软件连接到目标,立即装备触发器。
ExtModeAutoIncOneShot
off, on
Enable Data Archiving:Increment file after one-shot 复选框在增量命名的文件中保存新数据缓冲区。
ExtModeAutoUpdateStatusClock(仅限 Microsoft® Windows 平台)
off, on
不适用连续上传并在模型窗口状态栏上显示目标时间。
ExtModeBatchMode
off, on
External Mode Control Panel:Batch download 复选框在批处理模式下启用或禁用参数下载。
ExtModeChangesPending
off, on
不适用当启用 ExtModeBatchMode 时,指示参数是否保留在要下载到目标的参数队列中。
ExtModeCommand
character vector - armFloating, armWired, cancelFloating, cancelWired
  • armFloatingcancelFloating 等效于选中和清除 External Mode Control Panel 中的 Floating scope > Enable data uploading 复选框

  • armWiredcancelWired 等效于 External Mode Control Panel 中的 Arm TriggerCancel Trigger 按钮

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

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

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

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

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

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

  2. 在 Configuration Parameters 对话框中,选中 External mode 复选框。

  3. 打开 External Mode Control Panel 对话框。

  4. 点击 Signal & Triggering

  5. 在 External Signal & Triggering 对话框中,设置以下参数。

    位置:选择:
    Signal selection 窗格要以动画方式显示的图
    Trigger options 窗格Arm when connecting to target 复选框
    Trigger options 窗格Mode 字段的下拉菜单中的 “normal
  6. 编译模型以生成可执行文件。

  7. 部署目标应用程序。

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

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

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

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

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

  1. 打开 Model Explorer,对于要查看的每个数据,请按照以下步骤操作:

    1. 在中间的 Contents 窗格中,选择关注的状态或本地数据。

    2. 在右侧的 Dialog 窗格中,选择 Logging 选项卡,然后选中 Test point 复选框。

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

    将打开 Signal Selector 对话框。

  3. 在 Signal Selector 的 Model hierarchy 窗格中,选择图。

  4. 在 Signal Selector 的 List contents 菜单中,选择 Testpointed/Logged signals only,然后选择您要查看的信号。

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

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

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

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

功能详细信息
更改参数

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

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

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

  • 连续系统的积分算法

  • 模型或模块的名称

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

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

  • 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™

仿真中的信号值显示

模型中信号值的图形显示(如在模型图中显示信号值所述)不受支持。例如,您无法使用 Data Display in Simulation 菜单选项 Show Value Labels When HoveringToggle Value Labels When ClickedShow Value Label of Selected Port

可调结构体参数

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

纯整数代码

支持纯整数代码。

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

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

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

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

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

存档数据

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

引用模型中的示波器

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

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

仿真的开始时间

不支持非零仿真开始时间。在 Configuration Parameters 对话框的 Solver 窗格中,将 Start time 设置为默认值 “0.0”。

中间步长值

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

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

作用域为文件的数据

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

具有自定义存储类的信号

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

使用 printf 语句

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

命令行参数

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

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

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

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

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

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

行优先代码生成

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

相关主题