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