蔣闖
摘 要:地質雷達法作為一種高效的無損檢測手段,在隧道工程質量檢測中得到了廣泛的應用。數據采集時,為了準確定位缺陷,一般采用單標和雙標結合的打標方式,而數據歸一化時又需要將雙標去掉。另外檢測時行進速度的變化,會使圖像在歸一化后拉伸或者壓縮,不利于缺陷識別。本文分析了勞雷地質雷達文件結構,利用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("http://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.