方式1:定期抓取數(shù)據(jù)
某些設(shè)備的關(guān)鍵工藝參數(shù)(如變速器軸齒熱處理爐的溫度)非常重要,需要定期抓取以生成實(shí)時(shí)曲線,及用于長(zhǎng)期追溯分析。
這些工藝參數(shù)通常都是模擬量,數(shù)值始終不停地變化。
通常我們可以通過(guò)OPC軟件讀取這些數(shù)據(jù),經(jīng)過(guò)精度處理,然后定期寫入實(shí)時(shí)數(shù)據(jù)庫(kù)中。
這些數(shù)據(jù)的特點(diǎn)是:讀取頻率高,數(shù)據(jù)變化小,因此存入數(shù)據(jù)庫(kù)時(shí)會(huì)存在大量重復(fù)的記錄,而實(shí)時(shí)數(shù)據(jù)庫(kù)提供數(shù)據(jù)壓縮的功能,特別適合此類數(shù)據(jù)的存儲(chǔ)。
方式2:基于條件觸發(fā)
有許多工藝參數(shù)(如螺栓的擰緊值)的收集,主要是用于事后的質(zhì)量追溯分析的,通常我們會(huì)定義一個(gè)觸發(fā)信號(hào)通知MES讀取。
比如發(fā)動(dòng)機(jī)在某工位完成物理裝配作業(yè)后,PLC會(huì)把關(guān)鍵的工藝參數(shù)寫入數(shù)據(jù)交換區(qū),然后給DATA_READY信號(hào)置位。
而MES會(huì)每隔1秒掃描監(jiān)聽DATA_READY信號(hào),當(dāng)此信號(hào)處于高位時(shí),則讀取數(shù)據(jù)交換區(qū)的質(zhì)量追溯數(shù)據(jù)。
可參考下圖:
圖1 定義一個(gè)觸發(fā)信號(hào)通知MES讀取
具體握手過(guò)程為:
1.發(fā)動(dòng)機(jī)完成某個(gè)裝配步驟,PLC寫入?yún)?shù)1。
2.發(fā)動(dòng)機(jī)完成某個(gè)裝配步驟,PLC寫入?yún)?shù)2。
3.發(fā)動(dòng)機(jī)完成所有物理裝配作業(yè),PLC將DATA_READY置位。MES讀取參數(shù)1、參數(shù)2。
4.發(fā)動(dòng)機(jī)準(zhǔn)備離開當(dāng)前工位,PLC將所有數(shù)據(jù)復(fù)位。
方式3:請(qǐng)求-響應(yīng)機(jī)制,1次握手
這種方式和IT系統(tǒng)的MQ/WEB SERVICE等消息處理機(jī)制非常類似。
如發(fā)動(dòng)機(jī)上線工位,MES給PLC下發(fā)工單,過(guò)程可參考下圖:
圖2 MES給PLC下發(fā)工單
具體握手過(guò)程為:
1.PLC在PLC_MSG寫入請(qǐng)求數(shù)據(jù),如工位,同時(shí)將REQUEST_SENT置位。
2.MES掃描到REQUEST_SENT,讀取PLC_MSG,然后生成工單數(shù)據(jù),并寫入MES_MSG,同時(shí)將RESPONSE_SENT置位。
3.PLC掃描RESPONSE_SENT,讀取MES_MSG并寫入本地?cái)?shù)據(jù)塊,然后將REQUEST_SENT和PLC_MSG復(fù)位。
4.MES將所有數(shù)據(jù)和控制位復(fù)位。
我們可以看出,整個(gè)數(shù)據(jù)交換的過(guò)程只發(fā)生了1個(gè)來(lái)回,即1-2步,而3-4步是將消息銷毀的動(dòng)作。
這種方式還有一個(gè)特點(diǎn),就是封裝性好,同樣一個(gè)接口,既可以下發(fā)工單,也可以上傳過(guò)站數(shù)據(jù),區(qū)別在于PLC_MSG/MES_MSG里存儲(chǔ)的數(shù)據(jù)內(nèi)容不一樣。
方式4:請(qǐng)求-響應(yīng)機(jī)制,2次握手
同樣是發(fā)動(dòng)機(jī)上線的例子,過(guò)程可參考下圖:
圖3 發(fā)動(dòng)機(jī)上線
具體握手過(guò)程為:
1.PLC在PLC_MSG寫入請(qǐng)求數(shù)據(jù),如工位。
2.PLC將REQUEST_SENT置位。
3.MES掃描到REQUEST_SENT,讀取PLC_MSG,然后發(fā)送REQUEST_RECEIVED。
4.MES生成工單數(shù)據(jù),并寫入MES_MSG。
5.MES將RESPONSE_SENT置位。
6.PLC掃描RESPONSE_SENT,讀取MES_MSG并寫入本地?cái)?shù)據(jù)塊,然后將RESPONSE_RECEIVED置位。
7.MES掃描RESPONSE_RECEIVED,將所有數(shù)據(jù)和控制位復(fù)位。
8.PLC將本地?cái)?shù)據(jù)和控制位復(fù)位。
我們可以看出,整個(gè)過(guò)程相當(dāng)于進(jìn)行了2次握手,其中1-3步是第1次握手,用于接收請(qǐng)求;4-8步是第2次握手,用于下發(fā)數(shù)據(jù)。
我們可以看出,方式4比方式3繁瑣很多,但是這種方式在實(shí)際項(xiàng)目中用得還非常多。這是因?yàn)橥暾憫?yīng)時(shí)間可能多達(dá)數(shù)秒,而PLC的掃描周期只有幾十毫秒,中間多出的狀態(tài)位可以作為狀態(tài)指示緩解工人等待的焦慮,也可以作為斷點(diǎn)方便通信調(diào)試。
方式5:基于工位生產(chǎn)周期
在一些工位,會(huì)有多個(gè)關(guān)鍵的業(yè)務(wù)過(guò)程,比如發(fā)動(dòng)機(jī)上線工位先上線,然后裝配,最后發(fā)送過(guò)站記錄。
那么在一個(gè)完整的工位生產(chǎn)周期中,PLC需要和MES做2次數(shù)據(jù)交換,第1次下載工單,第2次上傳過(guò)站記錄,如下圖所示:
圖4 多個(gè)關(guān)鍵的業(yè)務(wù)過(guò)程
具體握手過(guò)程為:
1.發(fā)動(dòng)機(jī)到達(dá),PLC給ENGINE_ARRIVAL置位。
2.PLC檢查托盤、設(shè)備、物料,條件具備后將STATION_READY置位。
3.MES將STATION_READY_RECEIVED置位。
4.MES將工單數(shù)據(jù)寫入MES_DATA。
5.MES將MES_DATA_SENT置位。
6.PLC將MES_DATA寫入本地?cái)?shù)據(jù)塊,并將MES_DATA_RECEIVED置位。
7.MES復(fù)位IT側(cè)所有數(shù)據(jù)和狀態(tài)位。
8.PLC開始本工位的裝配作業(yè),并將發(fā)動(dòng)機(jī)序列號(hào)寫入ENGINE_SN。
9.PLC裝配完成后,PLC將PLC_COMPLETE置位。
10.MES將PLC_COMPLETE_RECEIVED置位。
11.MES執(zhí)行過(guò)站邏輯,完成后將MES_COMPLETE置位。
12.PLC將MES_COMPLETE_RECEIVED置位。
13.MES復(fù)位IT側(cè)所有數(shù)據(jù)和狀態(tài)位。
14.發(fā)動(dòng)機(jī)準(zhǔn)備離開,PLC將ENGINE_LEAVE置位。
15.PLC復(fù)位所有數(shù)據(jù)和狀態(tài)位。
我們可以看到,此方式非常繁瑣,但是優(yōu)點(diǎn)是:
●生產(chǎn)周期中的關(guān)鍵狀態(tài)都有體現(xiàn),可以很方便地通過(guò)HMI進(jìn)行監(jiān)控。
●PLC狀態(tài)對(duì)應(yīng)于實(shí)際的生產(chǎn)執(zhí)行情況,發(fā)生問題時(shí)容易追蹤。
●程序出錯(cuò)時(shí),可以很直觀地看到通信執(zhí)行到哪一步。
另外,我們還應(yīng)理解,下載工單和上傳過(guò)站記錄都只是完整生產(chǎn)周期的一部分,并且有內(nèi)在的邏輯聯(lián)系,比如:在裝配的過(guò)程上發(fā)現(xiàn)缸體有問題,需要換一個(gè)缸體上線,此時(shí)由于MES還沒有接收到過(guò)站記錄,因此即使在第2次接收到STATION_READY信號(hào)時(shí),MES下發(fā)的仍舊是同一個(gè)工單,這樣就可以有效避免工單和發(fā)動(dòng)機(jī)序列號(hào)的損失。