SimulationOutput

按照Simulink.SimulationOutput设计,运行仿真之后,工作区会生成一个SimulationOutput对象,用于访问仿真的结果。

创建对象

运行仿真之后就创建一个SimulationOutput对象,包含仿真中的数据。和记录所有仿真元数据的SimulationMetadata对象。

  • simulationOutput对象返回记录的数据
  • 用who、get、find方法访问输出变量 可在仿真中设置参数“Single simulation output”为真或假,来控制是在SimulationOutput中返回仿真输出,还是直接在基础工作区展开数据。(不知道除了方便查看还有什么用)

属性

  • SimulationMetadata:仿真的元数据,是一个SimulationMetadata对象,所以也要实现SimulationMetadata类
  • ErrorMessage: 记录仿真的错误信息。返回字符向量。没出错返回None。

对象函数

  1. find
    • 访问和显示仿真结果的值
    • output = simOut.find('VarName') 参数为变量名,输出该变量的值
  2. get(感觉和find完全相同,只做get就行)
    • 访问和显示仿真结果的值
    • output = simOut.get('VarName')
    • 替代方法是先who再find
  3. getSimulationMetadata
    • 从SimulationOutput对象中检索出元数据信息
    • mData = simOut.getSimulationMetadata() 输出的mData是一个SimulationMetadata对象
    • 与simOut.SimulationMetadata.ModelInfo输出一样,相当于该方法为该属性的get方法
  4. setUserData
    • 将自定义数据存储在SimulationOutput对象包含的SimulationMetadata中
    • simoutNew = simOut.setUserData(CustomData) 将包含CustomData的SimulationOutput副本分配给simoutNew
    • SimulationMetadata中包含了UserData
  5. setUserString
    • 将自定义字符向量存储在SimulationOutput对象包含的SimulationMetadata中
    • simoutNew = simout.setUserString(CustomString) 类似于setUserData,返回的对象包含CustomString,它是自定义的字符向量
    • SimulationMetadata中包含了UserString
  6. who
    • 访问和显示模拟的输出变量名字,包含工作区变量
    • simOutVar = simOut.who 输出仿真的输出变量名 的 字符向量数组
  7. plot
    • 在Simulation Data Inspector中绘制仿真输出对象simOutObj的仿真输出数据
    • runObj = plot(simOutObj) 返回一个Simulink.sdi.Run对象
    • simOutObj有很多,目前可以只实现SimulationOutput
    • 绘制的信号少于8个时,Simulation Data Inspector布局为1*n,每个子图画一个信号,多于8个时,只画第一个信号
    • 需要Simulation Data Inspector对象
    • 如果只画一个信号,需要SimulationData.Dataset类

SimulationMetadata

存储关于仿真运行的信息

属性

  1. ModelInfo: 模型和仿真运行环境的信息,是structure
    1. ModelName: char
    2. ModelVersion: char
    3. ModelFilePath: char 绝对路径
    4. UserID: char 仿真的机器的系统用户的ID
    5. MachineName: char 仿真的机器的主机名
    6. Platform: char 操作系统
    7. ModelStructuralChecksum: 4–by–1 uint32 更新图后计算模型的校验和
    8. SimulationMode: char
    9. StartTime: double
    10. StopTime: double
    11. SolverInfo: structure
    • 定步长—— Solver type, name, and fixed step size
    • 变步长—— Solver type, name, and max step size (initial setting)(暂时没有)
    1. SimulinkVersion: structure 不需要
    2. LoggingInfo: structure 不需要
  2. ExecutionInfo: 存储仿真运行的信息,是structure
    1. StopEvent: Nontranslated character vector,描述仿真停止的原因,有以下几类
      • ReachedStopTime
      • ModelStop 在到达停止时间前被模块或求解器中止
      • StopCommand
      • DiagnosticError 仿真期间发生错误
      • KeyboardControlC
      • PauseCommand 点击暂停(不需要)
      • ConditionalPause (不需要)
      • StepForward (不需要)
      • StepBackward(不需要)
      • TimeOut
    2. StopEventSource:类型为SimulationData.BlockPath。停止事件的来源 (不需要)
    3. StopEventDescription: 类型为Translated character vector,存储在上述1和2中的信息的超集(不太明白,感觉我们应该不用)
    4. ErrorDiagnostic:类型为struct
      • 仿真过程中的错误,包含下述字段
      • Diagnostic:MSLDiagnostic 对象,包括对象路径、ID、消息、原因和堆栈
      • SimulationPhase:由以下之一表示:初始化、执行或终止。
      • SimulationTime:double/[]
      • 通过将名称-值对 'CaptureErrors', 'on' 传递给 sim 命令,仿真期间生成的错误将在 ExecutionInfo.ErrorDiagnostic 中报告。 sim 命令不会捕获生成的错误。(我们的simulate不知道有没有这个逻辑)
    5. WarningDiagnostics:struct数组 (和4几乎相同,区别在于error和warning)
      • 每个元素包括以下几个字段
      • Diagnostic:MSLDiagnostic 对象,包括对象路径、ID、消息、原因和堆栈。
      • SimulationPhase:由以下之一表示:初始化、执行或终止。
      • SimulationTime:double/[]
  3. TimingInfo: 存储仿真的分析信息
    1. WallClockTimestampStart:character vector 格式为YYYY-MM-DD HH:MI:SS,精度微妙
    2. WallClockTimestampStop:character vector 格式为YYYY-MM-DD HH:MI:SS,精度微妙
    3. InitializationElapsedWallTime:double 执行前花费的时间,单位是秒
    4. ExecutionElapsedWallTime: double 执行花的时间,单位秒
    5. TerminationElapsedWallTime: double
    6. TotalElapsedWallTime: double 初始化,执行,中止花的总时间,秒
    7. ProfilerData: Simulink.profiler.Data 模型分析结果(不需要)
  4. UserString:自定义的符号向量来描述仿真
    • 使用setUserString方法来把字符向量存储在SimulationOutput的SimulationMetadata中
  5. UserData:存储在SimulationMetadata中的数据 character vector

例子

mData=simout.getSimulationMetadata()
simout=simout.setUserData(struct('param1','value1','param2','value2','param3','value3'));
simout=simout.setUserString('Store first simulation results');
mData=simout.getSimulationMetadata()
disp(mData.UserData)
disp(mData.UserString)

Simulation Data Inspector

是simulink画图的东西,暂时可以不做,直接画图


本文章使用limfx的vscode插件快速发布