基于條形碼技術的車間監(jiān)控系統(tǒng)的實時信息采集
摘 要 探討了使用條形碼作為信息載體的車間監(jiān)控系統(tǒng)信息采集的實現(xiàn),分析了所需要的信息及其條碼編碼,介紹了Windows95環(huán)境下用RS-232串口中斷方式數(shù)據(jù)實時采集的實現(xiàn)方法,以及客戶/服務器機構模式下數(shù)據(jù)采集模塊與監(jiān)控模塊之間實現(xiàn)動態(tài)數(shù)據(jù)傳送(DDE)的手段。
本文引用地址:http://2s4d.com/article/255635.htm關鍵詞 條形碼 數(shù)據(jù)采集 動態(tài)數(shù)據(jù)交換(DDE) 中斷
隨著計算機的廣泛應用,生產(chǎn)技術發(fā)生了革命性的變化,柔性制造系統(tǒng)(FMS)已在國外得到較廣泛應用。但對目前我國的大多數(shù)企業(yè)來說,高度柔性化的制造系統(tǒng)仍是一個難以承受的負擔,在一些生產(chǎn)量大的電器行業(yè),如電冰箱、洗衣機、空調器等,以人工裝配為主、生產(chǎn)工位多的生產(chǎn)流水線形式仍占主要地位。
由于缺乏信息監(jiān)測手段,此類生產(chǎn)系統(tǒng)會出現(xiàn)種種問題:工位負荷缺乏定量關系,無法隨生產(chǎn)目標、生產(chǎn)條件的改變均衡生產(chǎn)沒有生產(chǎn)監(jiān)視信息,故障事件得不到及時處理物流流動缺乏指導,工位連接不暢導致阻塞和缺料事件。
條形碼以下簡稱條碼技術由于其輸入速度快、準確度高、成本低、可靠性強等優(yōu)點而具有廣泛的應用領域。我們開發(fā)的基于條碼技術的車間監(jiān)控管理系統(tǒng)是這種自動識別技術在工業(yè)領域的應用實例,其目的是為了監(jiān)控某復印機廠裝配流水線的生產(chǎn)狀況。載有各種生產(chǎn)信息的條碼或貼在部件和成品上,或放于相應工位上,流水線出入口配有自動條碼掃描器,各工位上則配有手動條碼掃描器,這些條碼掃描器通過條碼掃描網(wǎng)絡儀連接到車間監(jiān)控計算機上。實際運行時,自動或手工掃描器將條碼信息送入車間監(jiān)控計算機上,在其上運行的監(jiān)控軟件可以動態(tài)地模擬整個車間所有流水線的實時動作。一旦發(fā)現(xiàn)各個工位的故障及警報信息,及時通知值班人員,值班人員可以通過該系統(tǒng)查詢故障及報警信息,并根據(jù)該系統(tǒng)提供的參考處理辦法調度維修人員進行搶修。
1 系統(tǒng)的硬件及軟件結構
系統(tǒng)的硬件結構如圖1所示。
本系統(tǒng)軟件結構上分為兩大部分:(1)數(shù)據(jù)采集模塊:將條碼信息轉換為控制信號;(2)監(jiān)控模塊:對生產(chǎn)線各種狀態(tài)的動態(tài)顯示和生產(chǎn)調度。軟件操作系統(tǒng)采用Windows95,由于數(shù)據(jù)采集模塊涉及低層硬件操作,用C++比較合適,而監(jiān)控模塊兼顧動畫和數(shù)據(jù)庫操作,我們采用了VB4.0。數(shù)據(jù)采集模塊和監(jiān)控模塊進程之間條碼信息的交換采用Windows系統(tǒng)的動態(tài)數(shù)據(jù)交換(DDE)實現(xiàn)。系統(tǒng)軟件結構如圖2所示。
基于上述系統(tǒng)軟硬件結構,要將條碼信息轉換成反映生產(chǎn)線現(xiàn)狀的控制信號,我們必須完成三方面工作:(1)生產(chǎn)信息分析及編碼;(2)使用RS-232串口進行信息采集;(
32 生產(chǎn)信息分析及編碼
車間監(jiān)控系統(tǒng)要用現(xiàn)代化的管理手段,在生產(chǎn)過程中,最合理地安排好生產(chǎn)流程,及時發(fā)現(xiàn)并排除故障,使各生產(chǎn)工序處于最理想的正常工作狀態(tài)。為此,所需的生產(chǎn)信息基本上可分為以下幾個方面:
工件監(jiān)視
工件(指裝配線上的部件或成品)的情況,包括當前位置、裝配狀態(tài)、裝配時間、關鍵測試數(shù)據(jù)。
操作工監(jiān)視
包括操作工崗位、工作狀態(tài)、技術水平及突發(fā)請求等的監(jiān)視。
生產(chǎn)過程監(jiān)視
包括流水線開工/停工,生產(chǎn)系統(tǒng)物流狀態(tài),各生產(chǎn)單元完成工件的品種及數(shù)量,各工位實際勞動負荷等。
故障監(jiān)視
包括直接故障及間接故障。直接故障是指明確包括故障源的故障信息,如設備故障、零件不足等;間接故障指未知故障源引發(fā)的系統(tǒng)級故障,如系統(tǒng)生產(chǎn)率明顯低于額定生產(chǎn)率等。
關鍵工位監(jiān)視
包括對直接影響整個生產(chǎn)系統(tǒng)流程的重要工位各種數(shù)據(jù)的監(jiān)視。主要有生產(chǎn)勞動負荷相對飽和的工位、生產(chǎn)限制條件多的工位如零件品種多,供應源多,輔助設備多等、技術工藝要求高的工位等等。
基于以上生產(chǎn)信息的分析,監(jiān)控管理系統(tǒng)必須實現(xiàn)對跟蹤、監(jiān)測對象的自動識別。目前最好的辦法就是采用條碼自動識別技術。工業(yè)上最常采用的是39碼,本系統(tǒng)也采用這一碼制。用39碼制設計以上生產(chǎn)信息所需的條碼如下:
· 工件標簽條碼:每個成品或重要部件上都貼有條碼,是其身份的標識。
· 考勤條碼:載有該工位上操作工的信息。
· 操作狀態(tài)條碼:載有裝配開始/結束信息,用于工位操作狀態(tài)的監(jiān)視。
· 設備故障/故障排除條碼:用于監(jiān)測設備故障。
· 異常報警條碼:用于表示除設備故障外的各種故障信息。
·流水線狀態(tài)條碼:載有流水線開工和停止生產(chǎn)等信息。
· 撤銷輸入條碼:表示撤銷前一次的條碼輸入,用于工位數(shù)據(jù)輸入的容錯。
3 數(shù)據(jù)采集模塊的RS-232串口通訊
本監(jiān)控系統(tǒng)中條碼信息經(jīng)過條碼掃描器送到車間監(jiān)控計算機的串口COM2上(COM1被鼠標占用)。所以條碼信息的實時采集就是串口數(shù)據(jù)實時采集。 Windows95平臺下串口通訊的實現(xiàn)有以下三種方法:
(1)定時采集方式。設置一個定時器,每隔一段時間產(chǎn)生一個WM_TIMER消息,該消息的相應函數(shù)讀取串口緩沖器中的數(shù)據(jù)。這種方法實現(xiàn)簡單,但有以下幾個缺點:一是受Windows計時器數(shù)據(jù)分辨率的限制,最高采樣頻率為18.2Hz。另外WM_TIMER消息在Windows消息隊列中優(yōu)先權低,可能得不到及時響應。最重要的一點是Windows會將消息隊列中沒有來得及處理的幾個WM_TIMER消息合并成一個,這意味著前幾次定時器消息沒有得到響應,因而可能導致數(shù)據(jù)丟失。
(2)在Win95操作平臺下,利用其支持多線程的特點,開辟一個線程專門讀取串口數(shù)據(jù)。每當串口有數(shù)據(jù)到來時,此線程被激活,讀取串口緩沖器中的數(shù)據(jù);無數(shù)據(jù)時,該線程被掛起。盡管可以設置線程的優(yōu)先級,這種采集方式仍稱不上實時通訊。
(3 保護模式下的中斷方式。Windows支持一種特殊的DOS服務,稱為DOS保護模式接口DPMI(DOS protected Mode Interface),由一些INT 2FH和INT 31H組成??梢杂密浿袛啵蒊NT 31H掛住保護模式中斷向量,以中斷方式處理外部實時事件。這種方式對數(shù)據(jù)量不太大但需要準確及時響應的條碼信息采集很適用,因此,我們采用這種方式。具體實現(xiàn)方案如下:
信息采集模塊主窗口第一次被創(chuàng)建時,Windows向它傳遞WM_CREATE消息,在該消息響應函數(shù)中調用INT 31H的0204H功能將老的中斷向量保存起來,用INT 31H的0205H號功能將中斷向量指向新的中斷服務例程監(jiān)控管理模塊退出時,Windows將向它傳遞WM_DESTROY消息在該消息響應函數(shù)中調用INT 31H的0205H功能恢復老的中斷服務例程。以上步驟在VC++1.52集成開發(fā)環(huán)境中,采用嵌入?yún)R編方式加以實現(xiàn)。主要包括以下幾個函數(shù)
· 初始化串口2(VOID PASCAL InitCom2())
保存COM2的當前狀態(tài),然后把COM2的波特率設置為9600,每個字符8bits,1個停止位。允許0xOc號中斷。
· 中斷初始化(BOOL PASCAL InitComm())
調用DMPI,保存舊的0CH號保護模式中斷向量,設置新的保護模式中斷服務例程。
· 中斷服務例程(void_interrupt_far new_int())
處理信息的接收。判斷信息類型。如是異常信息,就向主窗口發(fā)送一自定義WM_INTERRUPT1消息;如是一般信息,則發(fā)送一WM_INTERRUPT2消息。
· 中斷恢復(VOID PASCAL Restore_Comm())
恢復COM2狀態(tài),恢復0CH保護模式向量。
每當串口有條碼信息到來,0CH中斷將發(fā)生,保證消息得到及時處理,因而實現(xiàn)了條碼信息的實時采集。
4 數(shù)據(jù)采集模塊與監(jiān)控模塊之間DDE的實現(xiàn)
數(shù)據(jù)采集模塊采用中斷方式實時采集串口COM2的條碼信息的同時,還需將所采集的數(shù)據(jù)傳遞給監(jiān)控模塊。這兩者之間的信息交換采用Windows系統(tǒng)的動態(tài)數(shù)據(jù)交換(DDE)來實現(xiàn)。
4.1 動態(tài)數(shù)據(jù)交換(DDE)
動態(tài)數(shù)據(jù)交換(DDE)是一種進程之間的通信形式,而DDE會話則是實現(xiàn)進程通信的手段,它總是在一個客戶程序和一個服務器程序之間進行的。啟動會話并要求接收數(shù)據(jù)的應用程序是客戶程序。響應客戶程序的要求并提供數(shù)據(jù)的程序是服務器程序。
在早期的Windows版本中,DDE會話是通過進程之間互相發(fā)送消息的形式來實現(xiàn)的,DDE協(xié)議就是一組預定義的消息,被發(fā)送的數(shù)據(jù)包含在消息的兩個參數(shù)(wParam和1Param)中。
在Windows3.0以后的版本中,采用了一種先進的DDE方案,即動態(tài)數(shù)據(jù)交換管理庫(DDEML),DDEML提供了一系列API,將傳統(tǒng)的DDE消息及附屬的各種特征封裝在一個函數(shù)調用接口中,應用程序通過調用DDEML中的函數(shù)實現(xiàn)DDE會話,從而交換數(shù)據(jù)或互相提供服務。在DDEML中,進程之間傳遞的是事務事務是對數(shù)據(jù)和服務的請求,表現(xiàn)為一組預定義的常量,整個通訊過程都是圍繞著事務進行的:首先,客戶程序向服務器程序發(fā)出建立聯(lián)接的事務,服務器響應之后,聯(lián)接便建立起來;之后,客戶向服務器發(fā)出請求數(shù)據(jù)的事務,服務器便向客戶提供所需的數(shù)據(jù),這一過程可以在建立聯(lián)接之后多次進行;最后,當客戶不再需要數(shù)據(jù)時,便向服務器發(fā)出終止聯(lián)接的事務,從而結束一次DDEML會話過程。
4.2 DDE服務器的實現(xiàn)(工具為VC++1.52)
DDE會話有三種方式,冷鏈、溫鏈、熱鏈。由于采集的數(shù)據(jù)要及時得到監(jiān)控程序的處理,我們就采用了熱鏈方式來傳送數(shù)據(jù),即只要一有數(shù)據(jù)到來,采集服務器就立即把此數(shù)據(jù)傳送到監(jiān)控程序。
下面我們應用DDEML機制來實現(xiàn)數(shù)據(jù)傳輸編程。其步驟如下:
步驟1.創(chuàng)建用于處理各類DDEML事務的回調函數(shù)(HDDEDATA EXPENTRY_export DdeCallBack(WORD wType,WORD wFmt,HCONV hConv,HSZ hxz1,HSZ hsz2,HDDEDATA hData,DWORD1Data1,DWORD 1Data2)
在DDEML中,進程之間傳遞的是事務,根據(jù)實際的需要,回調函數(shù)應處理的事務如下:
·XTYP_CONNECT及XTYP_CONNECT_CONFIRM
證實客戶是否已連接到了采集服務器。
·XTYP_ADSTART
回復客戶熱鏈開始的申請。
·XTYP_ADVREQ
當采集服務器一接收到信息時,就向客戶傳遞此信息,實現(xiàn)動態(tài)數(shù)據(jù)交換。
·XTYP_ADVSTOP
回復客戶熱鏈結束的申請。
·XTYP_DISCONNECT
回復客戶和服務器之間鏈接結束的申請。
步驟2.初始化DDEML (BOOL PASCAL InitializeDDEML(HWNDhWnd))通知DDEML該程序將開始使用DDE機制。
步驟3.登記服務名、主題名和項目名(BOOL PASCAL InitializeDDEML(HWND hWnd))
這涉及到WINDOWS的三級服務名稱管理體系。它們是;服務名(Server Name)、主題名(Topic Name)、項目名(Item Name)。首先,一個應用程序作為服務器必須有一個服務名,當客戶應用程序希望和該服務器會話時,就在發(fā)出鏈接事務時指定這個服務器,從而識別出該服務器;主題名是指一個服務器所支持的各類會話主題的名稱,在一次會話期間,客戶程序只能和服務器就某一主題進行會話,客戶在發(fā)出鏈接事務時指定所關心的會話主題;項目名是關于一個主題的各類數(shù)據(jù)項的名稱,在鏈接建立以后,客戶可以請求不同項目的數(shù)據(jù),但都只能是屬于當前主題范圍之內(nèi)。一個服務器可以決定自己所能支持的主題以及每個主題所擁有的各個項目。因此,服務名使客戶以找到服務器,主題名和項目名則合起來標識客戶所需要的數(shù)據(jù)。
在這里,服務名為Server,主題名為TiaoMa,項目名則有兩個,一個名為BaoJing,專門傳送異常信息;另一個名為RuKu,專門傳送一般信息。
步驟4.結束DDEML使用(BOOL PASCAL cleanUpDDEML(HWND hWnd))
當客戶已不再需要服務器的數(shù)據(jù)時,服務器需要被撤銷。
4.3 DDE客戶的實現(xiàn)工具為VB4.0
Microsoft公司的Visual Basic號稱Windows程序開發(fā)的快槍手,用它來開發(fā)Windows程序十分方便。我們在VB4.0下開發(fā)監(jiān)控系統(tǒng)的多媒體和數(shù)據(jù)庫操作部分。因此,需要在VB下創(chuàng)建DDE客戶程序。具體編程內(nèi)容如下
(1)確定服務名、主題名和項目名。在Startup Form假設為Form1)中放入兩個文本框(假設為Text1,Text2),然后在文本框上單擊右鍵,在彈出菜單中選擇Properties屬性,在彈出的屬性對話框中將Text1和Text2的LinkTopic都設置為“Server1TiaoMa”,LinkItem為“0”Text1的LinkIdtem設置為“RuKu ”, Text2的zlinkIdtem設置為“BaoJing ”,或者可以在Sub Form1_Load()中加入下列幾行
Form1.Text1.LinkTopic=server1TiaoMa
Form1.Text1.LinkItem=RuKu
Form1.Text2.LindTopic=server1tiaoMa
Form1.Text2.LinkItem=BaoJing
(2)建立聯(lián)接.在主控程序中,用VB的Shell()函數(shù)啟動采集服務器同時也是DDE服務器開始采集數(shù)據(jù),然后加入下列語句
Form1.Text1.LinkMode=1
Form1.Text2.LinkMode=1
(3)拆除聯(lián)接.在Sub Form1_Unload()中加入下列語句:
Form1.Text1.LinkMode=0
Form1.Text2.LinkMode=0
此時DDE客戶程序向DDE服務器發(fā)出終止鏈接的事務,結束一次DDEML會話過程。
DDE的實現(xiàn)如圖3所示。
本系統(tǒng)采用了條碼自動識別技術,使車間生產(chǎn)線上的各種信息可以快速準確地傳遞到監(jiān)控管理系統(tǒng),以便系統(tǒng)及時地作出各種反應,提高了工廠生產(chǎn)效率。
在開發(fā)過程中,解決了Windows操作環(huán)境中數(shù)據(jù)實時采集的技術難題。同時,DDE不失為Windows下進程間交換信息的好辦法。Visual Basic這個Windows應用快速開發(fā)工具有不少優(yōu)點,用它來開發(fā)多媒體動畫、數(shù)據(jù)庫查詢等程序非常方便,但它作為一種解釋執(zhí)行語言,要將它用在工業(yè)現(xiàn)場實時監(jiān)控系統(tǒng)中,我們不得不慎重考慮它的運行速度可能帶來的影響,需要采取妥善的辦法加以克服。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論