APP下载

基于机电液系统的联合仿真分析平台研究

2024-01-16卢宁陈天保郑宏远龚涛

机床与液压 2023年24期
关键词:二次开发液压缸命令

卢宁,陈天保,郑宏远,龚涛

(1.北京建筑大学机电与车辆工程学院,北京 100044;2.北京市建筑安全监测工程技术研究中心,北京 100044)

0 前言

随着计算机技术的进步[1],虚拟样机技术、参数化建模和计算机辅助工程(Computer Aided Engineering,CAE)技术得到快速发展[2-3],其中,虚拟仿真技术在工业生产应用中日益发挥着重要的作用。机电液一体化技术因涉及机械、电子、液压、控制、气动、软件等多个不同的学科领域[4],研究较为复杂。因此,机电液系统的虚拟仿真技术逐渐发展起来。

针对机械模型、液压模型、控制模型,国外科技公司开发了多种强大的计算机辅助设计与仿真软件。目前,国内外还没有成熟的机电液一体化仿真平台商业软件可以建立完整的机电液联合仿真模型[5]。因此,通过多软件联合仿真实现机电液一体化的功能十分必要。文献[6]利用ADAMS、Simulink、AMESim的联合仿真接口,建立一种六自由度运动平台的机电液一体化虚拟实验系统,为运动平台的优化奠定了基础。文献[7]基于ADAMS、Simulink、AMESim的机电液联合仿真技术,比较了传统 PID控制和自适应模糊PID控制2种控制方式,得出了自适应模糊PID控制方式系统响应的跟随性能更好的结论。文献[8]建立机电液联合仿真模型,验证了盘型闸的恒减速制动比二级制动效果更优异。

由此可见,多软件的机电液联合仿真技术在应用研究中已经越来越主流。但各软件间的官方数据传输接口并没有完成互通,研究人员在实验过程中,若要调整仿真参数,则首先需要切换至对应软件,找到指定模块中的对应参数进行修改。当控制系统模型较为复杂时,频繁地调参及不直观的变量位置会使得仿真效率较低。为了解决这个问题,本文作者提出建立一个第三方的仿真控制平台管理各仿真软件的数据,以此简化仿真操作流程并提高仿真效率。

在以Simulink为主[9]的联合仿真的基础上,对各软件的数据传输接口和仿真语言深入研究,通过Python分别建立与ADAMS、Simulink和AMESim的仿真交互接口,提出一种以TCP/IP作为与ADAMS命令交互的通信协议的方法;以MATLAB虚拟环境为中介,Python通过执行MATLAB函数实现与Simulink的交互;以AMESim的Python应用程序编程接口(Application Programming Interface,API)实现编程建模,该代码中包含了液压系统中的所有信息,从而实现与AMESim中元件的交互。以此构建出能与各软件交流的第三方仿真集成平台,并能在该平台直接修改各软件的主要仿真参数,通过该联合仿真平台进行仿真实验,验证联合仿真平台的可行性、可操作性强和仿真效率高。

1 仿真平台的架构设计

仿真平台的总体架构设计使用Python作为开发语言。作为一种解释性语言[10],Python不仅拥有强大的标准库,还拥有庞大的第三方开源库。而PyQt则是Python对Qt库进行完整封装的跨平台GUI库,它提供窗口控件集合[11]的界面设计方式和能自动转换成Python代码,可以极大提高开发效率并高效运行。因此,综合考虑开发难度、灵活性和可移植性,使用Python作为开发语言更合适。开发的仿真平台人机交互界面如图1所示,通过平台左边的图标和对应的按钮可切换至不同的软件设置界面。

图1 人机交互界面Fig.1 Human-machine interface

仿真平台的总体架构如图2所示,它是由仿真平台客户端、数据交换模块、数据处理、仿真平台服务端等功能模块构成的综合性机电液一体化数字仿真平台。

图2 仿真平台总架构Fig.2 Overall architecture of the simulation platform

仿真平台客户端包括人机交互界面和仿真结果可视化显示,不同的部分表示对应软件的命令交互操作界面,仿真结果通过对仿真数据的本地化储存,然后进行预处理,在去除无用参数的同时对数据进行排列整理,使用Python的可视化绘图库Matplotlib对处理后的数据绘图并以子程序的形式显示在仿真平台客户端。

