主要内容

状态和数据的日志模拟输出

当您模拟状态流时®图表在Simulink金宝app中®模型中,可以将本地、输出和活动状态数据的值记录到金宝appSimulink.SimulationData.Dataset对象。仿真完成后,您可以通过仿真数据检查器、逻辑分析器或MATLAB访问该对象®工作区。日志数据的工作流程是:

  1. 为图表启用信号记录,并选择记录格式。看到启用信号记录

  2. 配置信号记录的状态和数据。看到配置日志记录状态和数据

  3. 模拟图表。

  4. 访问记录的数据。看到获取信号测井数据

启用信号记录

模型和图表默认启用信号记录。禁用或重新启用信号记录:

  1. 打开“配置参数”对话框。

  2. 数据导入/导出窗格中,选择信号记录为图表启用日志记录。禁用日志记录,清除信号记录.有关更多信息,请参见信号记录(金宝app模型)

  3. (可选)为信号记录对象指定自定义名称。默认名称为logsout.使用此对象,您可以访问MATLAB工作区变量中的日志记录数据。有关更多信息,请参见使用信号日志导出信号数据(金宝app模型)

  4. (可选)在格式字段,选择信号记录格式。选项包括:

    • 数组

    • 结构

    • 结构随时间变化

    • 数据集

    默认设置为数据集.有关更多信息,请参见时间、状态和输出数据格式(金宝app模型)

配置日志记录状态和数据

您可以通过“状态流信号日志记录”对话框或从命令行以编程方式设置图表内部的状态、本地数据和输出数据的日志记录属性。

记录个人状态和数据

方法为每次一个状态或数据对象配置日志记录属性属性检查器、“模型资源管理器”或状态或数据对象的属性对话框。选择日志记录选项卡并根据需要修改属性。有关更多信息,请参见日志记录属性

