基于C#与MATLAB 混合编程的管道缺陷类型识别实验系统软件开发

2020-09-28 09:19戴永寿
实验技术与管理 2020年5期
关键词:编程混合管道

万 勇,万 莉,戴永寿

(1.中国石油大学(华东) 海洋与空间信息学院,山东 青岛 266580;2.中国石油大学(华东) 后勤管理处,山东 青岛 266580)

油田的油气管道长期在复杂的环境下运行,会逐渐产生各种类型的缺陷,主要包括腐蚀缺陷和应力形变缺陷。腐蚀缺陷包括表面的均匀腐蚀、管道破损、穿孔等,该类缺陷对管道的危害更大;应力形变(管道弯曲)引起的缺陷是肉眼无法直接观测到的缺陷类型,也只一种不易察觉的管道运行安全隐患。开展油气管道腐蚀缺陷和应力集中缺陷的识别分类对于管道危险的预警和管道安全隐患的排查等都具有重要的意义[1-2]。

金属磁记忆技术最早是由Doubov 等[3-4]提出的。该技术最大的优势是能实现铁磁性材料损伤的不接触式检测。其基本工作原理如下:铁磁性材料的设备(例如油气管道)在应力形变和地磁场的作用下,会造成金属内部磁结构的变化,这种变化一般是不可逆的,一般会在有应力形变的位置产生漏磁场[5-8]。这种漏磁场带来的是磁场强度的变化,通过磁场强度的变化能发现缺陷,但是无法对缺陷的类型进行分类[9]。

MATLAB 是一种强大的计算和仿真软件,使用者可以利用较短的程序代码实现大规模的计算问题。但是,其人机交互界面的开发较为困难且所开发界面并不美观,难以满足实际工程需要。C#是一种面向对象的高级程序设计语言,其运行于.NET Framework 之上,在人机交互界面的开发过程中具有方便、简单、快捷等优点。然而C#的数学计算能力较差,编写数据分析模型较为困难。因此,运用C#和MATLAB 混合编程的方法,可以实现具有强大数学计算分析功能的人机交互界面的开发,利用C#进行界面操作,利用MATLAB 进行数学计算,将2 种软件的优点相结合,极大程度地提高了编程的效率。

在C#和MATLAB 混合编程的方法研究方面,姚光强等[10]研究了基于COM 技术的C#与MATLAB 混合编程的方法,COM 技术可以实现C#和MATLAB 的混合编程,提高编程效率。在运用C#和MATLAB 混合编程进行应用研究方面,卢兴等[11]运用 C#和MATLAB 混合编程开发了图像处理界面,马天璐等[12]将C#和MATLAB 混合编程应用在循环工业冷却水水质检测中,刘亚等[13]利用C#和MATLAB 混合编程开发了轴承故障诊断系统,王永涛等[14]利用 C#和MATLAB 混合编程的方法设计了一套灌区模糊灌溉控制系统,王士新等[15]将C#和MATLAB 混合编程应用于配电网断线检测中,许茂增等[16]利用 C#和MATLAB 混合编程设计了物流需求预测系统,以上研究均为本文所设计的系统提供了 参考。

因此,为了充分发挥磁记忆技术在管道缺陷检测方面的优势,解决磁记忆信号本身不能判断缺陷类型的问题,本文开发了一套基于C#与MATLAB 混合编程的管道缺陷类型识别软件。软件基于数学统计方法建立了管道缺陷识别模型,实现了对管道腐蚀缺陷和应力集中缺陷的有效识别。除此之外,软件还具有磁记忆信号文件的处理、信号成像、信号去噪和缺陷信号特征量计算等功能,方便用户进行管道缺陷检测工作,为管道缺陷检测研究提供了参考。

1 数学统计方法建模

与热门的机器学习分类方法相比,数学统计方法具有直观和所需数据样本少的优点,有助于快速直观地认识管道缺陷的数据特征。方法的基本建模思想是利用仿照油气输送管道制造的管道测试件的缺陷数据进行建模,先截取管道测试件缺陷位置的磁记忆数据,通过计算和分析腐蚀缺陷和应力集中缺陷的特征量,在多种特征量中找到可以有效区分2 类缺陷的特征量,即2 类缺陷在该种特征量上具有不同的阈值范围且阈值范围不相互交叉的特征量,然后统计这类特征量及其阈值范围,建立多特征量阈值统计模型,从而实现对两类缺陷的有效区分。

通过计算分析,选取部分通道的磁场强度平均值、最大值、最小值3 个特征量阈值组组成管道缺陷类型识别阈值统计模型,如表1 所示。

表1 管道缺陷类型识别阈值统计模型

2 C#与MATLAB 混合编程的实现

本文实现C#与MATLAB 混合编程的方式是将相关的 MATLAB 计算及成像函数封装成动态链接库DLL 文件,然后在C#编程时调用相应的DLL 文件,并添加引用。该方法可以脱离MATLAB 的安装环境,只需配置MATLAB 的运行环境。

本文以MATLAB2015 和Microsoft Visual Studio 2012 版本的软件为例,介绍实现C#与MATLAB 混合编程的过程。本过程包含3 个主要步骤,首先是编写MATLAB 计算函数并编译生成动态链接库DLL 文件,然后配置MATLAB 的运行环境,安装mcr 文件,最后在C#编程时添加引用DLL 文件并用程序代码调用相应的函数。

2.1 MATLAB 函数编译生成动态链接库

在MATLAB 中编写完管道磁记忆信号成像等函数之后,将其编译成动态链接库DLL 文件,在C#编程过程中进行调用,实现C#与MATLAB 的混合编程。