数据交换模块是人机交互界面控制仿真进程的核心方式:通过TCP/IP协议传入ADAMS能够识别的特定语句,能够控制ADAMS的仿真;MATLAB可以通过指定的函数修改Simulink中一些模型的固定参数,因此,对于不需变动的固定设置可以将它编写进m文件,对于需要动态调整的参数则需要直接写入程序内,二者均可以通过Python启动MATLAB Engine直接运行;AMESim则对Python开放了API,通过指定函数可以修改AMESim液压模型中任意元件的大多数仿真参数。通过此模块,用户可以将仿真关键参数直接传入仿真软件中,从而达到快速仿真的目的,且没有操作门槛。

仿真平台服务端则负责实现机电液联合仿真。目前,ADAMS、AMESim和Simulink间的数据接口都已经成熟,在建立机电液联合仿真分析平台之前,需要先搭建出机械系统、液压系统和控制系统。联合仿真数据交换原理如图3所示,将AMESim/MATLAB接口和ADAMS/MATLAB接口在Simulink中做对接,液压输出通过AMESim/MATLAB接口传递到Simulink中,然后通过ADAMS/MATLAB接口将输出传递到机械系统中,以此实现AMESim和ADAMS在Simulink中的数据交换。

图3 联合仿真数据交换原理Fig.3 Principle of data exchange in co-simulation

2 ADAMS与仿真平台接口研究

由于软件的开放性有限,国内外学者对ADAMS仿真平台的二次开发技术的应用主要是通过定制ADAMS软件的专用界面,通过录制宏文件和编写用户子程序组成使用界面的动作响应,以此实现目标功能。ADAMS偏向于支持用户子程序二次开发并连接至用户定制界面的方法,且提供了FORTRAN语言编写的子程序模板,子程序能利用通用程序设计语言的功能来定义ADAMS/View不能提供的函数,它具有很强的通用性和灵活性。但用户必须将写成的子程序使用独立的FORTRAN编译器编译,然后连接到ADAMS以创建ADAMS/Solver用户库文件,之后可以连同该库与ADAMS/Solver一起运行。此方式基于ADAMS内置人机交互库使用,只能保存成数据库文件然后打开ADAMS读取该库文件使用,面对现代多种仿真技术的耦合,它在编程和功能拓展方面并不具有优势。

因此,针对上述缺点,提出使用TCP/IP协议技术与ADAMS形成仿真交互。TCP/IP技术的使用提供了ADAMS二次开发的一种新方式,因为以TCP/IP作为通信技术而开发出的ADAMS第三方仿真平台具有独立性与强大的拓展性,这也为实现基于ADAMS的机电液联合仿真平台的开发提供了一个方向。

而与传统ADAMS自身的开发环境相比,在GUI设计、灵活性和可移植性等方面,Python明显优于ADAMS,因此选择Python作为ADAMS二次开发编程语言更合适。

2.1 仿真平台ADAMS部分的结构设计

ADAMS二次开发平台的设计路线如图4所示,它由仿真平台客户端、ADAMS服务端和交互命令模块3个模块组成。

图4 ADAMS仿真平台原理Fig.4 Principle of ADAMS simulation platform

仿真平台客户端是负责与用户交互的人机交互界面,用户可以通过此集成平台完成对模型的导入、参数设置、仿真控制等操作;ADAMS服务端则是以ADAMS软件为核心的动力学计算模块。启动文件是优化ADAMS开启后的默认程序和初始化与外部软件的通信功能,会随着ADAMS启动自动被其读取并运行。

交互命令模块是仿真平台客户端和ADAMS服务端仿真交互的通道,仿真的控制和数据传递采用受ADAMS服务组件Adams Commannd Server支持的TCP/IP技术。仿真平台通过TCP/IP通信协议访问该接口,而ADAMS作为服务器可以侦听来自外部应用程序的命令。在交互命令语句复杂时,可以通过命令让ADAMS读取宏指令,批量执行ADAMS/View命令,仿真平台通过命令语句更高效地控制ADAMS仿真。

2.2 编制ADAMS初始化文件

ADAMS每次启动时都会对工作界面进行初始化,且ADAMS的服务组件Adams Commannd Server支持的TCP/IP通信服务默认关闭,因此需要编制启动文件,在软件启动时简化工作界面并启用TCP/IP服务。

在ADAMS安装目录中的aview文件夹下新建文本文件,并编写ADAMS初始化程序,之后更改文件名称和扩展名为"aviewAS.cmd"。

部分代码如下:

interface model_browser undisplay

!关闭模型浏览器

interface ribbon undisplay

!关闭状态栏

int tool undis tool = .gui.main.status_toolbar

!关闭工具栏

