于 浩 劉寶華
(燕山大學機械電子工程系 河北 秦皇島 066004)
軋機剛度是指軋機在軋制過程中機架所能承受軋制力的最大限度[1],是反映軋機在工作狀態下抵抗變形的能力[2]。計算剛度的數據來源于軋機輥縫標定過程。鋼廠人員通過分析軋機的剛度數據,可以及時找到生產線由于處于長期工作狀態下所造成的故障隱患,從而避免引發安全事故。當下,我國軋鋼廠軋機剛度的研究主要集中在兩個方面。一是計算剛度的方式。目前軋鋼廠采用人工計算的方式得到剛度數據。首先,通過軋鋼廠數據機房中的PDA軟件導出軋機所連接的壓力與位移傳感器在輥縫標定過程中所測得的數據。然后通過Excel軟件進行人工線性擬合得到剛度值。手工計算方式的問題主要體現為:純手工、耗時長、誤差大。二是剛度的精度。計算軋機剛度的數據來自于軋機所連接的壓力與位移傳感器。由于軋鋼廠的環境因素,傳感器的采樣信號經常會受到現場各種噪聲的污染與干擾,對于剛度的精度具有一定的影響。綜上所述,如何實現輥縫標定數據的自動化采集與計算并提高剛度精度是目前面臨的主要問題。
隨著工業4.0的穩步推進,我國工業控制系統亟需邁向更高的臺階。OPC技術在軋鋼廠中的應用解決了不同的總線標準帶來的數據訪問困難的問題,可以將不同的軟硬件接口按照統一的工業接口規范統一起來,實現了無須重復開發硬件驅動即可采用統一方式對不同種類硬件進行數據存取[3]。PDA是德國iba公司開發的一款高速實時采集數據軟件,在我國軋鋼廠得到普遍應用,解決了重要數據的高速采集及存儲問題。通過利用PDA軟件中的OPC服務器接口,可以實現軋機輥縫標定過程數據的自動化采集與計算。OPC服務器接口分為兩種:OPC DA與OPC UA。我國的軋鋼廠存在著多操作系統交叉共同作業的現狀,而OPC DA是基于微軟的COM/DCOM技術下的產物,并不支持跨平臺,因此需要采用一種支持跨平臺的技術實現數據的采集與處理。OPC UA是OPC基金會2008年發布的新規范,在功能上繼承了OPC DA的所有功能,并且支持跨平臺,在安全性方面它可以通過電腦的任意端口進行通信,將不受電腦防火墻的攔截。文章設計的數據采集系統以open62541庫為依賴,搭建了OPC UA客戶端軟件,實現與PDA軟件OPC服務器之間的數據交互,自動化采集與計算輥縫標定過程數據[4]。
輥縫標定過程數據并不能直接用于剛度的計算。OPC服務器中的數據來自于與軋機相連的傳感器。傳感器在惡劣環境下工作會受到熱噪聲、晶體管噪聲、低頻噪聲等影響。這對于剛度的計算工作具有一定的影響[5]。根據對傳感器的波形數據分析,對數據采集系統采集到軋機輥縫標定過程數據進行降噪處理。考慮到Linux-Ubuntu的運行平臺以及Python強大的數據處理能力,數據采集系統通過Qt調用Python腳本的方式對數據進行小波分析降噪處理,最終達到提高軋機剛度的目的。
數據采集系統硬件環境主要基于四部分:壓力與位置傳感器、PDA服務器、Linux系統環境下的嵌入式工控機,GPRS模塊。圖1所示為數據采集系統硬件框圖。

圖1 數據采集系統流程框圖
1) 壓力與位置傳感器:壓力傳感器主要采集輥縫標定過程中兩個軋輥壓下的壓力大小。位置傳感器與液壓缸中的標尺相連,采集標定過程中軋輥的位置信息。
2) PDA服務器:PDA服務器實時顯示與存儲壓力與位置傳感器采集的數值。數據保存格式被加密,因此只能依賴專用的PDA軟件解析歷史數據。PDA服務器中集成了OPC服務器,實時記錄傳感器中的數值。
3) Linux系統環境下的嵌入式工控機:工控機采用Exynos 4 Quad(Exynos 4412)處理器,搭建了Linux-Ubuntu系統,主要擁有六個接口:搭配LVDS-HDMI接口可以與HDMI接口的高清顯示器連接、通過RS232串口可以連接GPRS模塊發送剛度數據、電源接口可以給核心板提供電源功耗,相比臺式計算機功耗大大減少、USB接口可以外接鼠標與鍵盤,方便工廠人員實時查看相關信息、TF卡接口可以擴展工控機內存,方便增加數據存儲容量、GPIO接口(通用I/O端口)方便CPU直接控制簡單的外部設備。
數據采集系統通過open62541庫實現與軋鋼廠PDA軟件上OPC服務器的連接,實現采集輥縫標定過程數據的功能。通過小波分析中的小波閾值去噪實現對采集到數據的降噪處理,最終計算出軋機剛度。
由于數據采集軟件需要在Linux-Ubuntu操作系統上運行,因此選取具有跨平臺特性的Qt軟件作為開發工具。課題在Linux環境下安裝Qt SDK作為Qt類庫工具箱,在Windows環境下進行源代碼編寫后移植到Linux環境下運行[6]。Qt開發與編譯框架如圖2所示。

