文/劉月紅
為了實(shí)現(xiàn)作業(yè)單自動導(dǎo)入,筆者構(gòu)建了掃描系統(tǒng),系統(tǒng)由工控機(jī)、掃描槍、集線器和PLC(控制加工設(shè)備)組成,其中在工控機(jī)和掃描槍之間使用串行通信方式,工控機(jī)和PLC之間使用以太網(wǎng)連接方式。工控機(jī)(下面統(tǒng)稱主機(jī))中的軟件主要包括三個(gè)部分:主機(jī)讀取掃描槍串口數(shù)據(jù)程序、主機(jī)讀寫PLC的CPU模塊的軟元件存儲器程序、掃描系統(tǒng)狀態(tài)轉(zhuǎn)換程序。
當(dāng)掃描槍掃描到作業(yè)單上二維碼得到其中包含的ASCII字符串后,掃描槍將數(shù)據(jù)經(jīng)USB口線傳送到主機(jī),主機(jī)安裝了USB轉(zhuǎn)換串口程序,從而主機(jī)可以使用串口讀取程序接收經(jīng)主機(jī)USB口的數(shù)據(jù)線上傳進(jìn)的數(shù)據(jù)。串口讀取程序使用SerialPort控件,在Mdi容器Form的定時(shí)器處理程序中不斷查詢、提示、連接掃描槍;并在SerialPort控件的數(shù)據(jù)接收事件處理器中讀取ASCII字符串,再根據(jù)事先制定的二維碼中數(shù)據(jù)格式解析掃描信息,得到各項(xiàng)加工參數(shù)(例如切割直徑、切割長度、切割類型、棒材形狀、棒材根數(shù)等信息),程序還將作業(yè)單參數(shù)放入用戶界面的加工作業(yè)表單中,使作業(yè)單直觀地呈現(xiàn);這樣就無差錯(cuò)、快捷地將作業(yè)單輸入到了主機(jī)。
當(dāng)主機(jī)使用串口讀取程序讀到一批待加工的作業(yè)單后,用戶需將其上傳寫入到加工設(shè)備的PLC的CPU模塊軟元件存儲器中;并且為了確認(rèn)上傳到PLC的CPU模塊軟元件存儲器中數(shù)據(jù)的正確性,需要隨即對剛上傳到PLC的CPU模塊軟元件存儲器中的數(shù)據(jù)進(jìn)行讀取并比對,以確認(rèn)上傳數(shù)據(jù)成功與否;除此之外,主機(jī)還需實(shí)時(shí)獲取與PLC的通信控制信號(如:“加工指令可接受”、“加工中”、“指令取消完成”、“外部指令取消完成”)和其它反饋信息(如:上傳到PLC的參數(shù)是否存在異常等),在主機(jī)端需將作業(yè)單“寫入完成”、“指令取消”等信號寫入PLC的CPU模塊軟元件存儲器中供PLC的程序查詢;所以主機(jī)中需要有PLC的CPU模塊軟元件讀寫程序。
圖1
PLC的CPU模塊可以通過以太網(wǎng)接口模塊與主機(jī)進(jìn)行以太網(wǎng)連接,主機(jī)程序使用TCPClient提供的方法,在同步阻止模式下通過網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。該部分程序,除了主線程,另外還創(chuàng)建了兩個(gè)子線程,一個(gè)是TCP連接子線程,另一個(gè)子線程則負(fù)責(zé)實(shí)時(shí)地讀取PLC數(shù)據(jù)。主線程在需要的時(shí)候?qū)LC執(zhí)行寫入。主機(jī)讀寫PLC數(shù)據(jù)利用SLMP(Seamless Message Protocol)的以太網(wǎng)通信用3Ε幀,通信數(shù)據(jù)使用二進(jìn)制代碼,與利用ASCII代碼的數(shù)據(jù)進(jìn)行的通信相比,利用二進(jìn)制代碼進(jìn)行的通信的通信數(shù)據(jù)量僅約為一半,因此能夠縮短通信時(shí)間。為了從主機(jī)側(cè)對PLC的CPU模塊軟元件存儲器進(jìn)行數(shù)據(jù)讀取/寫入請求,發(fā)送指令報(bào)文;PLC的CPU模塊根據(jù)在每個(gè)掃描周期結(jié)束的ΕND處理中主機(jī)請求的內(nèi)容,讀取/寫入數(shù)據(jù),將含有處理結(jié)果的響應(yīng)報(bào)文(響應(yīng))發(fā)送給提出請求的主機(jī)。采用半雙工通信,訪問PLC時(shí),在相對于前一個(gè)指令報(bào)文的發(fā)送,接收到來自PLC模塊側(cè)的響應(yīng)報(bào)文后,發(fā)送下一個(gè)指令報(bào)文(在完成響應(yīng)報(bào)文的接收前,不能發(fā)送下一個(gè)指令報(bào)文)。所以在軟件實(shí)現(xiàn)時(shí),為了避免主線程讀取PLC數(shù)據(jù)與子線程讀取PLC數(shù)據(jù)之間以及子線程PLC讀取和主線程PLC寫入之間的沖突,需對發(fā)送報(bào)文、接收響應(yīng)的函數(shù)實(shí)行線程阻止。
在“發(fā)送指令”與“接收響應(yīng)”之間需要等待的時(shí)間,其應(yīng)大于SLMP進(jìn)行通信的最小處理時(shí)間(批量讀取、批量寫入的情況下)Tfs,Tfs的計(jì)算公式為:
Tfs=Ke+ (Kdt*Df)+Scr*處理所需的掃描次數(shù)+主機(jī)的ACK處理時(shí)間
Tfs:從接收主機(jī)的請求數(shù)據(jù)到PLC的CPU模塊完成處理的時(shí)間(單位:ms)
Ke、 Kdt:常數(shù)(Ke=1,Kdt=0.001)
Df:請求數(shù)據(jù)字?jǐn)?shù)+響應(yīng)數(shù)據(jù)字?jǐn)?shù)(應(yīng)用數(shù)據(jù)部)
Scr:掃描時(shí)間
PLC的CPU模塊掃描時(shí)間約40ms,指令處理所需的掃描次數(shù)為1,所以本系統(tǒng)選擇了此等待時(shí)間為50ms。
由于進(jìn)行對來自于外部設(shè)備的請求的處理,PLC的CPU模塊的掃描時(shí)間將會延長,因此應(yīng)加以注意。為了減少掃描時(shí)間的延長對控制的影響,應(yīng)以較少的點(diǎn)數(shù)分多次進(jìn)行訪問。在這種情況下,在接收完響應(yīng)解除線程阻止后,可以將讀到的數(shù)據(jù)塊直接放入用于放置所有讀到數(shù)據(jù)的全局二維數(shù)組中互不沖突的對應(yīng)的元素塊中。也可以將讀到的數(shù)據(jù)拷貝到局部數(shù)組變量(作為過渡)再將該數(shù)據(jù)放到用于放置所有讀到數(shù)據(jù)的全局二維數(shù)組中互不沖突的對應(yīng)的元素塊中;但需注意的是,不能使用相同的一維全局?jǐn)?shù)組變量作為過渡,否則會產(chǎn)生數(shù)據(jù)沖突而發(fā)生數(shù)據(jù)讀取錯(cuò)誤。
系統(tǒng)主機(jī)軟件含有三個(gè)狀態(tài):掃描、上傳和加工監(jiān)控;通過該部分程序在這三個(gè)狀態(tài)之間自動切換并循環(huán),從而實(shí)現(xiàn)自動化的生產(chǎn)監(jiān)控過程。狀態(tài)圖如圖1所示。
系統(tǒng)初始狀態(tài)為“掃描”,系統(tǒng)通過用戶界面上的按鍵“掃描”、“上傳”以及讀取PLC發(fā)來的控制信號,在三個(gè)狀態(tài)之間自動切換。系統(tǒng)利用按鍵“掃描”、“上傳”背景顏色高亮或另一個(gè)標(biāo)簽“加工監(jiān)控”的背景顏色高亮呈現(xiàn)系統(tǒng)目前所處的狀態(tài),系統(tǒng)始終處于這三個(gè)狀態(tài)之一,所以任何時(shí)刻按鍵“掃描”、“上傳”和標(biāo)簽“加工監(jiān)控”只有一個(gè)是高亮的。
系統(tǒng)有時(shí)是通過PLC發(fā)來的信號事件來轉(zhuǎn)換狀態(tài)的。如前所述主機(jī)中的軟件創(chuàng)建了子線程用于實(shí)時(shí)讀取PLC的CPU的軟元件存儲器,而PLC的信號數(shù)據(jù)(通信控制信號)和切割參數(shù)數(shù)據(jù)一樣都存于PLC的CPU的軟元件存儲器中;在此基礎(chǔ)上,主機(jī)軟件創(chuàng)建定時(shí)器,在定時(shí)器事件處理程序中定時(shí)地檢測判斷子線程中實(shí)時(shí)讀到的PLC中信號數(shù)據(jù)(如:“加工指令可接受”、“加工中”、“指令取消完成”、“外部指令取消完成”等),這樣就可以實(shí)現(xiàn)狀態(tài)的及時(shí)轉(zhuǎn)換。
在掃描狀態(tài)下,主機(jī)軟件將掃描槍掃描到的作業(yè)單錄入,而在非掃描狀態(tài)下忽略掃描槍的輸入。當(dāng)系統(tǒng)處于上傳狀態(tài)時(shí)表明作業(yè)單參數(shù)已被正確設(shè)入PLC的CPU模塊的軟元件存儲器中,此時(shí)如果用戶還想繼續(xù)掃描或編輯作業(yè)參數(shù),可以按擊按鍵“掃描”回到掃描狀態(tài)。不管系統(tǒng)狀態(tài)處于掃描還是上傳狀態(tài),如果檢測到PLC的表示設(shè)備“加工中”的信號,系統(tǒng)的狀態(tài)都會自動轉(zhuǎn)入“加工監(jiān)控”狀態(tài),而后主機(jī)軟件顯示切割的進(jìn)度和完成情況。因?yàn)橹鳈C(jī)軟件從上傳狀態(tài)返回掃描狀態(tài)時(shí)對已上傳作業(yè)單表進(jìn)行了備份,所以如果在掃描狀態(tài)下PLC控制的設(shè)備開啟切割,主機(jī)軟件會直接轉(zhuǎn)入加工監(jiān)控狀態(tài),并將之前備份的已上傳作業(yè)單表恢復(fù)到當(dāng)前的作業(yè)單表中。
設(shè)入錯(cuò)誤是指在試圖上傳參數(shù)到PLC時(shí),主機(jī)軟件將上傳參數(shù)與實(shí)時(shí)讀取的參數(shù)數(shù)據(jù)進(jìn)行比對發(fā)現(xiàn)讀寫不一致的情況,從而停留在掃描狀態(tài);而PLC發(fā)來作業(yè)單數(shù)據(jù)異常信號是指上傳參數(shù)已經(jīng)比對成功,但PLC程序發(fā)現(xiàn)所上傳的參數(shù)數(shù)據(jù)不在合理范圍之內(nèi)而在PLC的CPU模塊軟元件存儲器中設(shè)置異常標(biāo)志,系統(tǒng)主機(jī)軟件檢測到此異常后,會快速返回掃描狀態(tài),使用戶能夠編輯修改。
該掃描系統(tǒng)主機(jī)軟件實(shí)現(xiàn)了作業(yè)單的自動錄入、自動上傳、加工監(jiān)控的主要功能,實(shí)現(xiàn)了掃描槍的掃描與加工設(shè)備的協(xié)同工作。