高羅卿 莊源昌
(①常州輕工職業(yè)技術(shù)學(xué)院,江蘇常州213164;②中科院常州數(shù)控技術(shù)研究所,江蘇常州213164)
SIMATIC WINCC組態(tài)軟件是德國西門子公司的一款產(chǎn)品,屬于HMI/SCADA類型的軟件系統(tǒng),主要用于對工業(yè)控制過程中各類設(shè)備、標(biāo)簽、控制畫面等資源進(jìn)行配置和編輯,并且可以方便地處理事件報警和系統(tǒng)報警,完成各類報表的統(tǒng)計生成和打印,支持多種數(shù)據(jù)通訊驅(qū)動接口,方便各類設(shè)備的實時數(shù)據(jù)采集與歸檔,在工業(yè)生產(chǎn)中應(yīng)用極廣.
WINCC與PLC的通訊連接應(yīng)用比較常見,WINCC可以通過PROFIBUS、TCP/IP等協(xié)議與西門子PLC建立通訊,與不同品牌的PLC也可以通過MODBUS協(xié)議或者OPC協(xié)議進(jìn)行連接.但是WINCC與不同品牌的數(shù)控系統(tǒng)之間通訊,則由于廠商之間的協(xié)議不同,通常無法直接建立通訊連接.
一般現(xiàn)有的對數(shù)控系統(tǒng)的數(shù)據(jù)采集,多數(shù)都采用數(shù)控系統(tǒng)廠商所提供的專用數(shù)據(jù)采集軟件或者二次開發(fā)函數(shù)庫(例如FANUC的FOCAS函數(shù)庫),自行進(jìn)行二次開發(fā).有的工業(yè)場合也采用WINCC通過PLC與數(shù)控系統(tǒng)的PMC模塊進(jìn)行I/O之間的狀態(tài)變化來交互信息.然而,這些方法都無法使WINCC與FANUC系統(tǒng)之間進(jìn)行直接的數(shù)據(jù)通訊.
OPC技術(shù)的應(yīng)用為解決這一問題打開了一條通道,可以通過高級語言VB或C#編寫OPC客戶端程序,OPC客戶端程序通過FANUC公司提供的FOCAS函數(shù)庫采集數(shù)控系統(tǒng)狀態(tài)信息.同時,WINCC作為OPC的服務(wù)器,可以被OPC客戶端連接,并且遵循OPC協(xié)議,讀寫服務(wù)器上的FANUC系統(tǒng)緩沖數(shù)據(jù),從而實現(xiàn)WINCC與FANUC系統(tǒng)的數(shù)據(jù)通訊連接.
OPC協(xié)議是基于 Microsoft Windows技術(shù),使用COM/DCOM(分布式組件對象模型)在軟件組件之間交換數(shù)據(jù).OPC規(guī)范定義了客戶端和服務(wù)器、服務(wù)器和服務(wù)器之間的通訊接口,包括訪問實時數(shù)據(jù)、監(jiān)控報警和事件、訪問歷史數(shù)據(jù)等應(yīng)用.
OPC標(biāo)準(zhǔn)于1996年首次發(fā)布,最初的目標(biāo)是將PLC特定協(xié)議(MODBUS、PROFIBUS等)抽象成標(biāo)準(zhǔn)化接口,允許HMI系統(tǒng)通過OPC的協(xié)議對設(shè)備進(jìn)行讀與寫的操作,OPC協(xié)議標(biāo)準(zhǔn)僅限于Windows操作系統(tǒng),現(xiàn)在廣泛應(yīng)用在工業(yè)自動化、制造業(yè)、石油和天然氣、可再生能源和公共事業(yè)中.
系統(tǒng)主要通過WINCC后臺變量管理作為OPC的服務(wù)器,建立內(nèi)部變量及變量名稱,通過本地網(wǎng)絡(luò)與本機(jī)上的OPC客戶端軟件通訊,OPC客戶端軟件應(yīng)用FOCAS 1/2函數(shù)庫與FANUC機(jī)床通過以太網(wǎng)建立TCP連接,FANUC數(shù)控系統(tǒng)通過FOCAS接口,接受OPC客戶端的讀寫操作.如圖1所示.
OPC的服務(wù)器主要功能是提供通訊程序和數(shù)據(jù)存儲程序,通過OPC標(biāo)準(zhǔn)接口供其它軟件使用.OPC(DA 2.0)標(biāo)準(zhǔn)定義了兩個對象OPCServer和OPCGroup,OPCServer負(fù)責(zé) OPCGroup對象的管理、OPCItem屬性查詢、連接點管理、地址空間瀏覽等.OPCGroup對象負(fù)責(zé)管理數(shù)據(jù)項(Item),包括數(shù)據(jù)項的同步/異步訪問、添加刪除、屬性查詢等.
WINCC在軟件啟動的時候默認(rèn)開啟了OPC服務(wù)器功能,默認(rèn)的服務(wù)器名稱為“OPCServer.WinCC.1”,在變量管理中,建立OPC服務(wù)器的變量名,指定變量的數(shù)據(jù)類型及長度,如圖2所示,建立FanucAlarmstr變量,數(shù)據(jù)類型是文本變量8位字符集,支持UTF-8中字符集,在OPC客戶端中就可以尋找到該變量名,并讀寫該變量值.
OPC客戶端的主要任務(wù)是創(chuàng)建服務(wù)器對象、建立與服務(wù)器的連接、瀏覽OPC服務(wù)器、通過OPC接口讀寫數(shù)據(jù)、斷開連接等.
OPC的客戶端接口方式有很多種,主要有:(1)OPCNetAPI接口,需用OPCNetAPI.dll,OPCNetAPI.com.dll.(2)自動化接口,需用OPCDAAuto.dll.(3)自定義接口.使用C#語言開發(fā)時,一般采用自動化接口.
本項目的OPC客戶端程序的主要功能是隨WINCC軟件開機(jī)自啟動,啟動后分別枚舉本地的WINCC服務(wù)器和使用FOCAS接口連接FANUC機(jī)床,客戶端一直嘗試連接,直到兩部分都連接成功.具體流程圖如圖3所示.
連接上WINCC服務(wù)器后,OPC客戶端會自動遍歷服務(wù)器上的Item,尋找和加載要更新的變量,然后開啟一個定時器,按照固定的周期,不斷的將FANUC的數(shù)據(jù)緩沖區(qū)數(shù)據(jù)刷新到WINCC服務(wù)器對應(yīng)Item變量中,并接受服務(wù)器寫數(shù)據(jù)操作,更改緩沖區(qū)的數(shù)據(jù).
當(dāng)OPC客戶端連接上FANUC系統(tǒng)后,會返回正確的句柄,此時客戶端會開啟一個定時器,按照固定的周期,通過cnc_rdmacror函數(shù)批量地讀取機(jī)床的宏變量區(qū)數(shù)據(jù),通過cnc_rdalmmsg2函數(shù)批量地讀取機(jī)床的多種報警信息,同時檢查數(shù)據(jù)緩沖區(qū),判斷寫入FANUC系統(tǒng)數(shù)據(jù)區(qū)的數(shù)據(jù)有沒有改變,如果有改變,則通過cnc_wrmacro函數(shù)修改有變化的數(shù)據(jù)到FANUC系統(tǒng)宏變量區(qū).通過緩沖區(qū)的數(shù)據(jù)交換和FOCAS接口,實現(xiàn)WINCC對FANUC機(jī)床的信息采集和數(shù)值寫入功能.
工業(yè)應(yīng)用中與FANUC的系統(tǒng)連接一般有3種方式:(1)以太網(wǎng)方式,要求FANUC系統(tǒng)具備以太網(wǎng)功能,通過FOCAS開發(fā)軟件包開發(fā)數(shù)據(jù)采集軟件.(2)串口數(shù)據(jù)采集,在加工宏程序中加入FANUC的串口打印輸出指令將數(shù)據(jù)從串口輸出.但是輸出數(shù)據(jù)有限,操作方式、報警狀態(tài)、倍率信息等輸出比較困難.(3)PMC交互,通過IO電平狀態(tài)交互信息,只能交互簡單的點位狀態(tài)信息.
本文采用的系統(tǒng)是FANUC 0i-MD,系統(tǒng)默認(rèn)支持FOCAS網(wǎng)絡(luò)功能,采用FANUC提供的FOCAS 1/2函數(shù)庫編寫程序就可以與機(jī)床進(jìn)行網(wǎng)絡(luò)通訊.使用系統(tǒng)的FOCAS功能只需要對系統(tǒng)的IP地址和TCP的端口號進(jìn)行配置,如圖4所示,使IP地址與OPC客戶端所在主機(jī)在同一個網(wǎng)段內(nèi)就可以使用了.
OPC客戶端程序通過使用Focas 1/2函數(shù)庫接口函數(shù)與FANUC系統(tǒng)建立連接:
Focas1.cnc_allclibhndl3("192.168.0.100",8193,10,out Flibhndl);
連接成功返回EW_OK狀態(tài),表示與機(jī)床的網(wǎng)絡(luò)通訊連接成功.運行Focas 1/2函數(shù)庫需要兩個必不可少的鏈接庫 Fwlib32.dll和 fwlibe1.dll.其中Fwlib32.dll負(fù)責(zé)CNC/PMC數(shù)據(jù)讀寫接口,fwlibe1.dll負(fù)責(zé)網(wǎng)絡(luò)連接和TCP服務(wù)的接口.
針對FANUC 0i-MD系統(tǒng),讀取系統(tǒng)報警主要有cnc_rdalarm2和cnc_rdalmmsg2.其中cnc_rdalarm2的返回是數(shù)控機(jī)床報警號,cnc_rdalmmsg2的函數(shù)返回是數(shù)據(jù)結(jié)構(gòu)體Focas1.ODBALMMSG2,該結(jié)構(gòu)體可包含多條報警信息,每條報警信息包含報警號、報警類型、哪個軸報警、中文報警詳細(xì)信息等,可以同時了解同一時期系統(tǒng)的報警情況.函數(shù)應(yīng)用流程如圖5所示,讀取報警信息的函數(shù)體為:
Focas1.cnc_rdalmmsg2(Flibhndl,type,ref num,odbalmmsg2);
系統(tǒng)的任務(wù)是讀取5個系統(tǒng)宏變量(系統(tǒng)測量數(shù)據(jù)),宏變量地址為500~504,將數(shù)據(jù)顯示在WINCC的圖形顯示界面,并設(shè)置5個誤差參數(shù)變量到FANUC的系統(tǒng)宏變量中,宏變量的地址設(shè)定為505~509.同時采集系統(tǒng)的報警號和中文報警信息.
圖6是WINCC的圖形顯示狀態(tài):左邊是讀取FANUC系統(tǒng)宏變量500~504區(qū)間的機(jī)床測量值,右邊是需寫入到FANUC系統(tǒng)的誤差范圍值,下面是FANUC系統(tǒng)的報警號及此時的中文報警信息.
圖7是OPC采集客戶端的運行主界面,開機(jī)自動啟動到后臺運行,并自動地枚舉WINCC的服務(wù)器,連接上后加載WINCC服務(wù)器的Item,并將需要更新的變量加載到更新列表中,列表中顯示的是WINCC與FANUC系統(tǒng)交互過程中的中間數(shù)據(jù).
圖8是FANUC系統(tǒng)宏變量區(qū)數(shù)據(jù)及報警狀態(tài).其中500~504的數(shù)據(jù)是OPC客戶端傳遞給WINCC服務(wù)器的測量值.區(qū)間對應(yīng)的數(shù)據(jù)是WINCC界面設(shè)置,通過OPC客戶端寫入FANUC系統(tǒng)的,并且此時有急停報警顯示,實驗顯示OPC客戶端完成了WINCC與FANUC系統(tǒng)的網(wǎng)絡(luò)通訊,實現(xiàn)了信息讀取與數(shù)據(jù)寫入,滿足了現(xiàn)場的控制需求.
WINCC是使用最普遍的HMI組態(tài)軟件,FANUC是高檔數(shù)控系統(tǒng)中使用較多的數(shù)控系統(tǒng)之一,利用OPC的服務(wù)器與客戶端技術(shù),使用C#語言編寫OPC客戶端程序,調(diào)用FOCAS 1/2函數(shù)庫軟件網(wǎng)絡(luò)監(jiān)控FANUC數(shù)控系統(tǒng),可以實現(xiàn)WINCC軟件與FANUC機(jī)床的無縫對接,在實際工程應(yīng)用過程中有很大意義,可以快速地實現(xiàn)FANUC機(jī)床的網(wǎng)絡(luò)化狀態(tài)采集與控制.