# 1. 实现运算


本节需要通过 FromWorkspace 模块从 Syslab 工作区读取变量数据。

本文所需数据文件:etc_r2v1_data.jl。 最终模型文件可参考:

# 教程示例:电位器

电子节气门控制器使用物理传感器来读取节气门板角度。该物理传感器是一个电路,它使用电位器根据节气门板角度来改变传感器的输出电压。传感器模型将节气门板角度作为输入,并输出代表传感器输出电压的信号。如需使用 Sysblock 模块对这个系统进行建模,用户先必须了解该系统的数学表示形式。

以下方程描述了输入角度(以弧度为单位)与传感器输出电压之间的关系。

电压的计算公式可以通过查找表来得出。该公式表明,当角度在 0° 或以下时,电压应为 0.5 V;当角度在 90° 或以上时,电压应为 4.5 V。对于介于 0° 和 90° 之间的输入角度,用户可以通过线性插值实现或使用查找表来插值计算电压的值。

# 新建 Sysblock 模型

  1. 首先启动 Syslab 软件,在主页找到 Sysplorer 并双击打开。

  2. 在 Sysplorer 界面找到文件 > 新建 Sysblock 模型 > Sysblock 模型或者文件下方新建模型 > Sysblock 模型,本教程展示为前者。

  3. 弹出新建控制器模型窗口,用户可自定义命名和存储位置,单击确定

提示

由于 Sysblock 模型需要由 Syslab 导入数据,所以必须从 Syslab 中启动 Sysplorer。

# Sysblock 库浏览器的使用

要向空白模型中添加模块,查找可浏览窗口左侧的库浏览器

Sysblock 库浏览器以分层列表视图显示库。要查看某个库中包含的模块,只需选择该库名称,库内的模块会列在库浏览器面板中展开的库下方。

可以在库浏览器中执行以下操作:

  • 用户可以在库浏览器窗口顶部的编辑文本字段搜索模块。
  • 将鼠标悬停在模块上可以显示模块描述。
  • 选中模块右键单击,可以查看模块的帮助文档。

# 添加模块

要将一个库中的模块添加到模型中,从库浏览器中单击该模块并拖到窗口中,或者双击空白处弹出搜索框,输入模块名称选中。

将以下模块添加到模型中。

  1. “FromWorkspace” —— 将来自 Syslab 变量的数据读入模型中;
  2. “Gain” —— 将输入信号从弧度转换为度数;
  3. “LookupTable1D” —— 实现一个查找表,用于将度数转换为伏特;
  4. “ToWorkspace” —— 将系统输出传递至 Syslab 工作区。

# 连接模块

信号使用户能够在模块之间传递数据。可以采用多种方式来创建信号线:

  • 在源端口按住鼠标左键,拖动鼠标并将其拖动至目标端口;
  • 在目标端口按住鼠标左键,拖动鼠标并将其拖动至源端口;
  • 单击模块,按住 Ctrl 键,然后单击目标模块;
  • 将模块拖动至使它们的端口对齐,然后单击该引导线。

# 模块与连接线的命名

模块和信号的标签能够提升用户对模型的可读性。在 Sysblock 中,每个模块都会被赋予一个标签。如果存在多个相同类型的模块副本,那么后续添加的副本的模块标签会加上序号。例如,如果有两个“Gain”模块,第一个模块默认被命名为“gain”,而第二个模块则被命名为“gain1”。每个模块的标签必须是唯一的。要重命名一个模块,只需单击该模块,然后单击标签进行编辑即可。如果用户输入重复的名称,将会显示一条警告信息,并且标签会更改以解决冲突。默认情况下,Sysblock 编辑器会隐藏所有自动的块标签,要显示模型中的所有块标签,选择编辑 > 自动命名 > 隐藏自动块名称 选项。

要给连接线添加标签时,双击该连接线,一个标签文本框会在连接线旁边弹出,其中有一个闪烁的光标,下一步就可以在文本框中输入内容。用户还可以拖动标签移动到合适的位置。

模块和连接线命名如图依次为:“angle” 、“angle”、“rad2deg”、“rad2deg”、“deg2volts”、“volts”、“volts”。

# 定义模块参数

模块描述位于模块参数对话框的顶部。 为了确定一个模块的参数:

  1. 双击该块以打开其模块参数对话框;
  2. 将每个相关的字段替换为适当的值或选项;
  3. 单击确定按钮。

用户还可以在模型窗口内选中单击建模 > 编辑参数来定义模块参数。

  1. 双击 rad2deg 模块,将增益设置为 180/pi ,单击确定

  2. 双击 deg2volts 模块,在值域和定义域窗口将值域设置为 {0.5,4.5}定义域设置为 {0,90},单击应用。在算法窗口将外插方法设置为裁剪索引搜索方法设置为二分搜索,单击确定

# 定义输入与输出

模型输入端口发出的信号被视为外部输入。用户可以使用 FromWorkspace 模块从 Syslab 工作区导入这些信号,再从工作区的加载下,指定要从 JULIA 工作区加载的数据。此次输入的方法是使用矩阵,其中第一列表示时间,后续列表示输入信号值。在此示例中,输入是节气门角度(以弧度为单位)。

  1. 为使 angle 模块能成功读取 Syslab 工作区数据,需要双击该模块,将数据修改为对应数据参数名称 “input”,单击确定;双击 volts 模块,数据改为“output”。

  2. 打开 Syslab 软件,主页 > 新建 > 新建Julia脚本

  3. 在 JULIA 工作区中将节气门的 t 和 u 定义为列向量。

    # 生成时间向量:从0到10,共101个点,转置为列向量
    t = collect(range(0, 10, length=101)) |> x -> reshape(x, :, 1)
    # 生成输入信号向量:从0到π/2,共101个点,转置为列向量
    u = collect(range(0, π/2, length=101)) |> x -> reshape(x, :, 1)
    # 组合成输入矩阵(第一列为时间,第二列为输入信号)
    input= hcat(t, u)
    
  4. 单击运行后,数据会保存到 JULIA 工作区。

# 模拟模型

回到 Sysplorer 中,在模型窗口顶部的主页建模选项卡中选择仿真

单击仿真设置,常规窗口设置仿真时间,终止时间设置为 10,单击确定并保存到模型,在主页再单击仿真

在进行模型模拟时,Sysblock 求解器负责生成精确且正确的模拟结果。该解算器通过一系列时间步长来进行模拟。在模拟过程中,求解器会确定下一个时间步所需的节点。在每个模拟时间步中,求解器会确定模型中哪些块需要执行。如果某个模块被执行,该模块的输出信号就会被修改。

在仿真结束后,切换到 Syslab 软件,可以看到 JULIA 工作区变量 tout 包含了模拟中实际使用的各个时间步。

对于像这样的简单模型,求解器会通过下面所示的公式来确定时间步长。

这里, 是模型的起始时间(通常为 0),而 是模型的结束时间。所以,创建的模型步长为 0.2 秒。

# 添加信号查看器

用户使用模型库,找到 Sysblock.Utilities.Scope 或者主页中的结果查看器来查看信号值在整个模拟过程中的变化情况。此次示例选择前者来查看信号值。

  1. 在模型库中搜索 Scope 模块,添加到模型中,双击 Scope 模块,单击文件,选择输入端口个数为 3。

  2. 然后将信号线接入,单击仿真

  3. 仿真结束后,双击 Scope 模块。

要探索仿真结果,在窗口中单击曲线双游标按钮。会在信号上添加两个光标,用户可以通过单击并拖动来移动它们。用户还可以使用轨迹选择和光标测量面板来更改光标并查看数据的数值。