近20年来, CAD技术有了很大发展,生产商从开发通用的CAD开始,逐步地向各个具体行业的CAD细化。液压CAD也在这个进程中逐渐发展起来,从原始的单纯的图形绘制,到仿真功能的集成,功能越来越完善。通过仿真可以得到液压元件或系统的动态特性,例如过渡过程、频率特性、响应速度等。仿真已成为研究和设计液压元件或系统的重要组成部分,对于改进液压系统的设计具有重要意义,有成为液压CAD系统不可缺少的一部分的趋势。在吸收了近年来先进的计算机新技术后,本文提出了一种基于面向对象技术以数据库为底层存储平台的液压CAD系统,其工作流程如所示。
2液压系统CAD设计平台液压系统CAD部分是设计、绘制液压原理图的基本功能模块,能根据仿真模块的反馈结果优化元件参数,修改初始设计。CAD模块调用元件类库生成液压系统的树状结构。
2 1液压系统结构树产品信息决定了软件的扩展性、兼容性和稳定性,该能覆盖液压系统整个生命周期,方便应用于液压系统CAD设计、仿真、现场控制等环节。
产品设计过程是一个产品信息由少到多、由粗到细不断创作、积累和完善的过程。因此,产品信息模型应能将来自不同阶段的产品信息包容在一个统一的信息模型中。本系统采用结构树来表达产品的各项数据。树的节点是功能模块,叶子是各具体元件。
2 2液压系统CAD液压系统的绘制主要是液压元件的绘制。液压元件的绘制一般采用元件图形符号库的方法,用户拖拉图形符号向液压系统中增加元件。其缺点是图形只是一个符号,在数据结构上与元件是分开的,没有采用面向对象的思路,还是过程化的程序+数据方式。如果采用完全的面向对象方法,把向液压系统中增加元件,看成向产品结构树中加入元件对象,元件对象的绘制由元件自身的行为完成,这样就能把图形的绘制集成为元件的操作,便于仿真。
元件是对实际物理液压元件的抽象。液压元件的多种多样,决定了元件是内容庞大的类库。元件类库为树状层次,如所示,*顶层是元件基类,从CObject派生,概括了所有液压元件的共同属性和全部操作。按照面向对象的派生和虚拟函数、多态性和重载等手段,每种具体的元件处于叶子层,其属性经过层层扩充,已经能具体地表达元件性能指标;而操作也具体到对图的绘制、属性合理性检测、对文件的序列化、对数据库的序列化、状态转换、构造等。元件类不但要处理前期设计的输入信息,还应能处理仿真过程的中间信息和结果信息,因此信息模型会随着用户使用过程的推进逐渐丰富和完善。元件中信息内容的变化可以总结成6种状态,用户设计时元件对象就在这6种状态间转换。
2 3油路油路与其他元件有不同之处。油路不在结构树中,而是由一个链表连接起来。每个油路都有2个指针,指向结构树中的叶子,代表所连接的2个元件。油路的绘制操作也有所不同,需要考虑相互避让。油路的2个端口间如果没有障碍,则用1条水平线和1条垂直线绘制完成。如果水平线或者垂直线上有障碍,可以选择先画水平线后画垂直线或者先画垂直线后画水平线;如果先画水平线后画垂直线或者先画垂直线后画水平线都无法避开障碍,就需要尝试用3段或者更多的折线来绘制油路。
2 4动作设计动作设计允许用户在系统中设置一系列动作。
每个动作要设置所涉及的阀门的属性和重新绘制油路。阀门类会发生变化的属性被定义成一个链表,以和相应的动作对应。每个动作对应1个油路链表,也相应地决定了系统的1个状态,对应仿真的一个数学模型。
3液压系统仿真仿真引擎的设计是一个复杂的问题,涉及多个学科,而液压系统是阶次非常高、元件比较多的复杂系统。如果借用现有成熟的商业仿真软件,则可以取到事半功倍的成效。MATLAB是功能强大、用户广泛、计算稳定可靠的计算引擎。将每个元件对应成仿真模块,在其属性中定义仿真模块的存放路径。仿真步骤:启动M程序将各仿真模块集合成一个完整的仿真框图; MATLAB仿真运算;保存并返回仿真结果。
3 1封装过的仿真模块设计液压元件封装成仿真模块时可能会出现3种情况:( 1)液压元件可以直接映射成相应的元件模型,生成封装Simulink框图。在不同的系统中元件可能有不同的功能,在Simulink框图中端口的输入输出也就不同。Simulink中提供了一些根据不同条件使用不同模型的功能模块,如使能子系统( En abledSubsystem)、结构控制子系统、触发子系统(TriggeredSubsystem)等等,使设计Simulink模型如同程序设计一样有条件和跳转结构,封装也变得很灵活。
( 2)如果元件的结构和参数不确定,例如油箱油口数目及油液流向在不同的系统中不一样,因此在模型图中的输入输出端口数目和端口方向就没有办法确定,这种元件可以用S-函数建立模型。S -函数跟程序设计中的函数相似,处理这种变元件节点比较方便。
( 3)如果某类元件过于复杂,无法直接用一个模块处理,甚至用S-函数也很难建立模型,但是它由几种环节构成是已知的,环节的结构和环节间的连接是确定的,这时可以建立整个元件对应的总模块,总模块由多个子模块组成,一个子模块封装一个环节,子模块间按照元件内环节间的连接关系连接;分别对环节建立子模块,对应环节的子模块可以是Simulink框图或者S-函数;如果环节间的连接关系是不确定的,可以用使能子系统、结构控制子系统、触发子系统等灵活地连接。
3 2仿真模块集合成一个完整的仿真框图液压系统图映射成仿真模型图由1个M程序完成,其方法如下:( 1)每个油口被映射成元件模块上的2个端口,即流量端口和压力端口;( 2)全部液压元件映射完成后再映射液压结构;( 3)液压系统图中油路映射成相应元件模块端口间的连接:输出流量端口连接输入流量端口,输出压力端口连接输入压力端口。端口也被封装在元件模块中,因此,液压元件映射时也就完成了油口对端口的映射。液压系统图进行自动映射时要扫描2次,第1次完成液压元件的映射,第2次完成油路的映射。
完成液压元件及液压结构的映射后,还要经过3个步骤才能完成模型图:( 1)有些封装的元件模块端口在元件内并没有作用,是空置的。例如油箱所有输入输出油口的压力其实全是相等的。所以,可以在模型图中去除空置的油口及其连线;( 2)模型图中还会有一些空置端口,应当按照用户对性能分析的要求,在这些端口上接上输入( ln )变量或者输出( Out)变量,或者终结子(Terminal) ,从而完成了液压系统图对仿真模型图的映射;( 3)设置元件模块的参数和仿真模型图的参数。
3 3运行仿真、保存并返回仿真结果Simulink模块执行仿真任务后,将仿真图形和数值结果或者出错信息用文件保存下来,作为Mat lab数据回馈。
4液压系统数据的序列化液压元件有国家标准,国家标准都是用表的形式发布的。另外,使用表查询元件的国家标准也很有帮助。因此使用数据库进行序列化,以GB作为索引,将液压元件与程序剥离,对修改或者导入导出元件属性都十分方便。这样系统的运行层是面向对象的类,底层的物理层是数据库。这2者的结合衍生成新类型的面向对象数据库,本系统只使用了面向对象的类与数据库的序列化算法。
4 1液压元件类库向关系数据库映射关系数据库共有3类表,完整地与液压元件类库进行数据序列化。
( 1)继承关系表表述了液压元件类库中的全部继承关系。
( 2)类表存储了各种元件类型的属性。元件的属性可以分为2种:第1种是此类型中元件都相同的属性,称之为标准属性;第2种是此类型中元件不相同的属性,称为具体属性。这2种属性对应2种类表:标准属性表和具体属性表。标准属性表中的数据来自国家标准,用GB号作为主键;具体属性表用元件ID作为主键。
类库中的所有类,除了没有子类的叶子类,都可以看作抽象类;而没有子类的叶子类是具体类。抽象类没有具体属性,因此只有标准属性表;具体类有标准属性和具体属性,因而具体类都有2张表。类表还表达继承的关系。子类不改写祖先类域,就继承了祖先类表的域;改写了祖先类域,就重载了祖先类表的域。
( 3)工作表用户设计的液压系统存储在此表中,相当于存储文档。工作表存储了该液压系统中的所有液压元件,以元件ID作为主键,元件ID是标识元件的标号。
4 2类与数据库间数据的交流所设计的液压系统存档时,类中的数据入库步骤如下:( 1)生成新的工作表;(2)取出设计的液压系统中的一个液压元件,生成元件ID;( 3)将元件的具体属性保存在相应的具体属性表中;( 4)将元件存入( 1)生成的工作表;(5)重复( 2)、( 3)、( 4)直到完成所有元件的序列化工作。
可以看出,每个元件的序列化要涉及2个表的操作,比较简洁。相应的,从数据库中读入数据的步骤为:( 1)打开相应工作表,从中读入1个元件,生成相应类的对象;( 2)由元件ID检索元件具体属性表,将具体属性表域中数据填入对象相应的属性;( 3)由元件GB号读入标准属性表中的域,存放到对象相应属性中;( 4)由元件类型找出其父类,读入父类的标准属性;( 5)重复( 4) ,直到读完所有元件的所有祖先类的标准属性表;( 6)选择工作表中下1个元件,重复( 2)、(3)、( 4)、( 5) ,直到完成所有元件对象的读入工作。
5总结本系统将面向对象的思想彻底贯彻在液压系统的CAD设计中,抛弃了过去用程序操作图形符号库的方式,将面向对象和关系数据库有效结合在一起,把复杂的数据结构存储到PDM中,也能从PDM中恢复出原来的对象,有利于仿真任务的完成,没使用面向对象数据库而完成了面向对象数据库的功能。这种不同的思路相比其他方式,具有可扩展性高、开放性好、计算稳定、体积精巧、可持续性发展、能充分利用已有资源等特点,适应了产品的生命周期越来越短,产品本身多样化、客户化的时代要求。