基于C++,Builder和MATLAB混合编程实现某丝驱动控制系统的力空间分析

2022-03-21 10:12:25 | 浏览次数:

摘要:某丝驱动控制系统,是当前机械研究中的新领域。目前在国内还停留在理论阶段,其难点在于确定6根丝控制下的机构其位置姿态与悬丝拉力大小之间的关系。本文采用C++ Builder和MATLAB混合编程的方式,利用MATLAB软件绘制出悬丝受力范围和目标物所能到达的空间范围,能直观的展示给用户。

关键词:丝驱动;控制系统;空间范围;C++ Builder;MATLAB

前言

与杆支撑并联机构相比,丝驱动机构具有结构简单、惯性小、平动工作空间大和运动速度快等特点。从20世纪90年代初至今,各国研究人员纷纷开展这方面的研究工作,并取得了一批瞩目的研究成果。

本研究基于丝驱动动机构的控制系统,通过采用C++Builder和MATLAB混合编程的方式实现机构在空间的活动范围以及在某空间位姿与悬丝拉力之间的关系的编程研究,具有相当重要的现实意义。

1C++ Builder与Matlab混合编程的方法

丝驱动的控制系统需要大量数据的传输和高精度计算。因此, 用C++ Builder 灵活高效的界面开发及数据库管理能力和Matlab 强大的计算功能进行有机的结合, 实现混合编程, 将极大地提高运行效率和可操作性。因此,在软件系统进行调试仿真时,我们采用C++ Builder与Matlab混合编程的方式来实现。

通过Matlab在后台进行数值计算与图形处理,将两者结合进行混合编程,可以直观的显示控制系统的力空间及位姿空间,也方便调试和仿真。

Matlab与C++ Builder接口实现有以下几种方案:

(1)基于COM技术,利用Matlab引擎(Engine),采用客户机/服务器(Client/Server)模式,实现与Matlab的交互。具体应用中,由Matlab作为ActiveX服务器在后台运行,而应用程序作为前端客户机通过Matlab引擎进行交互。应用程序将数据和命令信息通过引擎传送到Matlab环境进行处理,Matlab将处理后的结果通过引擎回送给应用程序。这种结合方式需要Matlab在后台运行,离不开Matlab环境。

(2)基于OLE技术,Matlab提供一个自动化对象(外部名称为Matlab.Application),应用程序通过创建一个Matlab OLE自动化对象来操纵Matlab,从而实现交互,这种方法同样离不开Matlab环境。

(3)利用Matlab C Math Library或Matlab C++Math Library调用Matlab函数或用Matlab的mcc编译器将Matlab的.m源文件翻译为.cpp的源文件,然后在C编译器中调用

(4)用Mideva将.m文件翻译为cpp代码,然后在C编译器中调用。

(5)按照Matcom的语法,在BCB中直接书写matlab语句。

其中,通过方法(1)、(2)生成的程序需要系统安装Matlab才能正常运行,而由方法(3)、(4)、(5)生成的程序则没有这样的要求,它能够以独立执行程序的形式运行,即使客户没有安装Matlab也可以运行。但是方法(3)不能利用Matlab中丰富的图形句柄处理函数,对于试验台软件系统来说,是不符合要求的。而方法(4)、(5)则支持大多数的Matlab语句,包括图形功能。因此,我们采用(4)、(5)相结合的方式,实现Matlab与C++ Builder的混合编程,对软件系统进行调试与仿真。

本文采用方法(4)中提到的第三方工具Matcom。Matcom(又称Mideva)是MathTools公司为Matlab开发的.m文件高效解释和调试IDE,它提供了Matlab中.m文件与其他高级语言的接口,可以将Matlab中.m文件翻译为C++源程序,并可以编译为.dll文件或脱离Matlab环境独立运行的可执行程序(.exe文件)。

具体的实现步骤如下:

(1)利用C++ Builder编写主程序和主界面。设计调用流程,实现调用方法,建立好与数据库的连接。

(2)利用Matlab编写.m文件的数值处理程序与图形绘制程序。

(3)启动Matcom,将编写的.m文件载入,选择Compile to exe功能,将载入的.m程序编译。在Matcom工作目录下的Release文件夹里能找到翻译为文件名.cpp、g_文件名.cpp以及文件名.h和文件名.exe的四个文件(如果Matcom的Configration菜单中选中Debug,则将这些文件输出在Matcom的工作目录下的Debug子目录下)。

(4)将Matcom安装目录下的lib文件夹里的MATLAB.h和v4500b.lib文件添加到C++ Builder对应的Include和lib目录里。这两个文件包含了Matlab中定义的类型原型、常量等,并且众多Matlab函数都由其实现。

(5)查看由步骤3生成的文件名.cpp和文件名.h文件,根据系统要求和实现功能作适当修改。

(6)将修改好的文件复制到C++ Builder的应用工程文件目录下,在需要加入这个程序的函数单元中添加#include “MATLAB.h”和#include“文件名.h”这两行代码,就可以进行编译了。