int grid und grid = .gui.grid &view = ( db_default(.system_defaults,"view" ))

!关闭默认弹出窗口

command_server start

!开启TCP/IP服务组件

······

完成之后重新启动ADAMS并打开“CMD Command Window”命令框,输入“command_server show”会出现图5所示的窗口,说明启动文件已生效,TCP/IP服务已随软件自启,地址为本机,默认端口号为5002,外部软件可通过特定语句与ADAMS进行交互。

图5 显示窗口Fig.5 Display window

2.3 TCP/IP收发模块设计

由于是建立第三方仿真平台客户端,且首次将TCP/IP技术应用于ADAMS二次开发,Adams View Command Server传输的命令语句需要符合ADAMS的通用命令格式,因此还需要编写基于TCP/IP协议的通用命令发送与数据接收程序,才能满足第三方仿真平台客户端的使用要求。

TCP/IP收发模块的运行流程如图6所示,2种通用命令为:指令命令和查询命令。这些命令通过TCP/IP协议以字符串的形式,通过“client_socket.send(…)”程序发送给ADAMS服务端。

图6 TCP/IP收发模块运行流程Fig.6 Flow of TCP/IP transceiver module operation

其中指令命令是让ADAMS执行相应的动作指令,每一条指令命令字符串必须以“cmd ”开头才能被ADAMS识别,既可以单独发送一条指令,包括ADAMS宏指令文件 ,也可以循环读取并发送一个列表里的所有命令。

以导入名“model_import_macro.cmd”的ADAMS宏文件为例,部分代码如下:

import socket #导入模块

cmds =

[" cmd macro read macro_name=import file_name=

′D:/ADAMS/model/model_macro.cmd′",#宏文件位置

" cmd import "]#命令列表,包含两条命令

for cmd in cmds:#循环读取命令列表

client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

······

查询命令是让ADAMS以字符串形式返回查询的数据,每一条查询指令必须以“query”开头,以发送“OK”表示结束,ADAMS返回查询的结果并通过“client_socket.recv(1024)”接收数据且赋给变量。

以查询MARKER_2的坐标值为例,部分代码如下:

import socket #导入模块

client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

client_socket.connect(("localhost",5002))

queries = ["query MARKER_2.location ",

" OK"] # 查询目标查询

for query in queries:

client_socket.send(bytes(query,'utf-8')) #发送命令

recv_data = client_socket.recv(1024) #接收数据

······

该收发模块具有功能单一且需要多次使用的特点,因此将该模块程序设计成Python类,指令命令和查询命令设计成构造方法,并对此数据交换接口进行数据封装,以便调用所有程序,使得ADAMS部分具有强大的可扩展性,可以满足未来需要增加的仿真需求与方式。

3 Simulink与仿真平台接口研究

3.1 Python与Simulink交互设计

Simulink是MATLAB的一个组件[12],能够调用MATLAB的函数库并能兼容其他专业软件的扩展,它提供的基于Windows模型化图形输入交互方式[13]可以快速实现动态系统建模和仿真,是MATLAB的重要组成部分。Python无法直接与Simulink模型交互,但是可以通过与MATLAB交互实现,MATLAB提供的外部语言接口可与其他编程语言进行灵活的双向集成,高版本的MATLAB引擎开放了针对Python的API,其中包含了从Python中调用MATLAB的工具库,即在Python中可以调用兼容版本的MATLAB Compiler SDK。

因此,文中对Simulink的二次开发路线如图7所示,以MATLAB为数据传输中介,Simulink的变量参数改变和仿真结果输出由MATLAB的函数命令执行。

图7 Python与Simulink的交互Fig.7 Python interaction with Simulink

3.2 Simulink交互函数研究

Python通过MATLAB实现与Simulink的交互,这种交互方式需要解决2个关键技术:(1)可以随时修改Simulink中模块的仿真参数;(2)在仿真结束之后,仿真结果能够以数组形式保存到计算机本地。因此首先需要在MATLAB中安装Python包形式的API以激活MATLAB对Python的函数支持,之后Python可以建立MATLAB环境并能运行m文件和在程序里直接调用MATLAB支持的函数,通过在Simulink中使用特定模块建模和在Python中灵活使用MATLAB提供的函数,可以解决二次开发中的技术问题。

Python程序通过导入matlab.engine类可以在计算机上不启动MATLAB客户端的情况下启用新的MATLAB虚拟进程,虽然没有UI界面,但是存在MATLAB工作区和变量,在该环境中可以使用标准语句直接与MATLAB交互,因此第三方平台可以通过调用MATLAB引擎与Simulink服务器交互实现动态通信。

