# 案例-液压组件库
# 需求分析
液压组件库的需求目标是基于业务需求、架构需求、功能需求、性能需求、接口需求、运行环境需求和非功能性需求等多个方面来确保实现一个高效、可靠且易于使用的液压组件库。从业务需求方面来看,旨在满足各种液压系统的需求,提供可靠且高效的液压组件。从架构需求方面来看,需要具备模块化、可扩展和可重用的设计架构,以便开发人员进行定位和使用。从功能需求来看,需要提供液压泵、液压缸、液压控制阀等一系列液压组件,并确保它们的功能正常且稳定。从性能需求来看,需要确保液压组件的性能满足系统要求,包括求解精度和效率等方面。从接口需求来看,需要定义液压组件之间的接口规范,确保组件的相互兼容和无缝集成。从运行环境需求来看,需要在规定的软件和硬件环境下稳定运行。最后,从非功能性需求来看,需要具备良好的稳定性、兼容性、可扩展性和易用性,以提高系统的稳定性和用户体验。
# 架构设计
液压组件库考虑能够满足用户更快捷定位和使用要求,并根据液压设备功能进行划分,所以将模型的架构目录设计如下:
主要提供了复杂液压系统构成所需的零部件模型,包括泵源、液压阀(压力控制阀、流量控制阀、方向控制阀)、执行机构(马达和液压缸)、液压管路、液压辅件、液压管阻(接头、孔口与管路、滑动轴承)、边界源和传感器设备模型等。
| 名称 | 描述 | ||
|---|---|---|---|
| UsersGuide | 用户指南 | 提供模型库概述、联系方式、版本说明和二次开发模板等介绍文档 | |
| Examples | 典型实例 | 提供液压组件库的经典应用案例,方便用户快速入门 | |
| Pumps | 泵源库 | 定量泵库(ConstantPumps) | 提供单向、双向和双向外排等定量泵 |
| 变量泵库(VariablePumps) | 提供单向、双向和双向外排等变量泵 | ||
| 专用泵库(SpecialPumps) | 提供调压、容积、离心、齿轮、柱塞和射流等专用泵 | ||
| Valves | 液压阀库 | 压力控制阀库(PressureValves) | 提供多种溢流阀、多种减压阀和平衡阀以及超中心阀等 |
| 流量控制阀库(FlowValves) | 提供多种节流阀、多种缝隙、局部压力补偿器、流量控制阀、球阀和蝶阀等 | ||
| 方向控制阀库(DirectionaValves) | 提供不同种类换向阀、不同种类单向阀、梭阀和双压阀等 | ||
| Actuators | 执行机构库 | 液压马达库(HydraulicMotors) | 提供了单向、双向和双向外排等定量马达以及单向、双向和双向外排等变量马达 |
| 液压缸库(HydraulicCylinders) | 提供多种双作用液压缸和单作用液压缸 | ||
| PipeLines | 管路库 | 提供多种集中参数管道和多种分布式管道模型 | |
| Resistances | 流阻库 | 接头库(Junctions) | 提供各种类型管接头、如弯管、三通、异径管等 |
| 孔口与管路库(HolesandPipes) | 提供了离心管路、孔口和液压槽衬套模型 | ||
| 滑动轴承库(PlainJournalBearings) | 提供各种滑动轴承模型 | ||
| Auxiliaries | 辅件库 | 提供辅助元件,比如气体式蓄能器、弹簧式蓄能器、过滤器、其它容积等 | |
| Interfaces | 接口库 | 提供二次开发必要的接口模型 | |
| Sources | 边界库 | 提供常用的压力边界、流量边界、油箱和零流量源 | |
| Sensors | 传感器库 | 提供检测压力、流量等传感器 | |
# 构建步骤
在 Sysplorer 主页面顶部的主页页签,选择新建模型>package。

在弹出对话框对应位置填入:模型库名称“Hydraulics”;类别“package”;描述“液压组件模型库”;其他默认,单击确定,创建液压组件空模型库。

在液压组件空模型库创建新模型,右击 Hydraulics 弹出对话框,单击在 Hydraulics 中新建模型…。

在弹出对话框对应位置填入:模型子库名称“UsersGuide”;类别“package”;描述“用户指南”; 勾选保持到父模型所在文件,其他默认,单击确定,创建用户指南空模型子库。

按照步骤 4,依次建立表中的架构列表,最终建立完成如下:

