張勇喜,金 秀,張 帆,胡雯雯,楊文華,任少鵬
(沈陽儀表科學研究院有限公司,遼寧沈陽 110043)
近年來,隨著用工成本的不斷上升,越來越多的企業(yè)開始使用自動化設備來替代人工,有些是直接引進全新的自動化設備,而有些是在現(xiàn)有的設備上進行自動化改進升級。光纖光譜儀是一種快速光譜測試儀器,可實現(xiàn)濾光片的光學性能快速檢測。光纖光譜儀雖然測試速度塊,但需要人工放置測試樣品,測試效率大約為300片/h。為提高測試效率,降低人員勞動強度,本文對光纖光譜儀進行了自動化改造,增加了樣品自動進給、數(shù)據(jù)打印、自動分揀等功能,實現(xiàn)了濾光片產(chǎn)品的自動化檢測。由于光纖光譜儀是定型設備,底層硬件完全固化,所以不能通過改變測試儀器硬件來實現(xiàn)這些自動化功能。為實現(xiàn)產(chǎn)品的自動測試,采用PLC系統(tǒng)完成樣品的進給、分揀等過程,然后編寫中間控制程序來實現(xiàn)PLC系統(tǒng)和光纖光譜儀測試系統(tǒng)的信息溝通,實現(xiàn)兩者的協(xié)調工作。
本文負責樣品進給等功能的PLC系統(tǒng)是一個獨立的子系統(tǒng),負責樣品測試和數(shù)據(jù)處理的測試系統(tǒng)是一個以通用計算機為基礎的獨立子系統(tǒng),中間程序要實現(xiàn)兩者的信息溝通首先要解決計算機與PLC的通信問題。PLC通常具有多個通信接口[1-2],以便和觸摸屏、上/下位PLC或計算機連接。串行通訊是PLC最常用的通信方式,常用的接口方式有RS232、RS422和RS485,其中RS232接口可以直接和計算機相連,使用范圍最廣。
PLC串行通信都有固定的格式[3],只有按固定格式發(fā)送到信息才能被正確執(zhí)行。PLC會對每一條通信指令產(chǎn)生一個反饋信號,這個信號可能是需要傳送的數(shù)據(jù),也可能是命令執(zhí)行的結果,計算機可以通過接收這個信號來獲得所需數(shù)據(jù)或判斷命令是否被正確執(zhí)行。與PLC通信一般先要進行“握手”[4-5],然后才能進行正式的通信,當要斷開聯(lián)系的時候需要發(fā)送結束命令,以免發(fā)送錯誤信號導致PLC異動。表1列舉了幾個常用的通訊指令,更多信息可以查閱產(chǎn)品手冊。
表1 PLC通信指令格式
圖1為自動測試條件下PLC系統(tǒng)和測試系統(tǒng)的工作流程,根據(jù)該流程,計算機和PLC之間需要4個交互信號,但實際上為了整個自動測試系統(tǒng)更穩(wěn)定的運行,交互信號需要增加到9個(見表2)。首先是打印機的狀態(tài)必須監(jiān)控,不能在打印機出錯的情況下還繼續(xù)工作;其次是測試儀器需要定期校準;然后是聯(lián)機通信情況的監(jiān)控;最后是測試合格與否的信號必須分裂成2個,不能用1個信號的2種狀態(tài)來標識合格與否。在這些信號中,MR8001為狀態(tài)信號,用0/1表示,等于1表明打印機正常,等于0時表明打印機異常,PLC將暫停工作進程。MR8004為心跳信號[6],即持續(xù)的脈沖信號,當按一定頻率持續(xù)輸出,表明計算機和PLC聯(lián)機正常。其它信號均為指令信號,上升沿有效,計算機和PLC接到信號后都要執(zhí)行一定的任務。
圖1 自動測試子系統(tǒng)工作流程
表2 計算機與PLC的交互信號
由于串行通信在某一時刻只能接收或者發(fā)送1個信息,而PLC每收到一條通信指令都會產(chǎn)生1個反饋信號,所以計算機與PLC通信必須以獨占方式進行,1次只處理1個指令。從PLC讀取位狀態(tài)信息和發(fā)送脈沖信號都是周期性通信,可以通過定時器來完成[7-8]。而計算機向PLC發(fā)送位控制命令是隨測試過程而產(chǎn)生的,是非周期性的。如果把位控制命令的發(fā)送放到相應的過程后面,則存在與周期性通信爭搶串口的風險。雖然可以設置串口占用標志來避免錯誤通信,但這將導致串口占用時間延長,信號傳遞不暢。為解決這個問題,可以參照PLC端口的輸入輸出工作模式——“統(tǒng)一讀入,統(tǒng)一輸出”來處理計算機和PLC的信號傳遞問題。即將通信過程都集中放入一個定時程序中,先從PLC讀取所需數(shù)據(jù),然后再將需要輸出的數(shù)據(jù)寫入PLC。
由于PLC具有上升沿判定指令,而且控制程序在響應指令后會清除數(shù)據(jù)位,所以計算機只需將1寫入PLC的數(shù)據(jù)位即可。根據(jù)PLC系統(tǒng)的工作流程,在一個測試周期內,測試合格與否和打印完成這2個指令只需要響應一次,所以計算機只需在這個時間段內將信號寫入一次即可,多次寫入將引發(fā)錯誤。此時,測試系統(tǒng)的主程序需要為每一個數(shù)據(jù)位設置一個寫入標志,定時程序根據(jù)該標志輸出數(shù)據(jù)。如果寫入成功,則清除該寫入標志,防止下次循環(huán)再次輸出,引發(fā)錯誤;如果寫入不成功,則保留標志,等待下次掃描循環(huán)時寫入數(shù)據(jù)。由于定時掃描程序設置的掃描周期很短,所以在一個樣品測試周期內有很多次機會向PLC寫入數(shù)據(jù),寫入成功的概率非常高。
計算機沒有直接的上升沿判斷指令,從PLC獲得的信息只是原始的位狀態(tài)信息,需要轉換方可成為正確的命令信息。定時程序不斷地掃描端口,計算機會重復地讀入0或者1,只有從0到1的上升時刻才是命令到來的時刻。為獲得這一變化的時刻,協(xié)作控制程序給每一個數(shù)據(jù)位設置了一個全局變量,用于記錄上次讀取的結果,如果上次為0,本次新讀入的為1,則該數(shù)據(jù)位發(fā)生0到1的跳變,命令標志有效。協(xié)作主程序則根據(jù)命令標志位來決定程序的運行。
本文采用VB6編寫協(xié)作控制程序,串行通信采用了MSComm控件[9-10],通信相關程序如下。
串口參數(shù)設置程序:
MSComm1.PortOpen = False
MSComm1.CommPort = 3
MSComm1.PortOpen = True
MSComm1.Settings = ″19200,e,8,1″
MSComm1.InputMode = comInputModeText
MSComm1.InputLen = 0
串口中斷程序:
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive’接收事件
Serial_bck = MSComm1.Input’將接收內容存儲到全局變量中
End Select
End Sub
串行通信輸入輸出定時處理程序如下:
Serial_in = MSComm1.Input ’清串口
Serial_bck = "" ’清空舊數(shù)據(jù)
MSComm1.RThreshold = 27 ’響應字節(jié)數(shù)
MSComm1.Output=″RDS MR800013″+Chr(13)
Delay 30 ’等待中斷響應
Serial_in = Serial_bck ’讀取響應數(shù)據(jù)
If Right(Serial_in,2) = vbCrLf Then
StrBit = Split(Serial_in,″ ″)
MR8000.Value = Val(StrBit(0))
…
If Last8010 = 0 And MR8010.Value = 1
Then ’0/1上升沿判斷
MR8010UP = True
End If
Last8010 = MR8010.Value
If Last8011 = 0 And MR8011.Value = 1
Then
MR8011UP = True
End If
Last8011 = MR8011.Value
End If
…
Heart_Time = Heart_Time + 1 ’心跳信號
If Heart_Time = 5 Then
If Heart Then
MSComm1.Output=″ST MR8004″&Chr(13)
MR8004.Value = 1′’狀態(tài)顯示
Heart = False ’狀態(tài)反轉標記
Else
MSComm1.Output=″RS MR8004″&Chr(13)
MR8004.Value = 0
Heart = True
End If
Heart_Time = 0
End If
If WR_8000 Then ’數(shù)據(jù)寫入標志為真
Serial_in = MSComm1.Input ’清串口
Serial_bck = ″″ ’清空舊數(shù)據(jù)
MSComm1.RThreshold = 4 ’響應字節(jié)數(shù)
If V_8000 Then
MSComm1.Output=″ST MR8000″&Chr(13)
Else
MSComm1.Output=″RS MR8000″&Chr(13)
End If
Delay 10 ’等待反饋
Serial_in = Left(Serial_bck,2)
If Serial_in=″OK″Then WR_8000=False
’寫入成功則清除標志
End If
…
改造后的自動測試儀器基本不需要人工干預,可以實現(xiàn)濾光片的批量自動測試,測試效率可達到340片/h,比人工測試提高了10%。自動測試系統(tǒng)是由2個獨立的子系統(tǒng)構成,讓兩者協(xié)調工作的關鍵在于信號的高效準確地傳遞。本文將通信任務集中放置在定時程序中,一方面短定時周期提高了信息傳遞的時效性,另一方面信息處理逐項以獨占式完成提高了信息傳遞的準確性,一些時效性要求較高的系統(tǒng)可以借鑒此方法。由于定時程序會重復輸入輸出數(shù)據(jù),所以在控制程序中設置了一些標志位和全局變量,通過這些標志位和全局變量來輸入輸出準確的命令信息,通過該方法確保了信息傳遞的準確性。