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