# SyslabObject
使用 Syslab 中的 Julia 对象进行动态系统建模和处理流式数据,组件位于SyslabWorkspace.SyslabObject.SyslabObject
# 说明
SyslabObject 是一种 Julia 类,专为仿真输入随时间变化的动态系统而设计,具备以下能力:
创建用于算法建模的特定方法和属性,您可以使用工具箱产品中包含的预定义 SyslabObject,也可以定义自己的 SyslabObject;
提供了一套结构化的模板流程,可在执行期间自动完成许多管理操作,包括初始化系统、验证数据、单步计算、仿真结束时释放资源、运行日志等。
# Julia 对象
当您新建 Julia 对象后,将打开一个默认的模板文件,请留意文件注释中的书写规范:
using ObjectOriented
@oodef mutable struct Untitled
# Description (用于生成Modelica组件描述)
# Template for syslabobject block.
# Parameter (用于生成 Modelica 组件参数,包括名称、类型、描述)
# 格式:参数名::参数类型 = 参数值 # 参数注释
# 例如:
gain::Real = 1.0 # 增益
# Private (Julia内部变量)
# 格式:变量名::类型 = 值 # 变量说明
# 例如:
_count::Integer = -1 # 计数器
# Methods (主要调用算法,包括setupImpl,stepImpl,releaseImpl)
# 初始化函数:函数名固定,函数形参与stepImpl函数形参一致
function setupImpl(self, u)
self._count = 0
# ...
return nothing
end #setupImpl
# 单步计算函数:函数名固定,第一个函数形参必须是self,其余函数形参将作为Modelica组件的输入端口,函数返回值作为输出端口
function stepImpl(self, u)
self._count += 1
# ...
y = u * self.gain
return y
end #stepImpl
# 释放资源函数:函数名固定,且只能有一个函数参数self
function releaseImpl(self)
# ...
return nothing
end #releaseImpl
# 其它自定义函数,第一个函数形参数必须是self
# function xx(self)
# ...
# end
end
注意
编辑 Julia 对象文件时,请注意以下几点
- 请勿删除注释标签,如
# Description、# Methods等; - 请勿删除初始化函数
setupImpl(),单步计算函数stepImpl(),释放资源函数releaseImpl(); - 类名需要具有唯一性,且与文件名一致。
# 属性
Julia 对象文件中属性分为公共属性Parameter和私有属性Private:
| 属性分类 | 特点 | 支持的数据类型 |
|---|---|---|
| Parameter | Sysplorer 中可以直接访问 | 特定的 Julia 数据类型 |
| Private | 只能通过 SyslabObject 的方法来访问,用户不可见 | 符合 Julia 语法的数据类型 |
目前您可以在Parameter参数中使用以下数据类型:
String | Bool | Int64 | Integer | Float64 | Real | Number
Vector{Int64} | Vector{Integer} | Vector{Float64} | Vector{Real} | Vector{Number}
Matrix{Int64} | Matrix{Integer} | Matrix{Float64} | Matrix{Real} | Matrix{Number}
# 方法
Julia 对象文件中包含有三个固定方法:
| 方法 | 说明 |
|---|---|
| setupImpl | 执行设置和初始化任务 |
| stepImpl | 系统输出和状态更新方程 |
| releaseImpl | 释放使用的资源和执行必要的清理任务 |
# 使用 SyslabObject
# 在 Sysplorer 中使用 SyslabObject
您可按下图所示在 Sysplorer 中使用 SyslabObject。
- 加载模型库 - 在 Syslab 中启动 Sysplorer,加载 SyslabWorkspace 模型库
- 创建单个组件 - 拖拽创建单个 SyslabObject 组件
- 配置组件 - 关联组件对应的 Julia 对象文件
- 新建或编辑 SyslabObject 组件的 Julia 对象文件
- 编辑 SyslabObject 组件的端口设置
- 将组件组合到系统中 - 编写一个包含这些 SyslabObject 的 Sysplorer 程序,完成其余部分模型的建模
- 运行系统 - 在 Sysplorer 中运行您的程序进行仿真
- 修改组件 - 对已关联 Julia 对象文件的组件进行修改
注意
在使用 SyslabObject 组件之前,请确认已安装 julia 1.9 版本。
# 加载模型库
请通过 Syslab 启动 Sysplorer 软件,确认插件管理中已启用Syslab Extension for Sysplorer插件(默认启用)之后,加载 SyslabWorkspace 模型库。
# 创建单个组件
通过拖拽创建单个 SyslabObject 组件。除了工具箱提供的 SyslabObject 以外,您还可以创建自定义的 SyslabObject,组件在模型库中的路径为SyslabWorkspace.SyslabObject.SyslabObject。
# 配置组件
如果您使用某个工具箱中提供的 SyslabObject 组件,可编辑修改默认属性值和方法以便为您的特定系统建立模型。
如果您需要配置自定义 System Object:
- 右击组件在上下文菜单中单击选择 Syslab 对象文件…,弹出 “Syslab 对象参数” 对话框。
如果您需要新建 Julia 对象文件,单击对话框中 “新建” 按钮,可以在 Syslab 中打开编辑器并默认新建一个 Julia 对象文件;您也可以通过 Syslab 的 “主页” 菜单栏中的 “新建” 下拉框中选择 “新建 Julia 对象” 进行创建:
编辑 Julia 对象文件,详情请参见 Julia 对象
保存 Julia 文件。默认类名为
Untitled,请注意文件名需与类名一致,保存后此文件自动关联到 SyslabObject 组件如果您需要将 SyslabObject 组件关联到现有 Julia 对象文件,单击对话框中的 “浏览…” 按钮选择对应的 Julia 文件。您也可在文本框中输入文件路径,文件路径支持绝对路径和相对路径
单击对话框中的 “确认” 按钮,组件依据 Julia 文件自动生成参数、端口等信息
注意
组件的默认参数、端口信息仅在单击“确认”按钮后进行刷新。如您对 Julia 文件进行了修改,请重新单击“确认”按钮。
- 右击组件在上下文菜单中单击设置 Syslab 对象端口 ,弹出 “设置 Syslab 函数端口” 对话框:
- 指定输入/输出端口的类型和维度信息
- 如有需要,可修改输入端口的范围、初值和参数说明的信息。详情请参见端口配置
# 将组件组合到系统中
当您确定了所需组件并已创建和配置 SyslabObject 之后,请组装您的系统。
# 运行系统
单击 Sysplorer 的 “仿真” 按钮对系统进行仿真。如果您需要在 Sysplorer 中获取 Syslab Block 的调试信息,请参见调试信息。
# 修改组件
如果您需要修改已关联 Julia 文件的 SyslabObject 组件配置,右击组件在上下文菜单中单击选择 Syslab 对象文件 ,单击弹出对话框中的 “源代码” 按钮,可在 Syslab 中打开对应文件进行编辑。
完成编辑后,单击对话框中的 “确认” 按钮,组件将自动更新参数、端口等信息。
提示
- 对于组件参数,如果已在 Sysplorer 中对类生成的属性初始值进行了修改,比如在 Sysplorer 组件参数底部停靠栏中修改了初始属性值, 更新后不会覆盖当前修改值;
- 对于组件端口,如果您删除了某一端口,更新后对应位置上的原有连接线将悬空。
您也可以在对话框中新建或更改关联的 Julia 对象文件,组件将自动更新。
提示
切换关联的 Julia 对象文件,更新后原有连接线将悬空。
# 模型示例
创建移动平均值的 SyslabObject:
SyslabWorkspace.Examples.Demo_SyslabObject_MovingAverageFilter使用 SyslabObject 搭建模拟调制解调模型:
SyslabWorkspace.Examples.Demo_SyslabObject_AnalogModulationDemodulation