在MATLAB 命令窗口输入deploytool 命令,弹出图 1 中的编译器类型选择对话框。选择 LibraryCompiler,弹出如图2 中的动态链接库编译窗口。在编译窗口左上角的“TYPE”文本框中选择.NET Assembly,添加需要打包的.m 函数文件,右上角勾选Runtime included in package,点击右侧Package 打包,直到出现提示打包成功的对话框,说明.m 文件已经成功地被编译成动态链接库。打包成功后出现下图3 中的4 个文件,打开for_redistribution 文件,选择_mcr文件打开并进行安装[17]。

图1 编译器类型选择对话框图

图2 动态链接库编译窗口

图3 动态链接库文件

图4 _mcr 文件

2.2 C#编程调用动态链接库

打开Microsoft Visual Studio 2012,新建C#项目,选择Windows 窗体应用程序,建立项目。同时添加using,代码如下:

using MathWorks.MATLAB.NET.Arrays;

using 文件名;

然后添加引用,在项目上方的菜单栏中点击项目-添加引用。把打包文件中的for_Testing 中的动态链接库DLL 文件放进引用中,同时添加引用MWArray.dll。MWArray.dll 在 MATLAB2015 安装路径下的toolboxdotnetbuilderinwin64v2.0 中。最后点击生成-配置管理器,将活动解决方案平台设为X64,对应电脑的64 位处理器,这样就完成了添加引用和工程配置。

在C#编程调用MATLAB 函数功能时,需要根据传参的格式类型选择相应的程序语句。其通用格式代码为:

(1)参数赋值代码MWArray x=;

(2)定义类代码Class1 aa = new Class();

(3)调用MATLAB 函数代码aa.qqq(x),其中qqq为函数名。

图5 C#窗体程序添加函数引用

图6 C#配置管理器

3 软件的功能介绍

本文设计并开发的基于C#与MATLAB 混合编程的管道缺陷类型识别软件共包括5 个功能模块,各模块的名称以及实现的功能如图7 所示。

图7 埋地金属管道金属磁记忆缺陷识别软件系统

3.1 现场数据采集与算法验证性实验处理模块

现场数据采集与算法验证性实验处理模块的主要功能包括录入和管理实验报告文件,管理管道缺陷的TXT 格式数据以及选择数据文件进行MATLAB 成像显示等。

以模块的管理实验数据文件功能为例进行展示,如图8 所示。使用者选择一个文件夹,显示该文件夹下的所有实验数据文件,可以选择其中一个实验数据文件显示其具体内容并调用MATLAB 进行画图并显示。

3.2 埋地管道应力集中与漏磁场关系仿真模块

埋地管道应力集中与漏磁场关系仿真模块的主要功能包括:介绍磁偶极子仿真模型原理,计算检测点的磁感应强度及其切向分量和法向分量,绘制管道检测过程中磁感应强度的变化图像,等等。

以模块的磁偶极子模型仿真成像功能为例进行展示,如图9 所示。使用者可以模拟检测点的坐标范围,调用MATLAB 计算检测点的磁感应强度,并用图像显示磁感应强度大小和检测点的关系。

3.3 管道磁记忆信号去噪及数据预处理模块

管道磁记忆信号去噪及数据预处理模块的主要功能包括:对管道磁记忆信号进行去噪、保存和去噪图像的显示,计算、保存和显示管道磁记忆信号磁场梯度值,计算、保存与显示管道磁记忆信号磁场倾角值,等等。

以模块的磁场梯度值计算与保存功能为例进行展示,如图10 所示。使用者可以选择计算和保存管道数据某一通道的磁场梯度值并以图像的形式显示计算结果。

3.4 管道缺陷磁记忆信号特征提取及识别及模块

管道缺陷磁记忆信号特征提取及识别模块的主要功能包括截取管道磁记忆信号的某一缺陷段数据进行成像显示,判断该段缺陷的缺陷类型,修改数学统计识别模型的阈值范围等。

图8 调用MATLAB 图像操作界面

图9 漏磁场大小与检测点关系仿真结果图像

图10 磁场梯度计算与保存界面

图11 为管道缺陷类型识别功能,该功能应用本文建立的的数学统计方法进行缺陷识别,可以先选择和截取某个管道磁记忆信号文件的某一缺陷段数据进行成像显示,并判断该段缺陷的缺陷类型,给出判别结果。

同时,利用本模块验证本文应用数学统计方法所建模型的实际应用效果,选择实际油田现场的48 组管道缺陷数据进行验证,模型的缺陷类型识别结果如表2所示。

由以上结果可见,在很多干扰因素的油田现场环境下,模型对管道缺陷类型的总正确识别率达到了77%,正确识别率较高,数学统计方法可以有效地应用于管道缺陷类型的识别。

管道缺陷类型识别及报告一体化处理模块在管道缺陷磁记忆信号特征提取及识别模块的基础上,增加了保存缺陷识别结果,生成缺陷类型检测报告功能,这里不再进行赘述。

图11 管道缺陷类型识别界面

表2 油田现场管道缺陷类型识别模型验证结果

4 结语

本文设计并开发了基于C#与MATLAB 混合编程的管道缺陷类型识别软件,实现了对管道缺陷的有效识别,充分利用了MATLAB 强大的计算功能和C#良好的面向用户界面开发功能,弥补了MATLAB 界面开发功能不足和C#计算能力不强、代码冗长复杂的缺点。方便用户进行数据计算、信号成像及管道缺陷识别等操作,具有较高的使用价值。

猜你喜欢
编程混合管道
混合宅
编程,是一种态度
元征X-431实测:奔驰发动机编程
接好煤改气“最后一米”管道
编程小能手
一起来学习“混合运算”
纺织机上诞生的编程
粗氢管道腐蚀与腐蚀控制
混合所有制
MARK VIe控制系统在西气东输管道上的应用与维护