例如:

  1. 打开sf_semantics_hotel_checkin模型:

    openExample (“stateflow / SemanticsHotelCheckinExample”

    有关此示例的详细信息,请参见状态流对象在执行过程中如何交互

  2. 打开酒店图表。

  3. 打开符号窗格。在模拟选项卡,在准备,点击符号面板

  4. 打开属性检查器.在模拟选项卡,在准备,点击属性检查器

  5. 配置服务用于日志记录的本地数据。

    1. 符号窗格中,选择服务

    2. 属性检查器下,日志记录,选择测井信号数据复选框。

  6. 配置Dining_area日志状态。

    1. 在“状态流编辑器”上,选择Dining_area状态。

    2. 模拟选项卡,在准备中,选择记录自我活动.另外,在属性检查器下,日志记录,选择记录自我活动复选框。

    3. 默认情况下,此状态的日志记录名称是分层信号名称Check_in.Checked_in.Executive_suite.Dining_area.若要为状态分配较短的名称,请设置日志的名字自定义并输入餐厅

记录多个信号

通过“状态流信号日志”对话框为多个状态和数据对象配置日志属性。从所有状态、本地和输出数据的列表中选择要记录的图表对象。有关更多信息,请参见日志记录属性

例如:

  1. 打开sf_semantics_hotel_checkin模型:

    openExample (“stateflow / SemanticsHotelCheckinExample”
  2. 打开酒店图表。

  3. 要记录多个信号,按住shift键选择要记录的状态。在模拟选项卡,在准备中,选择记录自我活动

  4. 日志标识标记在模型中记录信号。

添加输出端口

您可以添加一个输出端口来监视图表活动。的状态流编辑器中模拟选项卡上,单击添加输出端口.一个新的端口出现在您的状态流程图上。将此端口连接到查看器以监视图表子活动。

使用命令行API的日志图表信号

从命令行以编程方式为状态和数据对象配置日志记录属性。若要启用状态或数据对象的日志记录,请获取该对象的句柄并设置其LoggingInfo。数据采集财产1.有关状态流编程式接口的详细信息,请参见statflow API概述

例如:

  1. 打开sf_semantics_hotel_checkin模型:

    openExample (“stateflow / SemanticsHotelCheckinExample”
  2. 访问Stateflow。状态对象的Dining_area状态:

    diningState = find(sfroot,“是”“Stateflow。状态”、名称=“Dining_area”);

  3. 访问Stateflow。数据与本地数据对应的服务

    serviceData = find(sfroot,“是”“Stateflow。数据”、名称=“服务”);

  4. Dining_area州和服务数据:

    diningState.LoggingInfo.DataLogging = true;serviceData.LoggingInfo.DataLogging = true;

  5. 的日志记录名称Dining_area状态设置为自定义名称餐厅

    %启用自定义命名diningState.LoggingInfo.NameMode =“自定义”%输入自定义名称diningState.LoggingInfo.LoggingName =“餐厅”

获取信号测井数据

在模拟过程中,statflow将记录的数据保存在金宝appSimulink.SimulationData.Dataset(金宝app模型)信号记录对象。

例如,假设您配置sf_semantics_hotel_checkin模型来记录服务的本地数据和活动Dining_area状态。在开始模拟之后,您通过拨动第一个开关两次入住酒店,并通过拨动第二个开关多次订购客房服务。停止仿真后,可以通过仿真数据检查器、逻辑分析器或MATLAB工作空间查看记录的数据。

通过模拟数据检查器查看日志数据

当您模拟模型时,模拟数据检查器图标将高亮显示,以指示它有新的模拟数据。

  1. 要打开模拟数据检查器,请在模拟选项卡,单击图标模拟数据检查器图标

  2. 检查和比较模拟过程中记录的信号。看到模拟数据检查器(金宝app模型)

通过逻辑分析仪查看日志数据

当您模拟模型时,逻辑分析仪图标将高亮显示,以指示它有新的模拟数据。要使用逻辑分析仪,您必须具有DSP系统工具箱™或SoC Blockset™。

  1. 要打开逻辑分析器,请在模拟选项卡,单击图标

  2. 查看、测量和比较模拟过程中记录的状态。看到逻辑分析仪(DSP系统工具箱)

中查看已记录数据MATLAB工作空间

  1. 要访问信号记录对象,在MATLAB命令提示符处输入:

    Logsout = out.logsout
    logsout =金宝appSimulink.SimulationData.Dataset名称BlockPath ___________ ________________________________ 1 [1x1状态]餐厅sf_semantics_hotel_checkin/酒店2 [1x1数据]服务sf_semantics_hotel_checkin/酒店

  2. 要访问已记录的元素,请使用得到函数。您可以通过名称、索引或块路径访问已记录的元素。

    diningLog = get(logsout,“餐厅”
    diningLog =Stateflow.SimulationData.State包:Stateflow。模拟数据Properties: Name: 'Dining Room' BlockPath: [1×1 Simulink.SimulationData.BlockPath] Values: [1×1 timeseries]
    serviceLog = get(logsout,“服务”
    serviceLog =Stateflow.SimulationData.Data包:Stateflow。模拟数据Properties: Name: 'service' BlockPath: [1×1 Simulink.SimulationData.BlockPath] Values: [1×1 timeseries]

  3. 要访问每个已记录元素的已记录数据和时间,请使用值。数据而且值。时间属性。例如:

    • 控件以表格形式排列已记录的数据表格函数。

      T1 = table(diningLog.Values.Time,diningLog.Values.Data);T1.Properties。VariableNames = [“时间”“数据”
      T1 = 6×2表格时间数据__________ ____ 0 0 1.8607e+06 1 1.9653e+06 0 1.9653e+06 1 1.9653e+06 0 2.2912e+06 1
      T2 = table(serviceLog.Values.Time,serviceLog.Values.Data);T2.Properties。VariableNames = [“时间”“数据”
      T2 = 6×2表格时间数据__________ ____ 0 0 1.7076e+06 0 1.8607e+06 1 1.9653e+06 2 1.9653e+06 3 1.9653e+06 4 2.2912e+06 5

    • 控件在图形窗口中查看已记录的数据情节函数。

      X = serviceLog.Values.Time;Y = serviceLog.Values.Data;情节(X, Y,“o”)包含(“时间”) ylabel (“数据”

      图中显示了模拟期间记录的数据。

    • 导出日志数据到Excel®通过将记录值的数组传递给xlswrite功能:

      A = [double(diningLog.Values.Time) double(diningLog.Values.Data)];xlswrite (“dining_log.xls”,);

请注意

每当状态流图写入您正在记录的数据时,信号日志对象都会记录一个数据点,即使数据没有改变值。例如,在本例中,值为的数据点0对应于图表初始化本地数据的时间服务0在时间0以及设置默认转换时服务0在时间1.7076 e + 06

日志多维数据

状态流将对多维信号的每次更新记录为单个更改。例如,更新矩阵的两个元素一个分别

A[1][1] = 1;A[1][2] = 1;
在记录的数据中产生两个不同的更改。相反,更新一个矩阵一个在一个命令中
A = 1;
在记录的数据中产生单个更改,即使该命令意味着A[i][j] = 1对于所有的值而且j

测井数据的限制

在外部模式下模拟模型时,不支持记录Stateflow数据。金宝app

如果您从图表中用快速启动启用后,第一次运行之后的任何运行都将复制第一次记录的数据点。在运行处理这些数据点的算法时,必须考虑到这种重复。

另请参阅

对象

功能

工具

相关的话题