# 接口设计
液压组件库涉液压接口、机械平动接口、机械转动接口和控制接口四大类,接口中包含的变量如下:
| 接口类型 | 接口变量 | 单位 |
|---|---|---|
| 液压接口 | 压力 p | bar |
| 流量 q | l/min | 机械平动接口 | 位移 s | m |
| 力 F | N | |
| 机械转动接口 | 转矩 tau | N/m |
| 转角 phi | degC | |
| 控制接口 | 输入 u | / |
| 输出 y | / |
流体接口
液压接口通过连线连接不同的模型,用于在不同模型之间传递物理量信息,接口变量分为势变量与流变量。
在液压接口中定义了压力和接口体积流量两种变量,其具体信息如下表所示:
接口 变量 范围/单位 数据维度 数据类型 描述 Port p bar [1] Real 接口压力 q L/min [1] Real 接口体积流量 液压接口图标使用蓝色圆圈(通常位于模型左侧)和蓝色圆环(通常位于模型右侧)表示,如下图所示:
接口 port_A 和 port_B 是相同的液压接口,其区别仅为名称和图标的不同。为使构建的模型与实际组件流体流向相同,并且方便计算和使用,规定流体一般由 port_A 接口流入,从 port_B 接口流出,对于流变量,规定流入组件为正,流出为负。例如,对于节流孔这类具有局部压损的液压模型,当接口 port_A 的压力大于接口 port_B 的压力,液体由接口 port_A 流向接口 port_B,流入接口 port_A 的流量为正值,流出接口 port_B 的流量为负值;反之,当接口 port_B 的压力大于接口 port_A 的压力,液体由接口 port_B 流向接口 port_A,流入接口 port_B 的流量为正值,流出接口 port_A 的流量为负值。
平动机械接口
一维平动机械接口用于和连线一起来创建一维平动机械模型之间的势变量与流变量的连接关系。接口中定义一个势变量 s 和一个流变量 f,如下表所示:
接口名称 变量名称 单位 数据类型 描述 flange s m Real 位移 f N Real 力 一维平动机械接口图标使用绿色的方块(通常位于模型左侧)、白色的方块(通常位于模型右侧)和绿色方块带灰边(通常为外壳用)表示,如下图所示:
接口 flange_a 和 flange_b 是相同的一维平动机械接口,其区别仅为名称和图标不同,support 通常表示为外壳或固定端接口。为使构建的模型具有和工程使用相符的正负方向,便于理解使用,规定 flange_a 位于模型左侧,flange_b 位于模型右侧,正方向表示从模型左侧 flange_a 接口指向模型右侧 flange_b 接口。例如,对于弹簧阻尼这类具有拉伸压缩性质(compliance)的物理模型,当该弹性模型被拉伸时,产生阻碍变形的力,模型左侧接口 flange_a 的力为负值,右侧接口 flange_b 的力为正值,此时该弹性模型左右侧接口力 f 的正负值与工程上理解是相同的,即当弹簧受拉时,左侧受力为负方向(负值),右侧受力为正方向(正值)。反之,当弹性元件模型受压时,其左侧接口力为正值,受力沿正方向,右侧接口力为负值,即受力沿负方向。
转动机械接口
一维转动机械接口用于和连线一起来创建一维转动机械模型之间的势变量与流变量的连接关系。接口中定义一个势变量 phi 和一个流变量 tau,如下表所示:
接口名称 变量名称 单位 数据类型 描述 flange phi rad Real 角度 tau N.m Real 力矩 一维转动机械接口图标使用深灰色圆(通常位于模型左侧)、白色的圆(通常位于模型右侧)和深灰色圆带灰边(通常为外壳用)表示,如下图所示:
接口 flange_a 和 flange_b 是相同的一维转动机械接口,其区别仅为名称和图标,support 通常表示为外壳或固定端接口。为使构建的模型具有和工程使用相符的正负方向,便于理解使用,规定 flange_a 位于模型左侧,flange_b 位于模型右侧,正方向表示从模型左侧 flange_a 接口指向模型右侧 flange_b 接口。例如,对于弹簧阻尼这类具有拉伸压缩性质(compliant)的物理模型,当该弹性模型被拉伸时,模型左侧接口 flange_a 的力矩为负值,右侧接口 flange_b 的力矩为正值,此时该弹性模型左右侧接口力矩 f 的正负值与工程上理解是相同的,即当弹簧受拉时,左侧受力矩为负方向(负值),右侧受力矩为正方向(正值)。反之,当弹性元件模型受压时,其左侧接口力矩为正值,受力矩沿正方向,右侧接口力矩为负值,即受力矩沿负方向。
# 模型开发
这里我们主要以 90° 三通模型为例,描述模型开发步骤。
在构建三通模型时,主要考虑其以下两点功能:
- 功能点 1:管道分流,能够实现主管道到分支管道的流量分配;
- 功能点 2:管阻压降,支持用户根据实际构型设置各流向摩擦系数、直径、临界雷诺数等,实现不同压降效果。
其对应的物理原理为:
节流孔的流量系数
计算如下,为摩擦系数的函数(s 和 m 分布代表主路和支路): 节流孔的体积流量:
中间节点容腔压力计算:
根据物理原理进行模型构建,首先建立基础模型主管节流孔,并按照相同方式依次建立分支管道节流孔和三接口液压容积模型,最终进行封装完成构建 90° 三通模型,具体步骤如下:
步骤 1 :新建主管节流孔模型
在已创建的液压组件库下找到
Hydraulic.Resisitances.Junctions.BasicModels路径下的子模型库,并创建新模型,右击 BasicModels 弹出对话框,单击在 BasicModels 中新建模型…。
在弹出对话框对应位置填入:模型名称“OrificeM”;类别“model”;描述“主管节流孔模型”;勾选保持到父模型所在文件,其他默认,单击确定,创建主管节流孔空模型。

