李 芳, 王志臣, 邓 媞
1(机科发展科技股份有限公司, 北京 100044)
2(机械科学研究总院, 北京 100044)
换挡毂是汽车动力总成双离合变速器的核心零件,也是亟待实现国产化高质量批量生产的关键件, 如图1所示.其具有空间曲线换挡沟槽, 换挡毂沟槽线轮廓度是决定换挡性能的关键参数指标.此外, 线轮廓度是几何公差中应用最广泛而又难以测量和评定的项目.主要采用最小区域法对线轮廓度误差值进行评定, 即被测量线轮廓度要素的提取要素相对于理想线轮廓度要素的最大距离为最小.主要采用有循环迭代法与分割逼近法[1]、遗传算法[2,3]、粒子群搜索[4,5]、Fréchet距离[6]等多种算法实现.
图1 换挡毂工件
在换挡毂自动化检测仪器系统项目的实际开发部署过程中, 使用虚拟仪器LabView平台软件实现仪器控制与数据采集系统的设计.由于LabView在算法开发方面能力较弱, 直接开发线轮廓度评价算法难度大,不利于工程技术人员快速实现系统部署.因此, 如何快速开发算法并搭建软件是工程实践中所面临的一个重要问题.为了应对上述问题, 采用联合编程开发的方式,集成LabView、Matlab、.NET多种软件技术, 优势互补, 从而加速开发进程.
LabView是美国NI公司推出的创新软件产品, 提供了一种图形化编程方法, 可直观显示应用的各个方面, 包括硬件配置、测量数据和调试.这种可视化方法可让用户轻松集成测量硬件, 直观地表示复杂的逻辑,以及设计自定义工程用户界面.LabView以其数据采集和仪器控制两大独特的优势, 在测控、故障诊断、生产过程控制、自动化等领域得到了较为普遍的应用[7],但是LabView在处理大型数据, 复杂模型分析的时候就存在有自身的缺陷, 并且算法开发效率低[8].
Matlab是MathWorks推出的世界领先的科学计算语言和工具, 将适合迭代分析和设计过程的桌面环境与直接表达矩阵和数组运算的编程语言相结合, 语法结构简单、数学计算高效.Matlab包含有丰富并且经过专业开发、严格测试的函数基础和工具箱.其在数据分析、深度学习、信号处理、控制系统等领域发挥着重要作用[9-11].但其GUI涉及功能薄弱, 代码运行效率低[12].
.NET Framework是Microsoft开发的完全面向对象的软件框架, 主要由框架类库FCL (Framework Class Library)和公共语言运行时CLR (Common Language Runtime)两个重要组件构成..NET Framework提供了一个新的面向对象编程接口技术, 为众多高级语言的集成提供了一种可能, 极大地提高了软件开发的能力.
LabView与Matlab的联合编程将充分发挥两种软件独特的优势, 提高开发效率[13,14].本文通过将Matlab所开发的Fréchet距离线轮廓度算法经.NET技术编译成dll程序集, 并在LabView所开发的线轮廓平台中进行调用, 最终完成线轮廓度评价软件的开发.借助各软件的优势, 更加高效快速地实现了线轮廓度评价的工程应用目标, 并在所承担项目中得到了验证应用.
线轮廓度评价软件是涉及多种传感器于一体的测量分析软件.LabView具有强大硬件接口能力, 负责与外围设备的对接, 实现对伺服系统的运动控制、数据采集系统的信息采集以及搭建人机交互界面的目的.Matlab主要用于线轮廓度评价算法开发和测试, 编译成.NET程序集.在LabView所设计的主体软件结构中调用, 实现集成, 软件结构如图2所示.经过快速原型模型的测试与验证, 进而完成线轮廓度评价任务.
图2 线轮廓度评价软件结构
采用Matlab、LabView、.NET联合编程的方式,将优势取长补短地融合集成, 极大地提高了编程效率,并使得软件兼具有仪器控制、数据采集、数据分析、人机交互等特点.具体来说即利用LabView强大的仪器控制与界面开发能力加快软件主体架构设计; 利用数学编程软件Matlab强大的函数库, 减少编程代码量;两种软件通过.NET接口进行参数与指令传递, 使高级语言的集成成为可能, 在保证算法可靠性的情况下, 缩短了软件开发的周期, 降低了故障概率.
线轮廓度评价软件以LabView为主开发软件进行人机界面设计以及系统的集成.状态机模型是图形化语言程序设计中主要的软件结构, 通过对结构进行拓展和修改, 再嵌入系统测试的相关算法, 可以快速完成自动化系统测试, 缩短开发时间, 提高工作效率.
对于线轮廓度评价软件的开发, 考虑到软件的功能实现与维护, 主要采用了2种状态机结构.单线程采用JKI状态机结构, 2个VI+while+case+事件结构+移位寄存器+数据簇, 如图3所示.多线程采用生产者/消费者设计模式, while+条件结构+队列, 如图4所示.
图3 JKI状态机结构
图4 生产者/消费者设计模式
采用快速原型模型[15]作为联合编程算法开发模型, 根据线轮廓度的评价要求与相关算法的可行性进行需求分析, 构建线轮廓度评价算法原型并进行原型评估, 原型Matlab编程, LabView调用完成原型测试5个主要阶段.
在线轮廓度的评定中需要解决两个问题: 一是测量轮廓与理论轮廓的最佳对齐; 二是测量点与理论轮廓的最短距离.轮廓要素可以看作是一组点集, 对于点集的距离常用Hausdorff距离、Fréchet距离.但是由于Hausdorff距离没有考虑点的顺序, 局限性较大.因此选用Fréchet距离[6]作为线轮廓度评价方法.Fréchet距离在地图匹配[16], 生物信息学[17], 相似性度量[18]具有广泛应用.在计算轮廓度时, 采用离散Fréchet距离对轮廓度误差进行度量, 两轮廓线Fréchet距离如图5所示.
图5 两曲线 Fréchet距离
线轮廓度的评价算法以Fréchet距离为基础, 利用SIMENS NX从三维模型获取关键点XY坐标信息, 形成关键点型线; 由于采用探针接触式轮廓采集, 需进行探针半径补偿, 对关键点型线偏移, 形成关键点偏移型线; 由线轮廓度公差要求, 形成上下偏差线, 即理论边界区域, 得到满足公差要求的理论边界区域, 如图6所示: 计算整条轮廓线所有采样点与理论偏移型线的Fréchet距离, 最终得出线轮廓度.
图6 线轮廓度评价示意图
使用Matlab完成评价方法的编程工作, 编写主要函数, 其评价流程及代码如图7所示.
图7 线轮廓度评价流程与Matlab编程
线轮廓度评价主要函数的编写完成后即可进行编译工作..NET程序集的编译主要使用Matlab的Library Compiler工具箱完成.
在Matlab打开Library Compiler.在工具栏TYPE选项中选择.NET Assembly, 在EXPORTED FUNCTIONS选项中加载所要编译的5个重要函数, 在Library Name
栏中输人名称并选填其他内容, 也可修改类库名称等信息.在保存路径for_redistribution_files_only文件下的Profile.dll文件为在LabView中的调用的.NET程序集.
尽管生成的.NET程序集可以在未安装Matlab的计算机上应用, 但是对于.NET程序集中的类仍然需要Matlab基础函数的支持, 因此在计算机上需要安装Matlab Runtime, Matlab Runtime是一个独立的共享库,可以避免安装庞大的完整版Matlab应用程序, 降低计算机资源的浪费.
此外, 在Matlab中使用的数据格式为Matlab特有的MWArray类型, 这种类型在LabView中无法直接使用, 需要通过MWArray.dll文件进行数据格式的转化.
MWArray类充当了LabView与Matlab (Runtime)之间数据传递的桥梁.其类层次结构提供了使用Matlab Runtime创建和访问Matlab数据类型的接口.所有的类都派生自MWArray类, 每个派生类都映射到一个Matlab数据类型.数据转换类层次结构主要包括MWNumericarArray、MWLogicalArray、MWChar-Array、MWStructArray和MWCellArray.每个类都有属性和方法, 可用于查询类的各种属性, 如维度大小、元素大小和字段名等.通过MWArray的类属性接口,LabView可以将Matlab计算的数据从内存中解析显示, 直观地判断结论的正确性, 类层次结构使用方法如图8所示.
图8 二维数组解析VI程序框图
在LabView中使用.NET对象进行原型测试, 需要使用.NET CLR 4.0.使用CLR 4.0 LabView可以加载.NET CLR 4.0或较早版本的.NET程序集, 并且可以生成包含.NET函数的独立共享库、应用程序、打包项目库与.NET程序集.调用接口如图9所示.
图9 LabView.NET调用接口
由Matlab开发的线轮廓度评价算法函数均有多个输入和多个输出, 以solve_key_point为例, solve_key_point函数有2个输入, 8个输出.
[curve_out_1, curve_out_2, curve_out_3, curve_out_4, curve_out_5, curve_out_6, curve_out_7,curve_out_8]=solve_key_point(path, file_name);
关键点参数存储路径与型号两个输入参数经MWCharArray类构造器节点进行转换, 传递至solve_key_point调用节点, numArgsOut设置输出参数数量,solve_key_point函数计算结果可以通过调用子VI的方式进行二维数据解析, 其调用VI如图10所示.在实际的计算应用过程中, 过渡数据不建议进行解析, 可以提高程序运算执行效率.
图10 solve_key_point函数调用子VI程序框图
将线轮廓度联合编程子VI嵌入到主程序中完成线轮廓度的评价, 联合编程子VI如图11所示.子VI采用平铺式顺序结构设计, 顺序调用型线分类、曲线偏移、理论边界区域计算、线轮廓度评价等函数,根据实时采样点坐标信息, 计算理论轮廓与测量轮廓Fréchet距离, 最终得出线轮廓度值.
图11 线轮廓度联合编程子VI程序框图(局部)
线轮廓度评价软件主要由3部分组成, 分别是运动控制、数据采集、数据分析.以 LabView 2019为软件开发工具, 调用线轮廓度评价算法.NET程序集, 在Windows 环境下使用.运动控制与数据采集实现整个测量系统的信息输入和输出, 以及多传感器的实时数据采集, 控制界面前面板与数据采集程序框图如图12与图13所示.数据分析部分利用线轮廓度评价算法完成对测量数据的处理分析, 得到换挡毂换挡沟槽线轮廓度值.并在前面板中显示出边界区域, 理论轮廓, 采集轮廓, 清晰直观地判断出换挡毂工件轮廓加工的合格性, 并得出评价结果, 如图14所示.目前, 线轮廓度评价软件已在项目示范应用现场投入应用, 软件运行良好.
图12 控制界面(局部)
图13 数据采集程序框图(局部)
图14 线轮廓度评价结果
本文采用联合编程技术方式完成了换挡毂换挡沟槽轮廓的线轮廓度评价软件的开发工作.其核心部分就是通过LabView搭建主体软件, 并利用Matlab编写线轮廓度评价算法由LabView进行调用, 完成线轮廓度评价.同时, 通过软件验证, 证明了该联合编程方式的有效性和实际应用的可行性.Matlab和LabView都是主流的工程应用软件, 两者结合将会突破软件自身的局限性, 加速系统的开发进程, 更加高效快速的解决工程应用难题.