图1为C++ Builder与Matlab混合编程实现软件系统调试仿真的结构图:

2系统的可行空间和可控空间

可行工作空间指满足运动平台所受力平衡和力矩平衡,且各根丝具有正拉力值的所有运动目标物位姿的集合。

由于悬丝只能承受拉力而不能承受压力,所以丝驱动机构必须在一定的预紧力下工作,同时,由于悬丝材料的限制,只能承受一定的最大拉力,否则就会被拉断。假设悬丝的最小预紧力为fmin,悬丝能承受的最大拉力为fmax。那么,满足f ∈[fmin,fmax]的所有f (f ∈R+)是可接受力。

可控工作空间指运动平台承受力满足f ∈[fmin,fmax]的所有位姿的集合。可控工作空间,是在可行工作空间的基础上进行拉力范围限制。

从可行空间和可控空间的定义我们可以看出,可控空间是可行空间的一个子集,求解可行空间和可控空间的原理是相似的——通过力平衡方程,解得的结果中,取力为正的那部分解所对应的空间就是可行空间。而可控空间则是在可行空间中,取力满足最大拉力与预紧力之间值所对应的姿态空间。因此,在软件实现中,具体就变为求解力平衡方程的问题。

根据理论研究,丝驱动并联机构运动平台在某个位姿保持静止,必须满足如下力和力矩平衡方程:

JT F + FW = 0 (1)

式(1)是一个非齐次线性方程组,全部解F 可以写成

F=-J +TFw +Hλ,(λ∈Rm-n)(2)

当丝驱动机构满足矢量封闭原理时,对运动平台不同姿态,方程JT H=0在项目要求的姿态范围内,都能找到一个H(H>0 或H<0),无论H>0或H<0,总能通过改变λ的值,使得公式(2)的结果为正,也即总能找到一组全为正力F,使丝驱动并联机构满足力平衡。

由于悬丝承受的拉力有一个范围,如果不能找到适当的λ,使得力取值在悬丝承受的拉力范围内,就说明,在这个姿态下无法满足力平衡,也就是说,这个姿态无法达到。

根据试验台的技术指标,我们可以取一个稍大的范围包含试验台的要求范围。在计算中,我们可以取一个适当步长,从最小值开始,循环相加直到范围超过最大值停止。在姿态参数以特定步长循环中,嵌套一个力方程求解循环,当满足力为正时,说明这个姿态是可以达到的。可控空间是包含在可行空间内,两个空间的求解原理相同,在软件系统中,用户关心的是可控空间范围,因此,将求解可行空间中的力的适用范围取一个最大最小值,就可以解算出可控空间范围。

3C++Builder和MATLAB混合编程实现力和空间的状态图绘制

通过C++builder与matlab的混合编程,调用matlab绘制的图形,显示在软件系统中,用户可以查看感兴趣的参数变化曲线,并可以根据需要以指定格式保存在计算机中。下图为力变化曲线图子界面:

拉力以及速度变化曲线的界面显示与此类似。

3.1可行空间

由位姿参数计算得到各丝某一组拉力如下:

F=

662.9869

774.3719

831.2679

577.2788

430.6281

213.1511

调用可控空间图如图3所示:

图3可行空间图示(其中绿色区域为可行工作空间)

调用可控空间图如图4所示:

4总结

本研究将C++Builder强大软件系统开发能力与MATLAB强大的数据运算和处理能力结合起来,并尤其突出了MATLAB的图像显示功能,对悬丝控制系统的力和空间进行了仿真,仿真结果验证了理论数据,取得了很好的效果。本研究将控制系统中复杂的数据输出以图形化的方式显示,对类似系统的开发也具有一定的参考价值。

参考文献:

[1]郑亚青. 6自由度绳牵引并联机构的运动学参数标定[N].华侨大学学报,2006,4(27).

[2]刘雄伟,郑亚青.6自由度绳牵引并联机构的运动学分析[N].机械工程学报,2002,12(38).

[3]Cong Bang Pham, Guilin Yang, Song Huat Yeo. Dynamic analysis of cable-driven parallel mechanisms [C]// International Conference on Advanced Intelligent Mechatronics Monterey. California:[s. n.], 2005.

[4]范伟亮,杨景曙,赵义正.基于C++Builder与MATLAB混合编程的可视化仿真研究[J].现代计算机.2007(273):71-73.

[5]于红华,熊予莹,任斌,赵智昊.C++Builder与Matlab、Mideva接口编程及其实现光谱仪改造[J].电脑开发与应用, 2002,15(10):2-4.

[6]扈晓,任志良,李少慧.Matlab应用程序接口在C++Builder中的使用[J].软件技术.2002,21(1):33-35.

[7]乔宗立.一种在C++Builder环境中调用Matlab数据的方法[J].湖北汽车工业学院学报,2001,15(4):30-32.

推荐访问: 控制系统 混合 驱动 编程 分析

相关文章