目前,通过Python建立MATLAB虚拟进程之后,有2种方式可以实现MATLAB与Simulink交互,如图8所示。既可以通过MATLAB引擎运行m文件,也可以在Python中执行MATLAB代码。前者可以方便快捷地执行模型的初始化和一些固定程序,后者在需要批量仿真或频繁调参甚至动态仿真的场合更为高效。因此,文中同时使用2种方式,启动模型初始化变量、结果输出和仿真过程调参分别使用不同运行方式,这样不仅可以降低系统的耦合性,还有利于平台功能的拓展和代码的维护。

图8 交互方式Fig.8 Interaction methods

MATLAB与Simulink的交互主要涉及到set_param(Object,Name1,Value1,...,NameN,ValueN)函数,该函数可以将指定模型或模块对象上的参数设置为指定的值。当用户修改了Simulink中的模型变量值后,set_param函数会将新参数值直接替换写入Simulink相应的形参中,从而实现动态修改Simulink中模块的参数。其中,set_param()函数中的Object是模型文件中需要修改的模块的名称,Name是该模块中需要修改的形参名称,Value是新的参数的值。当同一个模块需要修改多个形参时,可以使用一个set_param()命令和多个Name-Value实参组而不是多个set_param()命令,因此该命令具有很高的效率。

因为Python客户端无法直接调用Simulink的Scope模块中的仿真结果,因此需要将仿真结果转换成数组,然后Python读取数组内数据再绘制成波形图,此功能的过程如图9所示。set_param()命令将用户设置的模块参数、仿真时间和仿真开始的指令传递给Simulink,Simulink仿真进程结束后,仿真模型通过To Workspace模块将仿真结果输出到MATLAB的工作区(Workspace)中,并通过xlswrite()函数将数据写入到本地excel中,再由程序处理并绘制到平台中,该方式不仅能及时保存实验数据,还能随时查阅过往数据,有利于用户对数据的分析。

图9 仿真结果输出过程Fig.9 Simulation results output process

4 AMESim的Python API建模研究

AMESim是一种基于图形化设计[14],包含机械、液压、气动和信号等多学科复杂系统建模与仿真的平台。随着版本的迭代,AMESim提供了一套完整的API函数,可以允许高级语言(如Python、C++、VB等)与模型进行交互,包括建模、组线、设参、仿真、读取结果等一系列功能。其中包含了允许Python、C++、VB编程语言对液压控制系统进行编程建模的功能。通过Python建立模型的代码通用结构如图10所示,该结构共分为3个部分:初始化环境、控制系统的构建和完成建模并退出。

图10 液压系统建模流程Fig.10 Hydraulic system modeling flow

值得注意的是,AMESim中大多数元件都存在多个子模型,每个子模型对应着不同的特性,因此程序在添加元件后还应选择一个具体的子模型。将2个元件对应位置相互连接时,由于Python语言对序列的计算是从0开始的,因此,设置连接口序号时总是为实际序号值减1的值。例如,图10中AMEConnectTwoPortsWithLine(′pump01′,0,′tank01′,0,′hydraulic′,()),表示将名为“pump01”的液压泵1号端口和名为“tank01”的油箱1号端口用线连接起来。联合仿真时,机电液系统将使用Simulink中的仿真参数,AMESim中设置的仿真参数会失去作用。在编译模型前需要将AMESim编译器设置为Microsoft Visual C++ 2015 and higher。

5 建立联合仿真模型

文中的联合仿真实验以喷管的简易模型为例,设计出一个针对该模型的机电液联合仿真平台。喷管简易模型如图11所示,喷桶固定,通过并联的2个液压缸共同作用,调整喷嘴的位置。液压缸的压力输入由联合仿真系统中AMESim的输出提供,液压缸输出位移反馈给AMESim,二者的数据交换经Simulink平台互相传递,AMESim中的伺服阀控制由Simulink发出信号。

图11 ADAMS机械系统模型Fig.11 ADAMS mechanical system model

