張 騰,荊海剛
(浙江交工金筑交通建設(shè)有限公司,浙江杭州 310051)
傳統(tǒng)的自動倉儲系統(tǒng)通常采用自己的通信協(xié)議,而不同的現(xiàn)場設(shè)備監(jiān)控平臺難以實現(xiàn)數(shù)據(jù)共享,不能有效分析數(shù)據(jù),以提供全面的決策支持。應(yīng)用OPC通信技術(shù)可以解決異構(gòu)網(wǎng)絡(luò)之間的互聯(lián)問題,為系統(tǒng)中不同類型數(shù)據(jù)信息提供可靠的共享支持[1]。
OPC(OLE for Office Control)是OLE行業(yè)的過程控制標(biāo)準(zhǔn),由國際組織的OPC基金會管理。它定義了如何使用微軟操作系統(tǒng)在計算機之間進行數(shù)據(jù)的實時交換,旨在開發(fā)一種基于微軟COM、DCOM和ActiveX技術(shù)的互操作接口標(biāo)準(zhǔn)。它還提供了更廣泛的自動化控制、系統(tǒng)現(xiàn)場設(shè)備和辦公室的互操作能力。
本文以自動倉儲仿真系統(tǒng)為例,開發(fā)了基于OPC通信技術(shù)的系統(tǒng)監(jiān)控軟件。為保證監(jiān)控軟件正常運行,需要建立監(jiān)控軟件與PLC[2]控制器程序、現(xiàn)場設(shè)備的通訊。監(jiān)控軟件和PLC控制器程序通過OPC通信技術(shù)實現(xiàn)互聯(lián),采用C#語言開發(fā)程序接口,實現(xiàn)監(jiān)控軟件控制功能[3]。
自動倉儲系統(tǒng)的硬件設(shè)備包括工控機(IPC)、堆垛機、輸送帶、提升機、移栽機、貨叉、PLC控制柜等設(shè)備[4]。工控機用于支持監(jiān)控軟件的安裝,堆垛機用來存取貨物,貨物運輸采用輸送帶和提升機,移栽機是用來切換貨物運輸線路選擇[5]。PLC控制柜包括堆垛機PLC控制柜(從站)和現(xiàn)場設(shè)備PLC控制柜(主站)。堆垛機控制柜根據(jù)任務(wù)控制堆垛機的動作,主要涉及到橫向激光測距技術(shù)和縱向條碼掃描技術(shù),現(xiàn)場設(shè)備控制柜用于控制輸送帶、提升機、貨叉等電氣設(shè)備的工作??刂葡到y(tǒng)硬件設(shè)備框架如圖1所示。
圖1 控制系統(tǒng)硬件設(shè)備架構(gòu)
監(jiān)控軟件作為自動倉儲系統(tǒng)的核心控制部分,主要完成控制策略的調(diào)度、數(shù)據(jù)處理與計算、信息傳輸?shù)热蝿?wù)。它包括3個部分:數(shù)據(jù)庫、PLC控制、OPC通信程序接口。數(shù)據(jù)庫作為中間支持部分,主要用于支持PLC控制部分和系統(tǒng)數(shù)據(jù)處理的軟件運行,PLC控制用于調(diào)度現(xiàn)場設(shè)備的運行,實現(xiàn)數(shù)據(jù)采集、邏輯操作等任務(wù),OPC通信程序接口包括OPC服務(wù)器通信配置和計算機OPC服務(wù)器程序接口開發(fā)。
根據(jù)自動存儲系統(tǒng)的要求,將監(jiān)控軟件的設(shè)計概括為設(shè)備運行調(diào)度模塊、PLC控制模塊、程序接口模塊和數(shù)據(jù)庫信息處理4個主要支撐結(jié)構(gòu)的設(shè)計。監(jiān)控軟件設(shè)計框架如圖2所示。
圖2 監(jiān)控軟件設(shè)計架構(gòu)
因為程序接口的無縫連接,監(jiān)控軟件控制模塊可以有序的執(zhí)行任務(wù)。采用SIMATICNET和STEP7軟件搭建OPC服務(wù)器平臺[6],并使用C#開發(fā)OPC服務(wù)器接口程序,實現(xiàn)工控機與S7-300PLC的通訊[7],保證監(jiān)控軟件的設(shè)計和調(diào)試的順利進行。進而監(jiān)控軟件可以調(diào)度現(xiàn)場設(shè)備執(zhí)行任務(wù),并對各執(zhí)行設(shè)備的工作狀態(tài)進行實時監(jiān)控。
為建立OPC服務(wù)器與PLC之間的通信,必須配置OPC服務(wù)器。本文采用無線以太網(wǎng)實現(xiàn)工控機與PLC之間的通信,詳細(xì)介紹了OPC服務(wù)器配置及其OPC程序接口設(shè)計,所需軟件為STEP7 PLC軟件和SIMATICNET軟件,主要硬件設(shè)備包括工控機、西門子S7-300PLC、無線AP,配置方法如下。
(1)打開simatic net軟件—配置PC站點—添加OPC服務(wù)器—創(chuàng)建以太網(wǎng)(1)通信網(wǎng)絡(luò)—將IP地址設(shè)置為192.168.1.105→編譯并保存。
(2)打開Step7 PLC軟件,新建PLC控制器項目—配置以太網(wǎng)(1)通信網(wǎng)絡(luò)—設(shè)置IP地址192.168.1.102—下載到PLC控制器中。
(3)打開simatic net軟件的“站點配置編輯器”—單擊“導(dǎo)入站點”—在xdbs文件夾下找到xdb文件—導(dǎo)入,OPC服務(wù)器配置完成。
由于PLC是開放的,任何支持S7-300的設(shè)備都可以直接讀取PLC內(nèi)的數(shù)據(jù)。通過配置OPC服務(wù)器并使用C#開發(fā)OPC服務(wù)器程序接口,變量結(jié)構(gòu)由3個級別組成,如圖3所示。第一級是OPC服務(wù)器類型,服務(wù)器類型是opc.simaticNET;第二級是組,包含在服務(wù)器內(nèi)部,將所有相同的變量放入一個組中;第三級是項(item),即一系列變量鏈接到OPC服務(wù)器,對應(yīng)于PLC的I/Q等。
圖3 結(jié)構(gòu)變量
為實現(xiàn)監(jiān)控軟件與PLC的實時通訊與控制,需要開發(fā)OPC服務(wù)器接口程序。本文利用C#開發(fā)接口程序,主要步驟及程序代碼如下。
(1)聲明變量并列出主要變量
private OpcRcw.Da.IOPCServer ServerObj;
private Object GroupObj=null;
privateint pSvrGroupHandle=0;
private OpcRcw.Da.IOPCSyncIOIOPCSyncObj=null;
(2)創(chuàng)建一個opc服務(wù)器并建立到opc服務(wù)器的連接。opc服務(wù)器由函數(shù)public opc server()和函數(shù)public bool connect()創(chuàng)建,返回值用于顯示連接結(jié)果“true”表示連接成功,“false”表示連接失敗。
(3)將group添加到opc服務(wù)器中。opc服務(wù)器group對象由public bool addgroup()函數(shù)創(chuàng)建,并用返回值顯示結(jié)果“false”表示添加的組失敗,“true”表示添加的組成功。
(4)向group對象中添加項,即通過public bool add items()函數(shù)向服務(wù)器的group對象中添加多個項。
(5)數(shù)據(jù)同步讀寫程序由public bool syncwrite()和public bool syncread()變量值函數(shù)創(chuàng)建。
監(jiān)控軟件作為實時監(jiān)控客戶端,可對自動倉儲系統(tǒng)的工作狀態(tài)進行監(jiān)控,使操作人員能夠以更高的效率對系統(tǒng)進行維護和控制。監(jiān)控軟件界面如圖4所示。該軟件具有與數(shù)據(jù)庫、PLC、現(xiàn)場設(shè)備通訊切換功能、系統(tǒng)故障清除、系統(tǒng)工作模式切換、設(shè)備接口初始化等功能。其中初始化設(shè)備接口的功能是確?,F(xiàn)場設(shè)備的準(zhǔn)備工作,如輸送機接口、堆垛機接口、傳送帶接口等,以保證監(jiān)控軟件在接到任務(wù)后正常執(zhí)行,設(shè)備初始化接口程序代碼如下。
privatevoid
tsbInitDevice_Click(objectsender,EventArgs e)
{
if(ds.Tables[0].Rows.Count>0)
{
AddListSystemEvent;
foreach(DataRowrow in ds.Tables[0].Rows)
{
Stacker stk=new Stacker(this, row);
stackers.Add(row.ItemArray[0].ToString(), stk);
frm.Text=string.Format(stackers[row.ItemArray[0].
圖4 監(jiān)控軟件操作界面
ToString()].deviceId);this.Controls.Add(stackers
[row.ItemArray[0].ToString()].pic);
stackers[row.ItemArray[0].ToString()].pic.BringToFront();
stackers[row.ItemArray[0].ToString()].pic.DoubleClick=newSystem.EventHandler(this.pic_StackerDoubleClick);
}}
if(ds.Tables[0].Rows.Count>0)
{
AddListSystemEvent();
foreach(DataRowrow in ds.Tables[0].Rows)
{
cr=new Convyer(this, row);
convyers.Add(row.ItemArray[0].ToString(), cr);
圖5 堆垛機控制流程
frm.Text=string.Format(convyers[row.ItemArray[0].
ToString()].deviceId);
this.Controls.Add(convyers[row.ItemArray[0].ToString()].
pic); convyers[row.ItemArray[0].ToString()].pic.BringTo-
Front(); convyers[row.ItemArray[0].ToString()].pic.Dou
bleClick +=newSystem.EventHandler(this.pic_ConvyerDouble-
Click);
}}}
監(jiān)控軟件工作時,首先需要連接到數(shù)據(jù)庫和PLC,并初始化現(xiàn)場設(shè)備程序接口在線工作,其次需要使用堆垛機控制模塊來執(zhí)行下發(fā)的任務(wù)。利用監(jiān)控軟件對堆垛機控制模塊進行控制,實現(xiàn)對堆垛機的任務(wù)下發(fā)。在任務(wù)執(zhí)行過程中,可以從監(jiān)控軟件的圖像顯示區(qū)實時監(jiān)控系統(tǒng)的運行狀態(tài),若某個控制模塊出現(xiàn)故障,會出現(xiàn)紅色提示,以便快速找到故障發(fā)生位置并進行清除。堆垛機控制流程如圖5所示。
基于OPC通信技術(shù),使用C#語言開發(fā)了監(jiān)控軟件,為驗證系統(tǒng)中數(shù)據(jù)的實時傳輸效率,對各通信站點之間的數(shù)據(jù)傳輸響應(yīng)時間進行了測試與分析。
首先,必須正確配置通信站點的IP地址,其次,通過發(fā)送不同的數(shù)據(jù)包來進行數(shù)據(jù)傳輸響應(yīng)時間的采集和分析。選擇監(jiān)控計算機作為數(shù)據(jù)包發(fā)送站點,分別向管理計算機站點、主站點PLC、從站點堆垛機PLC發(fā)送不同類型的數(shù)據(jù)包。如表1所示,從監(jiān)控計算機到堆垛機PLC的數(shù)據(jù)傳輸平均響應(yīng)時間分別為5 ms和2 ms。結(jié)果表明,該系統(tǒng)可以實現(xiàn)站間數(shù)據(jù)傳輸。從采集到的響應(yīng)時間數(shù)據(jù)來看,自動存儲系統(tǒng)在無線網(wǎng)絡(luò)通信方式下,數(shù)據(jù)傳輸響應(yīng)時間保持在不同通信站點之間15 ms以內(nèi),能夠滿足系統(tǒng)通信要求。
表1 無線網(wǎng)絡(luò)模式下數(shù)據(jù)傳輸實時監(jiān)測
為進行比較分析,對有線以太網(wǎng)通信模式下的數(shù)據(jù)傳輸進行了測試,數(shù)據(jù)傳輸響應(yīng)時間均小于1ms,如表2所示。雖然無線網(wǎng)絡(luò)通信的響應(yīng)時間明顯大于有線通信,但它仍然能夠滿足系統(tǒng)通信的要求,大大提高了系統(tǒng)的靈活性和可擴展性。
表2 有限網(wǎng)絡(luò)模式下數(shù)據(jù)傳輸實時監(jiān)測
需要注意的是,在自動倉儲系統(tǒng)傳輸距離越來越長的情況下,為保證無線網(wǎng)絡(luò)通信和實時傳輸?shù)姆€(wěn)定性,可以采用增加無線中繼的方式,或者將無線AP安裝到更高的位置,同時盡量減少金屬貨架對無線信號的干擾。
本文研究了工控機與PLC控制器之間的通信方式,并開發(fā)了接口程序,闡述了監(jiān)控軟件的功能。OPC通信技術(shù)有效地解決了系統(tǒng)內(nèi)部異構(gòu)網(wǎng)絡(luò)之間的互聯(lián)問題。并使用C#開發(fā)了系統(tǒng)監(jiān)控軟件,該軟件已成功應(yīng)用于自動倉儲仿真系統(tǒng)。實驗表明,異構(gòu)網(wǎng)絡(luò)之間的連接是穩(wěn)定的,監(jiān)控軟件實現(xiàn)了對系統(tǒng)工作狀態(tài)的實時監(jiān)控,并能快速定位故障源,提高系統(tǒng)維護效率,為物流倉儲系統(tǒng)發(fā)展提供借鑒。