至此模型创建完成,结构如下:

步骤 2 :编写模型文本
完成主管节流孔空模型创建后,双击 OrificeM 进入模型,根据以下步骤进行代码编写。单击文本按钮
进入文本视图,对主管节流孔模型按照继承类语句、模型参数、模型变量、模型接口和模型方程等规范顺序进行对应代码写入。
①:参数变量
//参数
parameter Modelica.Units.SI.Diameter dm(displayUnit = "mm") = 0.01 "主管道直径"
parameter Real km = 0.1 "主管道摩擦系数"
//变量
Modelica.Units.SI.Pressure dp(displayUnit = "bar") "压差";
Modelica.Units.SI.VolumeFlowRate q(displayUnit = "l/min") "体积流量";
Modelica.Units.SI.Density rho = 850 "密度";
Modelica.Units.SI.KinematicViscosity nu = 6e-5 "粘度";
Modelica.Units.SI.Area Am "主管道流通面积";
Real Cq "流量系数";
②:方程代码
//压差方程
dp = port_A.p - port_B.p;
//管道流通面积
Am = FlowArea(dm);
//管道流量计算
Cq = 1 / (sqrt(km / 2));
q = Cq * Am * sqrt(2 * abs(dp) / rho) * sign(dp);
//接口方程
q = port_A.q;
port_A.q + port_B.q = 0;
步骤 3 :图标设计
在上述编写完成模型代码后,需要为模型绘制图标和编写文档浏览器。
在 Sysplorer 主页面顶部主页页签,单击图标按钮
,进入图标视图;在 Sysplorer 主页面顶部编辑页签,采用绘图工具或导入图片方式为模型绘制图标。
步骤 4 :参数面板设计
代码如下:
//参数
parameter Modelica.Units.SI.Diameter dm(displayUnit = "mm") = 0.01 "主管道直径"
annotation (Dialog(tab = "常规", group = "结构参数"));
parameter Real km = 0.1 "主管道摩擦系数"
annotation (Dialog(tab = "常规", group = "特性参数"));
设置后,组件参数如图所示:
步骤 5 :说明添加
编写文档浏览器:单击软件右上角窗口,打开文档浏览器,单击
,进行模型说明编写,方便进行模型使用,如图所示。至此,完成主管节流孔模型开发。
步骤 6 :优化处理
计算体积流量 sign函数进行正负判断,sign函数内部已考虑事件处理,无需再加事件避免函数noEvent,以及公式中开根号 regRoot函数或regRoot2函数代替sqrt函数,保证 x=0 处导数有限且光滑,正确建模方式如下:
q := Cq * A * regRoot(2 * abs(dp) / rho)* sign(dp);
步骤 7 :其他子模型开发
以上完成了构建三通模型的主管节流孔模型的开发,按照上述步骤依次完成分支管道节流孔和三接口液压容积模型。如下:
在示例模型中的路径为:
分支管道节流孔:Hydraulic.Resisitances.Junctions.BasicModels.OrificeS
三接口液压容积:Hydraulic.Resisitances.Junctions.BasicModels.OilVolume3port
步骤 8 :模型封装
最终将完成的主管节流孔、分支管道节流孔和三接口液压容积进行封装组合成完整的三通模型,如下:
示例模型中路径为:Hydraulic.Resisitances.Junctions.Tjunction90deg
具体步骤如下:
在已创建的液压组件库下找到
Hydraulic.Resisitances.Junctions路径下的子模型库,并创建新模型,右击 Junctions 弹出对话框,单击在 Junctions 中新建模型…。
在弹出对话框对应位置填入:模型名称“Tjunction90deg”;类别“model”;描述“90° 三通模型”;勾选保持到父模型所在文件,其他默认,单击确定,创建 90° 三通模型空模型。

