趙增輝,馮 旭
(中國電子科技集團(tuán)公司第二研究所,山西 太原 030024)
隨著我國智能制造及物流倉儲的快速發(fā)展,設(shè)備之間的互聯(lián)互通、軟件平臺的系統(tǒng)集成,成為了制造業(yè)發(fā)展的一項(xiàng)關(guān)鍵問題[1]。自動化立體倉庫中的WCS、WMS、監(jiān)控系統(tǒng)和信息采集系統(tǒng)之間的無縫對接,以上幾大系統(tǒng)與外部上游ERP、SAP等系統(tǒng)的數(shù)據(jù)和指令交互,在智能倉儲物流領(lǐng)域有著非常重要的意義。
監(jiān)控系統(tǒng)承載著自動化立體倉庫的眾多可視化功能,是用戶針對設(shè)備參數(shù)進(jìn)行實(shí)時(shí)觀測的重要門戶?;贠PC UA協(xié)議的監(jiān)控系統(tǒng)具有更好的實(shí)時(shí)性、安全性和平臺兼容性,依托于其體系架構(gòu)中的TCP/IP Socket傳輸,較傳統(tǒng)方式更為穩(wěn)定和高效。
OPC UA基于OPC基金會提供的新一代技術(shù),提供安全、可靠和獨(dú)立于廠商的,實(shí)現(xiàn)原始數(shù)據(jù)和預(yù)處理的信息從制造層級到生產(chǎn)計(jì)劃或ERP層級的傳輸。使用OPC UA技術(shù),所有需要的信息可隨時(shí)隨地到達(dá)每個(gè)授權(quán)應(yīng)用和每個(gè)授權(quán)人員。OPC UA是目前已經(jīng)使用的OPC工業(yè)標(biāo)準(zhǔn)的補(bǔ)充,提供重要的一些特性,包括如平臺獨(dú)立性,擴(kuò)展性,高可靠性和連接互聯(lián)網(wǎng)的能力[2]。OPC UA不再依靠DCOM,而是基于面向服務(wù)的架構(gòu)(SOA),它具備以下優(yōu)勢:
1)通過一個(gè)通用接口集成之前所有OPC的特性和信息。
2)更加開放,具有平臺無關(guān)性,WINDOWS、Linux平臺都能兼容。
3)擴(kuò)展了對象類型,支持更復(fù)雜的數(shù)據(jù)類型,例如變量,方法和事件。
4)在協(xié)議和應(yīng)用層集成了安全功能,更加安全。
5)易于配置和使用。
本系統(tǒng)的通訊架構(gòu)分為四層進(jìn)行搭建,自下而上分別為:數(shù)據(jù)源、OPC服務(wù)、數(shù)據(jù)感知服務(wù)及WCS服務(wù),如圖1所示。
圖1 通訊架構(gòu)圖
◆數(shù)據(jù)源:為PLC中的、被上位系統(tǒng)所需讀取或?qū)懭氲臓顟B(tài)點(diǎn),PLC應(yīng)支持OPC UA協(xié)議。
◆OPC服務(wù):一般采用設(shè)備廠商所提供的OPC UA服務(wù),如果個(gè)性化需求較多,也可以進(jìn)行自主搭建或采用第三方OPC UA服務(wù)。OPC UA服務(wù)是旨在訪問實(shí)時(shí)數(shù)據(jù),并提供來自不同供應(yīng)商的其他功能,如事件處理,日志記錄等。它充當(dāng)OPC客戶端和本地通信的數(shù)據(jù)源之間的翻譯器,具有讀取和寫入PLC的功能。
◆數(shù)據(jù)感知服務(wù):既作為OPC服務(wù)的客戶端,也同時(shí)作為WCS功能流程的驅(qū)動器,在監(jiān)測PLC狀態(tài)點(diǎn)信息變化的同時(shí),調(diào)取相應(yīng)的WCS服務(wù)和具體功能。在遵循OPC UA訂閱機(jī)制的基礎(chǔ)上,實(shí)現(xiàn)程序變量的異步更新。該服務(wù)針對上位系統(tǒng)關(guān)注的每個(gè)PLC狀態(tài)點(diǎn)建立信息模型(Item),包括:變量地址、變量類型、變量值、變量句柄、變量值觸發(fā)事件以及變量備注。其中,通過自定義變量值觸發(fā)事件可以避免使用定時(shí)器對PLC循環(huán)訪問和讀取,減少資源占用,提高響應(yīng)速度。
◆WCS服務(wù):提供上位系統(tǒng)功能流程服務(wù),數(shù)據(jù)庫記錄監(jiān)測等內(nèi)容,其中的功能服務(wù)可與自定義Item中的變量值觸發(fā)事件相綁定。利用SQL Server的SQL Dependency機(jī)制,可實(shí)現(xiàn)數(shù)據(jù)庫內(nèi)容變化與相應(yīng)功能的異步觸發(fā),大大減少客戶端不斷輪詢訪問數(shù)據(jù)庫所導(dǎo)致的卡頓。
通過四層架構(gòu)的搭建,在開發(fā)時(shí)將軟件系統(tǒng)劃分的更為清晰明了,為標(biāo)準(zhǔn)化開發(fā)提供幫助;可以使團(tuán)隊(duì)成員各司其職,分工于各層的代碼編寫中,專注開發(fā)系統(tǒng)架構(gòu)中的每一層;降低軟件系統(tǒng)中各結(jié)構(gòu)層之間的耦合度,增加各模塊的可重用性,降低開發(fā)成本和后期維護(hù)成本。
自動化立體倉庫監(jiān)控系統(tǒng)包括以下核心可視化功能,實(shí)現(xiàn)案例如圖2所示。
◆設(shè)備側(cè)視動態(tài)圖:堆垛機(jī)實(shí)時(shí)位置、提升機(jī)實(shí)時(shí)位置、貨叉上托盤或料箱狀態(tài)。
◆設(shè)備俯視動態(tài)圖:各堆垛機(jī)實(shí)時(shí)位置、各提升機(jī)實(shí)時(shí)位置、傳輸線上托盤或料箱狀態(tài)。
◆行走機(jī)構(gòu)實(shí)時(shí)參數(shù):堆垛機(jī)當(dāng)前速度、加速度、功耗、累計(jì)運(yùn)行時(shí)間、電流值等。
◆升降機(jī)構(gòu)實(shí)時(shí)參數(shù):提升機(jī)當(dāng)前速度、加速度、功耗、累計(jì)運(yùn)行時(shí)間、電流值等。
◆掛取機(jī)構(gòu)實(shí)時(shí)參數(shù):貨叉當(dāng)前速度、加速度、功耗、累計(jì)運(yùn)行時(shí)間、電流值等。
◆當(dāng)前任務(wù)列表:顯示當(dāng)前任務(wù)隊(duì)列情況,包括作業(yè)號、取貨口、設(shè)備號、托盤或料箱號、源貨位、目標(biāo)貨位、作業(yè)類型、生成時(shí)間、執(zhí)行時(shí)間、作業(yè)狀態(tài)、優(yōu)先級等。
◆統(tǒng)計(jì)圖表:設(shè)備報(bào)警頻次統(tǒng)計(jì)、出入庫次數(shù)統(tǒng)計(jì)、料箱使用頻率統(tǒng)計(jì)等。
圖2 監(jiān)控系統(tǒng)案例界面
下面以數(shù)據(jù)訂閱和自定義信息模型為例,來說明OPC UA異步通訊方式的應(yīng)用。
1)訂閱包含一組由客戶端分配的監(jiān)控項(xiàng),監(jiān)控項(xiàng)可以生成通知,并由訂閱發(fā)送給客戶端。訂閱以回應(yīng)發(fā)布請求的方式向客戶端發(fā)送通知消息。發(fā)布請求通常以接收順序存儲到Session中,當(dāng)有通知需要發(fā)送時(shí),在每次發(fā)布循環(huán)時(shí),會從隊(duì)列中取出相應(yīng)的請求,并發(fā)送通知到客戶端,如果沒有待發(fā)送通知,請求則不會從隊(duì)列中被刪除。關(guān)鍵代碼如下:
PLCNodesFactory.AddClientItems();
if (mySubscription == null){mySubscription = myClientHelperAPI.Subscribe(200);}
int itemCount = 0;
for (int i = 1; i < ClientItem.Count; i++){
itemCount++;
string monitoredItemName = itemCount.ToString();
myMonitoredItem=myClientHelperAPI.AddMonitoredItem(mySubscription,((PLCItem)ClientItem[i])ServerAddress.ToString(), monitoredItemName, 1);
myClientHelperAPI.AddMonitoredItem(new NodeId(ItemIDs[i],m_NameSpaceIndex),i, ClientApi_ValueChanged, 100, out monitoredItemServerHandle);}
myClientHelperAPI.ItemChangedNotification+=newMonitoredItemNotificationEventHandler(Notification_MonitoredItem);
2)針對OPC UA訂閱機(jī)制建立的自定義信息模型,可以在已訂閱的PLC變量值發(fā)生變化時(shí),觸發(fā)相應(yīng)的綁定事件,進(jìn)行異步動作。下面以父類為例給出關(guān)鍵代碼:
public delegate void ChangeHandler(object sender, object v);
public class PLCItem : INotifyPropertyChanged{
public event PropertyChangedEventHandler PropertyChanged;
public Type TypeOfItem;
public string Comment;
public int ServerHandle { get; set; }
public virtual void OnPropertyChanged(string propertyName){
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null){handler(this, new PropertyChangedEventArgs(propertyName));}}
protected virtual void OnChanged(object sender, object v, object old, ChangeHandler handler){
if (!v.Equals(old) && handler != null){handler(sender, v);}}}
本文介紹了OPC UA的概念與特點(diǎn),探討了基于OPC UA的自動化立體倉庫監(jiān)控系統(tǒng)的通訊架構(gòu)和核心功能,給出了訂閱模式中軟件系統(tǒng)與OPC UA服務(wù)通訊的實(shí)例,設(shè)計(jì)了一種具有異步反饋功能的自定義信息模型。文中闡述的設(shè)計(jì)思路已經(jīng)通過了多個(gè)項(xiàng)目的實(shí)際驗(yàn)證,具有一定的借鑒意義。