Simulink控制系统如图12所示,系统共分为五部分:期望输出、PID控制、Simulink和AMESim的接口文件AME2SLCoSim、Simulink和ADAMS的接口文件ADAMS_sub、仿真数组导出(实际模型软件接口中的变量均为英文,图中中文是为了方便理解)。其中,文中使用的期望输出为恒值,通过设定2个自由度的期望位移,与ADAMS机械模型输出的实时位移进行PID控制,输出的信号控制AMESim伺服阀的位置与开度。仿真数据通过To Workspace模块输出到MATLAB 工作区,输出的是不包含时间序列的同名一维数组,时间可用sim()函数单独获取。在此之前,需要用mex-setup将MATLAB的编译器切换成Microsoft Visual C++ 2015(c),和AMESim编译器保持一致。

图12 Simulink控制系统模型Fig.12 Simulink control system model

控制系统的联合仿真平台需要调整的参数名称和代码中变量名称如表1所示。

表1 变量名称Tab.1 List of variable names

联合仿真中AMESim液压子系统模型如图13所示(实际搭建模型时,所有接口模块的变量必须以英文表示,此处采用中文示意以方便理解),喷管模型由AMESim中的Hydraulic库搭建[15],伺服阀的开度由Simulink模型中的PID控制信号调节,液压缸通过力传感器输出无单位数值,通过AMESim和Simulink的数据接口传入,并直接作为ADAMS的输入量。

图13 AMESim液压控制系统模型Fig.13 AMESim hydraulic control system

图13所示的液压控制系统中联合仿真平台需要调整的参数和代码变量名称如表2所示,若存在多个相同元件,可在AMESim变量中查看每个元件变量的参数路径。

表2 液压系统变量Tab.2 List of hydraulic system variable

前面详细说明了ADAMS、Simulink、AMESim二次开发方式与原理,并给出了关键技术与参数代码,使得这3个软件同时具备了与利用第三方搭建的外部平台交互的能力,故还建立了以图11-13模型为基础的人机交互界面。

人机交互界面主要为用户提供直接交互功能,如图1所示,主要包括仿真配置设置、参数显示、用户操作按钮和数据显示等功能,根据表1-2中参数变量建立的各软件界面如图1所示。用户可通过对应按钮切换至不同软件的设置界面,每次修改参数后需更新,将设置值写入程序。仿真结果使用Python的绘图库Matplotlib,它不仅功能强大、用法简洁、可移植性强,还提供了面向对象绘图的API。当机电液联合仿真完成后,Simulink程序分别将位移变化数值和对应的时间序列写入同一个excel表中,之后Matplotlib读取表中数据,经处理后绘制折线图显示出来,平台将每一次仿真结果都保存在本地,可方便用户选择查看。

6 平台验证结果

通过对多软件二次开发的联合仿真平台进行机电液联合仿真实验,验证机电液虚拟实验的可行性和联合仿真分析平台的正确性。在联合仿真平台设置机电液控制系统的参数,设置X-Y液压缸和Y-Z液压缸的期望位移分别为300 mm和200 mm,并通过设置PID控制液压缸伺服阀的开度而调控液压缸位移,设置完所有参数并更新后,点击开始仿真按钮完成仿真。联合仿真平台输出的两液压缸实际位移如图14所示。

图14 实际位移Fig.14 Actual displacement:(a)X-Y hydraulic cylinder; (b)Y-Z hydraulic cylinder

分析图14可知:该控制系统能很好地复现理论的期望值,由于AMESim中液压缸元件存在死区容积,因此2个液压缸位移的实际值分别在299 mm和199 mm附近波动,误差均在2 mm以内。可知,开发的机电液联合仿真平台能很好地完成虚拟实验,验证了建立第三方机电液联合仿真管理平台的可行性,体现出该平台操作的简易性。

7 结论

通过对ADAMS、AMESim、MATLAB/Simulink仿真语言和底层接口的深入研究,以三者为基础,二次开发出可视化操作的机电液联合仿真分析平台。通过该平台可实现对3个软件的参数配置,有效解决了传统方式需要多次切换软件并手动寻找配置的问题,同时降低了操作门槛,提高了仿真效率。对平台各部分模块化的开发方式,使系统具有较低的耦合性,提高了仿真平台的稳定性。

由虚拟仿真实验结果可知:控制系统能很好地复现给定的期望位移,建立ADAMS、AMESim、Simulink机电液系统联合仿真分析平台的研究方法具有普遍适用性,对现实模型的实验具有一定的参考价值。

猜你喜欢

二次开发液压缸命令
只听主人的命令
冷轧双切剪液压缸螺栓断裂分析
一种基于液压缸负负载回油腔的调速控制系统
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
移防命令下达后
西门子Easy Screen对倒棱机床界面二次开发
这是人民的命令
液压缸维修技术
一种新型旋转直线组合式液压缸设计