在完成 90° 三通模型空模型创建后,需要根据以下步骤进行模型组建和代码编写。
第一步,单击图形按钮
,进入图形视图,在图形视图中依次拖 2 个 OrificeM 主管节流孔、1 个 OrificeS 分支管道节流孔、1 个 OilVolume3ports 三接口液压容积等基础模型,然后创建 90° 三通模型接口,最后进行合理布局和连线,以完成建立 90° 三通模型所必须的模型构建,如图所示;
第二步,单击“文本”按钮
,进入文本视图,对 90° 三通模型补充模型参数代码,并将模型参数对应填入上述基础模型的参数面板内,完成 90° 三通模型的组建和代码编写,如图所示:
①:参数
//参数 parameter Modelica.Units.SI.Pressure p_init = 0 "管道内部初始压力" annotation (Dialog(group = "初始化")); parameter Modelica.Units.SI.Diameter dm(displayUnit = "mm") = 0.01 "主管道直径" annotation (Dialog(group = "结构参数")); parameter Modelica.Units.SI.Diameter ds(displayUnit = "mm") = 0.01 "管道分支直径" annotation (Dialog(group = "结构参数")); parameter Real km = 0.1 "主管道摩擦系数" annotation (Dialog(group = "摩擦系数")); parameter Real ks = 1.2 "管道分支摩擦系数" annotation (Dialog(group = "摩擦系数")); parameter Real Rec = 1000 "临界雷诺数" annotation (Dialog(group = "流体参数")); final parameter Modelica.Units.SI.Volume vol = 0.25 * Modelica.Constants.pi * dm * dm * ds;②:接口
//实例化 Interfaces.FluidPort_a port_B "流入组件端口" annotation (Placement(transformation(origin = {100.0, 0.0}, extent = {{-10.0, -10.0}, {10.0, 10.0}}))); Interfaces.FluidPort_b port_C "流入组件端口" annotation (Placement(transformation(origin = {0.0, -100.0}, extent = {{-10.0, -10.0}, {10.0, 10.0}}))); Interfaces.FluidPort_a port_A "流入组件端口" annotation (Placement(transformation(origin = {-100.0, 0.0}, extent = {{-10.0, -10.0}, {10.0, 10.0}})));在编写完成模型代码后,需要为模型绘制图标和编写文档浏览器。
(1) 绘制图标:单击图标按钮
,进入图标视图,并打开编辑页签,采用绘图工具或导入图片方式为模型绘制图标,如图所示:
(2) 编写文档浏览器:打开文档浏览器,单击
,进行模型说明编写,方便进行模型使用,如图所示。至此,完成 90° 三通模型开发。
# 模型测试
这里搭建一个测试系统对模型进行测试,以下为油箱泄油系统,包括一个闭式油箱 hTank、一个零流量源 ZeroFlowSource、一个三通模型 Tjunction90deg、两个可变节流阀 VarThrottleValve 和一个开式油箱 Tank,主要实现通过可变节流阀 VarThrottleValve 控制闭式油箱 hTank 的油液高度变化和流出时体积流量变化。
示例中模型路径为:Hydraulic.Examples.demo
系统模型图:
选中模型,右击在弹出的上下文菜单中,选择复制模型。

在复制弹框中,新名字输入“demo1”,描述“开一路”,插入到选择 Hydraulic.Examples,单击确定,完成模型复制。

在 demo1 选中 const 组件,在 Sysplorer 页面顶部进入视图 >窗口 > 组件参数,在参数面板中,将参数 k 值修改为 0。其中,k=0 表示此可变节流阀 VarThrottleValve 不开通。
对 demo 和 demo1 分别进行仿真操作。其中 demo 为开两路可变节流阀 VarThrottleValve,demo1 为在只开一路可变节流阀 VarThrottleValve。
勾选下图参数,查看 hTank 油液变化高度图:

勾选下图参数,查看汇入 tank 的体积流量图:

从上图可以看出,在只开一路可变节流阀 VarThrottleValve 时相比开两路,hTank 的油液高度变化更平缓,流出时体积流量更小。