(交通運(yùn)輸部水運(yùn)科學(xué)研究院,北京 100088)原向東,亓 偉
原向東(1983-)男,碩士,現(xiàn)就職于交通運(yùn)輸部水運(yùn)科學(xué)研究所電氣自動(dòng)與通訊工程部,任研究實(shí)習(xí)員,主要從事港口碼頭自動(dòng)控制系統(tǒng)的開發(fā)研究工作。
摘要:OPC是一個(gè)通用的工業(yè)標(biāo)準(zhǔn),為多種多樣的自動(dòng)化控制設(shè)備之間進(jìn)行通訊提供了公用的接口。基于串口的OPC通訊在一些特定情況實(shí)際應(yīng)用中遇到了數(shù)據(jù)丟失的情況,為了解決基于串口的OPC通訊問題,提出了幾點(diǎn)建議,并在實(shí)際應(yīng)用中檢驗(yàn),滿足控制系統(tǒng)要求。
關(guān)鍵詞:OPC;串口;數(shù)據(jù)優(yōu)化
Abstract: The OPC is a general industrial standard,and provides a communal communication interface among kinds of automatic control devices. However,data loss may appear in some of its specific practical applications. In order to solve the serial port based communication problem, some ideas are presented and applied in the practical system, which can meet the basic requirements of the control system.
Key words: OPC; Serial Port; Data Optimization
OPC全稱是OLE for Process Control,是過程控制業(yè)的新興標(biāo)準(zhǔn),它的出現(xiàn)為基于Windows平臺的應(yīng)用程序和現(xiàn)場過程控制應(yīng)用建立了橋梁。OPC以O(shè)LE/COM/DCOM機(jī)制作為應(yīng)用程序級的通訊標(biāo)準(zhǔn),采用客戶/服務(wù)器模式,把開發(fā)訪問接口的任務(wù)放在硬件生產(chǎn)廠家或第三方廠家,以O(shè)PC服務(wù)器的形式提供給用戶,解決了軟、硬件廠商的矛盾,完成了系統(tǒng)的集成,提高了系統(tǒng)的開放性和可互操作性。目前,OPC通訊廣泛應(yīng)用于工業(yè)控制系統(tǒng)中。港口電氣控制系統(tǒng)也廣泛采用OPC通訊,使系統(tǒng)集成更加方便快捷。
OPC通訊一般基于工業(yè)以太網(wǎng)等速率較快的網(wǎng)絡(luò),在快速網(wǎng)絡(luò)中的通訊速度也比較快,實(shí)時(shí)性基本可以滿足要求[1]。但是在實(shí)際應(yīng)用中,有可能會(huì)出現(xiàn)通訊網(wǎng)絡(luò)接口采用串口的情況,由于串口速率相對比較低,在一些特定情況下,由此會(huì)導(dǎo)致出現(xiàn)OPC通訊故障的現(xiàn)象,例如讀寫數(shù)據(jù)出錯(cuò)。本文以實(shí)際港口工程中的一個(gè)通訊系統(tǒng)為例,淺析基于串口的OPC通訊問題,并提出幾點(diǎn)解決問題建議。
1 OPC通訊協(xié)議簡介
OPC通訊采用客戶服務(wù)器模型,建立了一套在硬件供應(yīng)商和軟件開發(fā)商之間相互遵循的標(biāo)準(zhǔn)。只要遵循這套標(biāo)準(zhǔn),數(shù)據(jù)交換對于硬件和軟件雙方來說都是透明的,硬件供應(yīng)商無需考慮應(yīng)用程序的多種需求和傳輸協(xié)議,軟件開發(fā)商也無需了解硬件的實(shí)質(zhì)和操作過程。不管現(xiàn)場設(shè)備以何種方式存在,客戶端都以統(tǒng)一的方式去訪問,從而保證軟件客戶端的透明性,使得用戶完全從底層的開發(fā)中脫離出來[2]。下圖描述了使用OPC技術(shù)后,工業(yè)系統(tǒng)的開發(fā)過程。
圖1 基于OPC客戶/服務(wù)器模型的工業(yè)控制系統(tǒng)結(jié)構(gòu)圖
2 基于串口的OPC通訊
本文以某港口實(shí)際工程中的一個(gè)通訊系統(tǒng)為例,介紹在該工程中遇到的基于串口OPC通訊應(yīng)用過程中遇到的問題和解決方案。
該控制系統(tǒng)由上位監(jiān)控系統(tǒng)和下位現(xiàn)場控制系統(tǒng)組成。下位機(jī)采用AB 1769-L35CR PLC控制器及其相應(yīng)I/O模塊,與上位機(jī)聯(lián)系的通訊模塊是AB 1761-ENI-NET,該通訊模塊實(shí)現(xiàn)串口轉(zhuǎn)以太網(wǎng)功能。上位機(jī)監(jiān)控系統(tǒng)采用Cimplicity組態(tài)軟件6.0版本和AB RSLinx通訊軟件。上位機(jī)監(jiān)控系統(tǒng)主要由3臺計(jì)算機(jī)組成,通過以太網(wǎng)交換機(jī)連接到通訊模塊1761-ENI-NET,再經(jīng)過串口連接到PLC控制器通訊端口。整個(gè)控制系統(tǒng)的通訊網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。上位機(jī)與下位機(jī)控制器通過OPC通訊協(xié)議互相交換數(shù)據(jù)。
圖2 通訊網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)圖
該控制系統(tǒng)的通訊功能實(shí)現(xiàn)需要以下幾個(gè)步驟。首先,在上位計(jì)算機(jī)上安裝的RSLinx軟件中,配置相應(yīng)的OPC服務(wù)器,使其與下位機(jī)控制器相對應(yīng)。其次,在Cimplicity中定義一個(gè)端口(Ports),協(xié)議選擇OPC Client(OPC客戶),定義一個(gè)設(shè)備(Devices),選擇之前定義的OPC通訊端口,設(shè)置地址為“rslinx opc server”,Cimplicity會(huì)自動(dòng)找到與其通訊的控制器,具體操作如圖3所示。經(jīng)過上述相應(yīng)操作,上位機(jī)與下位機(jī)的OPC通訊系統(tǒng)已經(jīng)建立起來。
圖3 定義端口和設(shè)備示意圖
3 基于串口的OPC通訊問題的引出
該控制系統(tǒng)有兩個(gè)通訊接口:以太網(wǎng)口和串口,通過轉(zhuǎn)換模塊1761-ENI-NET實(shí)現(xiàn)連接。該轉(zhuǎn)換模塊兩端通訊速率有較大差別,以太網(wǎng)口的速率在100Mbps,而串口的通訊速率最高為幾十kbps。由此可見,整個(gè)系統(tǒng)通訊的瓶頸在串口。
在OP C通訊中,傳輸?shù)臄?shù)據(jù)包括變量的名稱、數(shù)值以及校驗(yàn)位等。對于變量名來說,一般一個(gè)變量名至少要包括3-7個(gè)字符,用以顯示變量的含義并區(qū)別于其他變量。而在數(shù)據(jù)傳輸中,變量名的一個(gè)字符要占據(jù)一個(gè)字節(jié)的數(shù)據(jù)量。這樣,變量名稱的傳輸要占據(jù)3-5個(gè)字節(jié)的數(shù)據(jù)量,甚至超過了真正所用數(shù)值所占用的數(shù)據(jù)量。該系統(tǒng)中所傳輸數(shù)值類型為BOOL型和DINT型。一個(gè)BOOL型數(shù)值傳輸所占數(shù)據(jù)量為1個(gè)字節(jié),一個(gè)DINT型數(shù)值傳輸所占數(shù)據(jù)量為4個(gè)字節(jié)。由此可見,當(dāng)所傳輸?shù)臄?shù)據(jù)增加時(shí),傳輸?shù)臄?shù)據(jù)量在成倍增大。
為了驗(yàn)證基于串口OPC通訊的穩(wěn)定性,對該通訊系統(tǒng)進(jìn)行試驗(yàn)。當(dāng)OPC通訊傳輸數(shù)據(jù)量很小時(shí),上位機(jī)監(jiān)控系統(tǒng)讀寫數(shù)據(jù)正常;當(dāng)系統(tǒng)傳輸?shù)臄?shù)據(jù)量逐漸增大時(shí),上位機(jī)監(jiān)控系統(tǒng)會(huì)偶爾出現(xiàn)寫數(shù)據(jù)失敗的現(xiàn)象;當(dāng)傳輸?shù)臄?shù)據(jù)量增大到一定值后,上位機(jī)監(jiān)控系統(tǒng)寫數(shù)據(jù)一直失敗,讀取數(shù)據(jù)也很慢。在該試驗(yàn)中,數(shù)據(jù)變量名統(tǒng)一為5個(gè)字符,所測得通訊數(shù)據(jù)量極限值為3810個(gè)字節(jié),超過此通訊數(shù)據(jù)量,通訊就會(huì)出現(xiàn)故障,上位機(jī)往下位機(jī)寫數(shù)據(jù)值失敗。在rslinx里的通訊事件記錄里可以查看到相應(yīng)故障。如圖4所示。
圖4 rslinx通訊事件記錄
由于通訊故障是傳輸?shù)臄?shù)據(jù)量增加引起的,而整個(gè)網(wǎng)絡(luò)的通訊瓶頸在于串口。因此,對該控制系統(tǒng)的串口設(shè)置進(jìn)行重新檢查,轉(zhuǎn)換模塊1761-ENI-NET的串口設(shè)置為與PLC控制器自適應(yīng),這樣,只需檢查PLC控制器的串口設(shè)置狀態(tài)即可。PLC控制器1769-L35CR的串口設(shè)置窗口如圖5所示,默認(rèn)狀態(tài)下通訊波特率為19.2kbps,通訊方式為無握手方式。該串口的波特率最高可設(shè)為38.4 kbps,通訊方式還有半雙工和全雙工兩種方式可以選擇。
針對本控制系統(tǒng)中通訊數(shù)據(jù)量大,且需要雙向傳輸?shù)奶攸c(diǎn),該串口應(yīng)設(shè)置為38.4kbps和全雙工方式。但是,將串口設(shè)置修改后,整個(gè)控制系統(tǒng)的通訊問題仍然存在。由于實(shí)際中工程的工期很緊,為了能盡快解決通訊問題,決定在軟件編制方面尋求解決的方法。
圖5 PLC控制器串口設(shè)置窗口
4 基于串口OPC通訊問題的解決方案
由以上分析可知,當(dāng)通訊傳輸?shù)臄?shù)據(jù)量減少到一定值后,基于串口的OPC通訊狀態(tài)即可恢復(fù)正常。因此,解決基于串口的OPC通訊問題,方法是在保證通訊信息完整的前提下,盡量減少通訊數(shù)據(jù)量。結(jié)合兩方面的考慮,嘗試采用通訊數(shù)據(jù)優(yōu)化的方法。
(1)數(shù)組優(yōu)化
OPC數(shù)據(jù)傳輸時(shí)要進(jìn)行數(shù)據(jù)打包。對于零散的數(shù)據(jù)要分別打包,這樣傳輸?shù)臅r(shí)候會(huì)占用額外的網(wǎng)絡(luò)資源。如果把數(shù)據(jù)分門別類,按類組建數(shù)組,OPC數(shù)據(jù)傳輸時(shí)數(shù)組數(shù)據(jù)是按整體打包,這樣占用網(wǎng)絡(luò)資源少。因此首先要做好數(shù)據(jù)規(guī)劃,盡量將數(shù)據(jù)分類,組成數(shù)組,提高通訊效率。
(2)BOOL型變量轉(zhuǎn)換
BOOL型變量占用1個(gè)字節(jié),所表示的數(shù)值為0或1,實(shí)際上采用用DINT型變量中的某一位也可以實(shí)現(xiàn)數(shù)據(jù)傳輸功能。32個(gè)BOOL型數(shù)據(jù)占用32個(gè)字節(jié),其所表示的含義用1個(gè)DINT型數(shù)據(jù)就可以代替,而1個(gè)DINT數(shù)據(jù)只占用4個(gè)字節(jié),占用資源大大減少。32個(gè)BOOL型數(shù)據(jù)占用32個(gè)變量名,轉(zhuǎn)換為1個(gè)DINT數(shù)據(jù)后只占用1個(gè)變量名,由變量名所占用的資源也將顯著減少。因此,可以將大量的BOOL數(shù)據(jù)先轉(zhuǎn)換成DINT數(shù)據(jù),再進(jìn)行傳輸,減少網(wǎng)絡(luò)資源占用。
(3)避免使用不兼容的數(shù)據(jù)
在應(yīng)用程序中采用的float 和int、 char和 varchar、 binary和barbinary相互之間是不兼容的,因此要保證上位機(jī)監(jiān)控軟件所用變量類型要和下位機(jī)的變量類型相一致。
(4)簡化通訊傳輸?shù)淖兞棵Q
在保證不影響變量名稱含義及識別的基礎(chǔ)上,變量名稱盡量縮短、簡化,以減少通訊的數(shù)據(jù)量。比如,變量名control在保證不影響識別的基礎(chǔ)上,可以縮寫為ctr,這樣,變量名減少了四個(gè)字符,數(shù)據(jù)傳輸量就減少了4個(gè)字節(jié),有效的減少了通訊的數(shù)據(jù)量。
經(jīng)過數(shù)據(jù)傳輸?shù)膬?yōu)化調(diào)整,整個(gè)系統(tǒng)的OP C通訊正常,達(dá)到了控制應(yīng)用要求。為了保證上位機(jī)監(jiān)控避免出現(xiàn)遺漏操作的現(xiàn)象,在上位機(jī)Cimplicity程序中編寫腳本,如果有通訊故障發(fā)生時(shí),彈出報(bào)警提示對話框,要求操作人員重新操作。腳本如下所示。
Sub OnMouseUp(x As Long, y As Long, flags As Long)
On Error GoTo errorhandle ‘通訊故障診斷
PointSet "KEY_S_NUMB1",&H00000000&
PointSet "KEY_S_NUMB2",&H00000000&
r%=answerbox("確定要啟動(dòng)電機(jī)?","確定","取消")
If r%=1 Then
PointSet "KEY_S_NUMB3",&H00080000&
PointSet "KEY_S_START",1
PointSet "KEY_S_START",0
End If
Exit Sub
errorhandle: ‘通訊故障處理
msgbox "出錯(cuò)!請重新操作!",ebOKOnly Or ebExclamation,
"提示框"
Exit Sub
End Sub
5 結(jié)語
經(jīng)工程實(shí)際應(yīng)用驗(yàn)證,通過采用上述幾種方法,基于串口的OPC通訊問題得到了有效的解決,可以滿足控制系統(tǒng)要求。OPC通訊已經(jīng)在工控行業(yè)中廣泛應(yīng)用[3],OPC通訊問題,尤其是OPC通訊數(shù)據(jù)優(yōu)化問題需要引起工控人員的注意,做好更進(jìn)一步的研究。
參考文獻(xiàn):
[1] 李宏宇. OPC技術(shù)在工控組態(tài)軟件中的研究及應(yīng)用[D]. 大連理工大學(xué),2005.
[2] 汪輝. OPC技術(shù)實(shí)現(xiàn)及應(yīng)用[D]. 合肥工業(yè)大學(xué),2003.
[3] 盧宏,汪金良,曾青云. 基于OPC技術(shù)的WinCC實(shí)時(shí)數(shù)據(jù)采集[J]. 自動(dòng)化博覽,2006,(8).
摘自《自動(dòng)化博覽》2010年第六期