圖2 Qt開發與編譯框架
數據采集系統運用到的Qt主要關鍵技術:
1) 信號與槽的機制:信號與槽由元對象系統實現,需要在項目工程文件中添加Qt Core模塊。信號與槽繼承于基類QObject,在子類的入口處必須聲明O_OBJECT宏。信號與槽機制包含兩個主要的函數:信號函數(signals)和槽函數(slots)。信號與槽均需要在子類中聲明,分別用Q_SIGNALS和Q_SLOTS表示。信號不僅可以與槽,還可以和信號實現信息交互,兩者通過connect()函數實現連接過程[7]。
2) Qt繪制系統:Qt5相較于Qt4版本做了很大改動。其中最大的改動在于模塊的庫的定義。在Qt4的版本中Qt GUI包含了用戶界面設計的所有庫函數。Qt5版本重新定義了新的模塊Qt Widgets,其Qt Gui模塊不再包含界面有關的所有類。
3) 事件:事件是Qt的核心組件之一,區別于信號。信號是由對象產生的,而事件大多是由底層的事務產生。事件不同于信號的另一個重要區別在于事件是異步的,可以進行忽略,而信號的使用必然伴隨著槽函數的使用[8]。事件的傳遞框架如圖3所示。

圖3 Qt事件的傳遞框架
OPC UA是OPC基金會于2008年提出的新一代OPC通信技術規范,經過數年不斷地發展與完善,儼然已經成為工業數據應用領域的一把利劍。目前市面已知的OPC UA SDK都是收費的,open62541基于OPC基金會發布的IEC 62541(OPC統一體系結構標準),是一款由C99和C++98編寫的通用庫。open62541在MPL(Mozilla Public License)協議下獲得許可,因此它是完全免費的。OPC UA開發者可以自由引用open62541庫并編譯成適用于任何平臺的項目文件。本文將open62541庫編譯到Linux-Ubuntu平臺,實現與OPC服務器的通信。
2019年3月,以“融合的工業-工業智能”為主題的漢諾威工業博覽會上,open62541庫的出版商發布了OPC UA的實時Pub/Sub(訂閱/發布)功能,為工業數據信息化發展提供了強大的助力。數據采集系統基于Pub/Sub實現了輥縫標定過程數據的實時采集。
open62541庫可以實現OPC UA發布的所有功能,主要有:查詢OPC UA服務器、客戶端與服務器的連接、瀏覽地址空間與節點、數據訂閱等功能。出版商發布了open62541(V1.1.0)手冊供開發者查詢去實現上述功能。open62541庫的功能框圖如圖4所示。

圖4 open62541功能框圖
OPC UA客戶端實現了查詢OPC UA服務器、客戶端與服務器的連接、瀏覽地址空間與節點、數據訂閱、小波分析去噪處理、軋機剛度計算等功能。OPC UA客戶端的數據訂閱基于open62541庫的Pub/Sub功能,可以實時訂閱處于服務器上的節點值。軋機輥縫標定完成后,數據采集系統對采集到的數據進行去噪處理,去噪完成后通過將壓力值與位置值線性擬合計算出軋機剛度。
OPC UA客戶端與服務器的連接基于open62541庫來實現。在Github開源平臺上下載open62541庫源碼后需要通過CMake編譯工具將其編譯為適合于Linux-Ubuntu的庫文件,在Qt軟件中調用庫文件實現OPC UA客戶端與服務器之間的通信。
軋機輥縫數據采集軟件首先需要與軋鋼廠OPC UA服務器連接,根據IP地址、用戶名、密碼獲取到目標平臺上的服務器目錄。程序將目標平臺上的服務器以列表的形式展示給用戶,用戶根據命名空間與標志位識別需要檢測的數據項。數據采集系統的OPC UA客戶端采用了open62541的查找功能塊,在程序中通過設置超時時間進行限制查找過程所耗費的時間。客戶端使用了查找模塊中的Findservers和GetEndpoint函數服務,前者用來查找目標IP的服務器,后者用來搜尋服務器的根節點[9]。圖5所示為客戶端與服務器之間的連接過程框圖。

