蒋闯
摘 要:地质雷达法作为一种高效的无损检测手段,在隧道工程质量检测中得到了广泛的应用。数据采集时,为了准确定位缺陷,一般采用单标和双标结合的打标方式,而数据归一化时又需要将双标去掉。另外检测时行进速度的变化,会使图像在归一化后拉伸或者压缩,不利于缺陷识别。本文分析了劳雷地质雷达文件结构,利用C#语言开发了自动添加里程信息工具,工具可以在不做归一化的基础上给图像加上里程,取得了较好的应用效果。
关键词:地质雷达,归一化,里程标记
1 引言
地质雷达法是一种高准确率、快速、高效的无损检测手段,它克服了传统抽样检测方法效率低、代表性差和对原有结构有破坏等缺陷,因此在隧道衬砌混凝土厚度、密实性、钢筋分布检测中得到了广泛的应用。使用地质雷达法进行隧道衬砌质量检测时,一般采用连续扫描的方式,为了准确定位缺陷“检测规程”要求每5-10m有一个里程标记[1]。在实际检测中,技术人员一般5m打一个标,采用单标和双标结合的方法进行标记,即遇到里程号为50或100结尾时使用双标,其它情况使用单标,这样当标记缺失时,可以利用双标来确定缺少的标记所在范围,并且不会对后续标记产生影响。但是这样做会导致数据无法直接进行归一化,需要去掉双标,并且归一化后图像的拉伸和压缩也不利于缺陷识别。因此快速识别标记、添加里程信息不仅能提高工作效率,也可以保证数据的分析质量。
2 里程标记分析
2.1 DZX文件分析
劳雷地质雷达的原始文件为DZT文件,当打开DZT文件时,分析軟件会自动创建一个同名的DZX文件,DZX文件结构见图2-1 。DZX文件中的Waypt表示里程标记节点,scan表示当前标记所在的道数,mark表示当前标记类型。对比归一化前和归一化后的DZX文件后发现归一化后Waypt节点中多了distance参数,且distance内容为当前里程。因此只要我们在原始DZX文件中里程标记节点加入distance参数,并赋值为里程,则分析软件就可以显示出来。
2.2 里程分析
隧道检测雷达文件命名一般以里程的方式,如DK437+250-DK436+950GDZ.DZT,文件名中包含测线的起止里程,有了起止里程后就可以计算文件中应有的里程标记数量。以64道/每秒的扫描速度和3-5 km/h的行进速度为例,5m至少应有385个扫描道,因此当DZX文件中里程标记的扫描道相差小于200道时,可以判断为双标。
3 程序实现
3.1 C#简介
C#(读作“See Sharp”)是一种新式编程语言,开发人员利用 C# 能够生成在 .NET 生态系统中运行的多种安全可靠的应用程序。C#是由C和C++衍生出来的一种安全的、稳定的、简单的、优雅的面向对象编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言[2]。
3.2 计算标记里程
使用“正则表达式”对测线里程信息进行提取,例如检测文件名为“DK437+250-DK436+950GDZ.DZT”,使用Regex.Match(str, @"\w{0,}D\w{0,}K")来匹配里程冠号将得到“DK”,使用Regex.Match(str,@"\d{1,}\+\d{1,}(\.*\d*)\-\d{1,}\+\d{1,}(\.*\d*)")来匹配起讫里程将得到“234+300-234+600”。
然后使用Regex.Split(str, "-")方法对匹配到的大小里程进行分割,得到起止里程后使用循环计算每5m一个里程标记的里程。
3.3 写入里程标记
劳雷的DZX文件实质上是一个xml文件,使用.net自带System.Xml库对DZX文件进讲读写。使用以下代码读取DZX文件中的标记信息。
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmldoc.NameTable);
nsMgr.AddNamespace("DZX", "www.geophysical.com/DZX/1.02");
XmlNodeList WayPtnodelist = xmldoc.SelectNodes("//DZX:WayPt", nsMgr);
List<XmlnodeEX> usermaklist = new List<XmlnodeEX>();
XmlNode lastnode = WayPtnodelist[1].SelectSingleNode("DZX:scan", nsMgr);
usermaklist.Add(new XmlnodeEX() { Xmlnode = lastnode, Tag = "1" });
for (int i = 2; i < WayPtnodelist.Count; i++)
{
XmlNode node = WayPtnodelist[i];
XmlNode scannode = node.SelectSingleNode("DZX:scan", nsMgr);
XmlNode marknode = node.SelectSingleNode("DZX:mark", nsMgr);
if (marknode == null || scannode == null)
{
continue;
}
if (marknode.InnerText == "User")
{
double scans = double.Parse(scannode.InnerText);
double lastscans = double.Parse(lastnode.InnerText);
if (scans - lastscans < 200)
{
usermaklist.Add(new XmlnodeEX() { Xmlnode = scannode, Tag = "2"});
}
else
{
usermaklist.Add(new XmlnodeEX() { Xmlnode = scannode, Tag = "1" });
}
lastnode = scannode;
}
}
return usermaklist;
將读取到的标记数量与计算应有的标记数量对比,如不相符则说明有漏标或者多标情况,程序可以给予相应的提示,并结束。如对比无误,则利用如下代码将标记里程写入DZX文件。
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(file_ul);
XmlNode waynode = usermaklist[j].Xmlnode.ParentNode;
XmlElement distancenode = xmldoc.CreateElement("distance", waynode.NamespaceURI);
distancenode.InnerText = lc.ToString();
waynode.AppendChild(distancenode);
xmldoc.Save(file_ul);
4 应用及结论
4.1 应用案例
以某隧道拱顶测线为例,如下图4-1所示,使用分析工具对“DK437+250-DK436+950GDZ.DZX”文件进行分析,分析完成后工具下方信息框给出分析结果。使用官方数据处理软件打开DK437+250-DK436+950GDZ.DZT文件,找到里程标记,分析软件显示如图4-2 。从图中可以看出,点击任何标记,标记里程则会显示在下方表格中,方便技术人员整理里程标记和缺陷判释。
4.2 结论
在实际检测过程中因为现场情况复杂,采集人员经常因为各种原因会漏掉标记,造成标记混乱,无法判断漏标位置。当技术人员发现缺陷后,一般只能够通过数里程标记的方式来确定位置,这种方式不仅费时、费力,而且易错。另外“归一化”操作会对检测数据进行压缩或拉伸,如果数据采集时行进速度变化较大,则“归一化”会使图像产生较大的畸变,并且“归一化”操作不支持单双标的标记方式。
本工具的开发,可以帮助技术人员快速厘清标记,发现缺陷后能迅速定位,大大提高了工作效率。
参考文献
[1] TB 10223-2004,铁路隧道衬砌质量无损检测规程 [S]
[2]李凌. C#程序设计教程[M]. 辽宁大学出版社, 2013.