圖5 OPC UA連接過程框圖
數據采集軟件中的OPC UA客戶端通過目標服務器的IP、用戶名、密碼實現與OPC UA服務器的連接。代碼如下:
void clientUa::run()
{
//連接服務器。
UA_Client*client=UA_Client_new();
UA_ClientConfig_setDefault(UA_Client_getConfig(client));
//建立連接。
UA_StatusCode retval=UA_Client_connect(client,serverIP);
if (retval !=UA_STATUSCODE_GOOD)
{
UA_Client_delete(client);
qDebug()< } //打印連接信息。 emit Log(QString("<已連接>")); //讀取指定節點的值。 UA_Int32 value=0; UA_Variant*val=UA_Variant_new(); retval=UA_Client_readValueAttribute(client, UA_NODEID_STRING(2,"the.answer"),val); //轉換數據格式。 if(retval==UA_STATUSCODE_GOOD && UA_Variant_isScalar(val) && val->type== &UA_TYPES[UA_TYPES_INT32]) { value=*(UA_Int32*)val->data; emit Log(QString(value)); } //刪除數據緩存 UA_Variant_delete(val); …… } 數據采集軟件程序中的OPC UA客戶端與OPC UA服務器連接成功后,會查找該服務器下的節點信息,并將節點信息通過Qt特有的信號與槽機制發送到TableView控件上展示,方便用戶查詢節點信息。圖6所示為TableView控件顯示的服務器節點信息。 圖6 OPC UA服務器的節點信息 OPC基金會在2018年發布了OPC UA規范Part14,此規范定義了OPC UA的Pub/Sub(發布/訂閱)模式。Part14規范中的UA Pub/Sub支持四種傳輸模式:使用UDP廣播機制實現OPC UA的Pub/Sub、UADP消息直接在Internet上進行網上傳輸、通過MQTT,AMQP的消息代理進行消息的交互、利用TSN實現消息的交互。在open62541現階段上已經實現了OPC UA訂閱消息在UDP廣播機制的應用[10]。由于后三種傳輸方式還不成熟,OPC基金會目前只是處于試驗嘗試階段。圖7所示為訂閱關系框圖。 圖7 訂閱關系框圖 程序通過調用addMonitoredItemToVariable子函數先將需要監控的子節點告訴服務器,然后通過不斷刷新調用回調函數接受服務器傳回的子節點的值。通過回調子函數可以設置訂閱項目的間隔以及訂閱節點的優先級。訂閱間隔表示服務器向客戶端發送數據的頻率。節點的優先級可以保證傳輸有效的節點數據。子函數關鍵代碼如下: void addMonitoredItemToVariable(UA_Client*client, UA_NodeId*target1, UA_NodeId*target2,UA_NodeId*target3, UA_NodeId*target4,UA_NodeId *target5,UA_NodeId*target6) { #ifdef UA_ENABLE_SUBSCRIPTIONS //創建一個訂閱。 UA_CreateSubscriptionRequest request= UA_CreateSubscriptionRequest_default(); //設置訂閱間隔。 request.requestedPublishingInterval=10; //設置訂閱優先級。 request.priority=255; UA_CreateSubscriptionResponse response= UA_Client_Subscriptions_create(client,request, NULL,NULL,NULL); UA_UInt32 subId=response.subscriptionId; //向服務器寫入日志信息。 if(response.responseHeader.serviceResult== UA_STATUSCODE_GOOD) { UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_CLIENT, "Create subscription succeeded, id %u
", subId); } …… } 客戶端連接上服務器后,會自行查找服務器中所包含的節點,進而讀取節點所包含的數據。圖8所示為數據采集系統主程序界面,展示了客戶端通過訂閱方式讀取的OPC UA服務器所包含節點的數值。 圖8 數據采集系統主程序界面 數據采集系統采集的數據是來自軋鋼現場的傳感器的信號,這種信號屬于時域上的信號,通過對時域信號的分析,我們很難得出有價值的信息。目前,被廣泛采用的去噪方法主要是傅里葉變換與小波閾值去噪的方法。小波閾值去噪是小波分析的一種。本文通過Python中的pyWavelet模塊實現利用小波分析對采集到的數據進行降噪處理。小波閾值去噪過程一般分為三步,如圖9所示。首先,用指定層數的小波基對原始信號進行分解。然后,選取合適的閾值計算規則對分解后的信號進行處理,通過閾值計算函數對各層系數進行迭代。最后,將分解后的信號進行重新組合,還原原始信號。 圖9 小波去噪過程 小波閾值去噪需要確定兩個參數:小波基與閾值計算方式。本節首先通過試驗44種小波基進行模擬去噪,通過對比信噪比與均方根誤差確定去噪效果最好的小波基函數。然后,通過傅里葉變換與小波閾值去噪的仿真對比確定閾值計算方式。最終將兩個確定好的參數應用于的數據采集系統中進行去噪。 采用Daubechies、Coiflets、Symlets小波基提取信號特征進行模擬消噪處理。具體由哪一種小波進行最終的數據去噪處理,需要對去噪效果進行對比。去噪效果可以用信噪比與均方根誤差兩個參數表現出來。信噪比計算公式為: (1) 式中:RSN表示原始信號中所包含外界干擾因素的強度,計算的值越大,表示所包含的有效信息占比越高。均方差誤差公式為: (2) 式中:RMSE反映了去噪結果的準確性,是衡量數據序列真實性的標準。如表1所示為選取的一系列小波基對采集到的數據信號消噪后的信噪比與均方根誤差。 表1 小波基函數試驗結果 續表1 通過對比上述實驗所得的信噪比與均方根誤差并結合經過小波基去噪處理后的數據曲線特征,選取db1小波基對原始數據進行去噪。 通過Python軟件中PyWavelets模塊的ecg方法導入其自帶的心電信號作為原始帶噪信號。分別通過傅里葉變換的FFT方法和小波閾值去噪方法對帶噪信號進行去噪后仿真對比。為了更好地突出去噪效果,去噪過程選取的小波基為db1,分解層數為5。圖10、圖11為基于小波閾值去噪與FFT的仿真結果。 圖10 基于小波去噪的仿真結果 圖11 基于FFT去噪的仿真結果 從以上實驗可以看出,小波閾值去噪方法相較于傅里葉變換的FFT方法對心電信號去噪處理效果更好,對含噪信號頻域中的突變成分進行了有效的處理。傅里葉變換的FFT方法在處理含噪信號中高頻突變成分時,將信號做了放大處理,沒有將噪聲信號完全剔除,因此去噪結果中依舊存在大量的噪聲信號。表2展示了小波閾值去噪利用不同閾值選取原則對采集到的軋機標定過程數據進行去噪所得的信噪比與均方根誤差。 表2 閾值試驗結果 由上表信噪比與均方根誤差可以看出,小波閾值去噪后所得信號的信噪比與均方根誤差要比傅里葉變換的FFT方法更有優勢。利用小波閾值去噪對信號進行去噪的過程中,極大極小閾值相較于其他閾值選取法具有更好的去噪效果。因此,文章采用極大極小閾值法對采集到的數據進行去噪處理。 如圖12所示為將db1小波基與極大極小閾值應用于的數據采集系統中進行小波閾值去噪的結果。如表3所示分別為基于FFT去噪與小波閾值去噪的信噪比與均方差誤差。 圖12 采集到的數據消噪前后對比 表3 閾值實驗結果 由圖12可以看出,染噪信號中的白噪聲與干擾信號已經基本被濾除。表3結果表明,小波閾值去噪的信噪比高于傅里葉變換去噪的39.5%,均方差誤差遠遠低于傅里葉變換。因此小波閾值去噪的方式達到了數據去噪的目的,可以有效提高軋機剛度的計算精度。 軋機輥縫標定過程數據采集系統不僅應該滿足現如今工業控制領域所需要的跨平臺發展現狀,還應該致力于對采集到的數據進行分析去噪。本文以Qt為主要開發對象的環境,采用面向對象的方式實現編程語言開發思想,利用開源的open62541庫開發可以在Linux系統上運行的OPC UA客戶端,設計了友好的監控頁面,實現了運行在非Windows平臺的OPC服務器與客戶端之間的對接。然后根據采集到數據的特征規律利用Python強大的數據處理能力篩選計算剛度的數據,并對其進行小波分析降噪處理,經仿真后達到了預期的降噪效果,為軋鋼廠工作人員計算剛度的方式與提高剛度的準確度提供了一條可借鑒的途徑。
3.3 數據訂閱


4 數據處理與仿真實驗
4.1 小波閾值去噪

4.2 小波基的選擇


4.3 閾值函數的選擇與仿真對比



4.4 結 論



5 結 語