新聞中心

EEPW首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > 基于條形碼技術(shù)的車間監(jiān)控系統(tǒng)的實(shí)時(shí)信息采集

基于條形碼技術(shù)的車間監(jiān)控系統(tǒng)的實(shí)時(shí)信息采集

作者: 時(shí)間:2006-05-07 來源:網(wǎng)絡(luò) 收藏

摘 要 探討了使用條形碼作為信息載體的車間監(jiān)控系統(tǒng)信息采集的實(shí)現(xiàn),分析了所需要的信息及其條碼編碼,介紹了Windows95環(huán)境下用RS-232串口中斷方式數(shù)據(jù)實(shí)時(shí)采集的實(shí)現(xiàn)方法,以及客戶/服務(wù)器機(jī)構(gòu)模式下數(shù)據(jù)采集模塊與監(jiān)控模塊之間實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)傳送(DDE)的手段。

本文引用地址:http://butianyuan.cn/article/255635.htm

關(guān)鍵詞 條形碼 數(shù)據(jù)采集 動(dòng)態(tài)數(shù)據(jù)交換(DDE) 中斷

隨著計(jì)算機(jī)的廣泛應(yīng)用,生產(chǎn)技術(shù)發(fā)生了革命性的變化,柔性制造系統(tǒng)(FMS)已在國外得到較廣泛應(yīng)用。但對目前我國的大多數(shù)企業(yè)來說,高度柔性化的制造系統(tǒng)仍是一個(gè)難以承受的負(fù)擔(dān),在一些生產(chǎn)量大的電器行業(yè),如電冰箱、洗衣機(jī)、空調(diào)器等,以人工裝配為主、生產(chǎn)工位多的生產(chǎn)流水線形式仍占主要地位。

由于缺乏信息監(jiān)測手段,此類生產(chǎn)系統(tǒng)會(huì)出現(xiàn)種種問題:工位負(fù)荷缺乏定量關(guān)系,無法隨生產(chǎn)目標(biāo)、生產(chǎn)條件的改變均衡生產(chǎn)沒有生產(chǎn)監(jiān)視信息,故障事件得不到及時(shí)處理物流流動(dòng)缺乏指導(dǎo),工位連接不暢導(dǎo)致阻塞和缺料事件。

條形碼以下簡稱條碼技術(shù)由于其輸入速度快、準(zhǔn)確度高、成本低、可靠性強(qiáng)等優(yōu)點(diǎn)而具有廣泛的應(yīng)用領(lǐng)域。我們開發(fā)的基于條碼技術(shù)的車間監(jiān)控管理系統(tǒng)是這種自動(dòng)識別技術(shù)在工業(yè)領(lǐng)域的應(yīng)用實(shí)例,其目的是為了監(jiān)控某復(fù)印機(jī)廠裝配流水線的生產(chǎn)狀況。載有各種生產(chǎn)信息的條碼或貼在部件和成品上,或放于相應(yīng)工位上,流水線出入口配有自動(dòng)條碼掃描器,各工位上則配有手動(dòng)條碼掃描器,這些條碼掃描器通過條碼掃描網(wǎng)絡(luò)儀連接到車間監(jiān)控計(jì)算機(jī)上。實(shí)際運(yùn)行時(shí),自動(dòng)或手工掃描器將條碼信息送入車間監(jiān)控計(jì)算機(jī)上,在其上運(yùn)行的監(jiān)控軟件可以動(dòng)態(tài)地模擬整個(gè)車間所有流水線的實(shí)時(shí)動(dòng)作。一旦發(fā)現(xiàn)各個(gè)工位的故障及警報(bào)信息,及時(shí)通知值班人員,值班人員可以通過該系統(tǒng)查詢故障及報(bào)警信息,并根據(jù)該系統(tǒng)提供的參考處理辦法調(diào)度維修人員進(jìn)行搶修。

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)的動(dòng)態(tài)顯示和生產(chǎn)調(diào)度。軟件操作系統(tǒng)采用Windows95,由于數(shù)據(jù)采集模塊涉及低層硬件操作,用C++比較合適,而監(jiān)控模塊兼顧動(dòng)畫和數(shù)據(jù)庫操作,我們采用了VB4.0。數(shù)據(jù)采集模塊和監(jiān)控模塊進(jìn)程之間條碼信息的交換采用Windows系統(tǒng)的動(dòng)態(tài)數(shù)據(jù)交換(DDE)實(shí)現(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串口進(jìn)行信息采集;(3)使用DDE實(shí)現(xiàn)數(shù)據(jù)采集模塊與監(jiān)控模塊的通訊。本文給出以上三方面功能的實(shí)現(xiàn)。

2 生產(chǎn)信息分析及編碼

車間監(jiān)控系統(tǒng)要用現(xiàn)代化的管理手段,在生產(chǎn)過程中,最合理地安排好生產(chǎn)流程,及時(shí)發(fā)現(xiàn)并排除故障,使各生產(chǎn)工序處于最理想的正常工作狀態(tài)。為此,所需的生產(chǎn)信息基本上可分為以下幾個(gè)方面:

工件監(jiān)視

工件(指裝配線上的部件或成品)的情況,包括當(dāng)前位置、裝配狀態(tài)、裝配時(shí)間、關(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ù)量,各工位實(shí)際勞動(dòng)負(fù)荷等。

故障監(jiān)視

包括直接故障及間接故障。直接故障是指明確包括故障源的故障信息,如設(shè)備故障、零件不足等;間接故障指未知故障源引發(fā)的系統(tǒng)級故障,如系統(tǒng)生產(chǎn)率明顯低于額定生產(chǎn)率等。

關(guān)鍵工位監(jiān)視

包括對直接影響整個(gè)生產(chǎn)系統(tǒng)流程的重要工位各種數(shù)據(jù)的監(jiān)視。主要有生產(chǎn)勞動(dòng)負(fù)荷相對飽和的工位、生產(chǎn)限制條件多的工位如零件品種多,供應(yīng)源多,輔助設(shè)備多等、技術(shù)工藝要求高的工位等等。

基于以上生產(chǎn)信息的分析,監(jiān)控管理系統(tǒng)必須實(shí)現(xiàn)對跟蹤、監(jiān)測對象的自動(dòng)識別。目前最好的辦法就是采用條碼自動(dòng)識別技術(shù)。工業(yè)上最常采用的是39碼,本系統(tǒng)也采用這一碼制。用39碼制設(shè)計(jì)以上生產(chǎn)信息所需的條碼如下:

· 工件標(biāo)簽條碼:每個(gè)成品或重要部件上都貼有條碼,是其身份的標(biāo)識。

· 考勤條碼:載有該工位上操作工的信息。

· 操作狀態(tài)條碼:載有裝配開始/結(jié)束信息,用于工位操作狀態(tài)的監(jiān)視。

· 設(shè)備故障/故障排除條碼:用于監(jiān)測設(shè)備故障。

· 異常報(bào)警條碼:用于表示除設(shè)備故障外的各種故障信息。

·流水線狀態(tài)條碼:載有流水線開工和停止生產(chǎn)等信息。

· 撤銷輸入條碼:表示撤銷前一次的條碼輸入,用于工位數(shù)據(jù)輸入的容錯(cuò)。

基于條形碼技術(shù)的車間監(jiān)控系統(tǒng)的實(shí)時(shí)信息采集

3 數(shù)據(jù)采集模塊的RS-232串口通訊

本監(jiān)控系統(tǒng)中條碼信息經(jīng)過條碼掃描器送到車間監(jiān)控計(jì)算機(jī)的串口COM2上(COM1被鼠標(biāo)占用)。所以條碼信息的實(shí)時(shí)采集就是串口數(shù)據(jù)實(shí)時(shí)采集。 Windows95平臺(tái)下串口通訊的實(shí)現(xiàn)有以下三種方法:

(1)定時(shí)采集方式。設(shè)置一個(gè)定時(shí)器,每隔一段時(shí)間產(chǎn)生一個(gè)WM_TIMER消息,該消息的相應(yīng)函數(shù)讀取串口緩沖器中的數(shù)據(jù)。這種方法實(shí)現(xiàn)簡單,但有以下幾個(gè)缺點(diǎn):一是受Windows計(jì)時(shí)器數(shù)據(jù)分辨率的限制,最高采樣頻率為18.2Hz。另外WM_TIMER消息在Windows消息隊(duì)列中優(yōu)先權(quán)低,可能得不到及時(shí)響應(yīng)。最重要的一點(diǎn)是Windows會(huì)將消息隊(duì)列中沒有來得及處理的幾個(gè)WM_TIMER消息合并成一個(gè),這意味著前幾次定時(shí)器消息沒有得到響應(yīng),因而可能導(dǎo)致數(shù)據(jù)丟失。

(2)在Win95操作平臺(tái)下,利用其支持多線程的特點(diǎn),開辟一個(gè)線程專門讀取串口數(shù)據(jù)。每當(dāng)串口有數(shù)據(jù)到來時(shí),此線程被激活,讀取串口緩沖器中的數(shù)據(jù);無數(shù)據(jù)時(shí),該線程被掛起。盡管可以設(shè)置線程的優(yōu)先級,這種采集方式仍稱不上實(shí)時(shí)通訊。

(3 保護(hù)模式下的中斷方式。Windows支持一種特殊的DOS服務(wù),稱為DOS保護(hù)模式接口DPMI(DOS protected Mode Interface),由一些INT 2FH和INT 31H組成??梢杂密浿袛啵蒊NT 31H掛住保護(hù)模式中斷向量,以中斷方式處理外部實(shí)時(shí)事件。這種方式對數(shù)據(jù)量不太大但需要準(zhǔn)確及時(shí)響應(yīng)的條碼信息采集很適用,因此,我們采用這種方式。具體實(shí)現(xiàn)方案如下:

信息采集模塊主窗口第一次被創(chuàng)建時(shí),Windows向它傳遞WM_CREATE消息,在該消息響應(yīng)函數(shù)中調(diào)用INT 31H的0204H功能將老的中斷向量保存起來,用INT 31H的0205H號功能將中斷向量指向新的中斷服務(wù)例程監(jiān)控管理模塊退出時(shí),Windows將向它傳遞WM_DESTROY消息在該消息響應(yīng)函數(shù)中調(diào)用INT 31H的0205H功能恢復(fù)老的中斷服務(wù)例程。以上步驟在VC++1.52集成開發(fā)環(huán)境中,采用嵌入?yún)R編方式加以實(shí)現(xiàn)。主要包括以下幾個(gè)函數(shù)

· 初始化串口2(VOID PASCAL InitCom2())

保存COM2的當(dāng)前狀態(tài),然后把COM2的波特率設(shè)置為9600,每個(gè)字符8bits,1個(gè)停止位。允許0xOc號中斷。

· 中斷初始化(BOOL PASCAL InitComm())

調(diào)用DMPI,保存舊的0CH號保護(hù)模式中斷向量,設(shè)置新的保護(hù)模式中斷服務(wù)例程。

· 中斷服務(wù)例程(void_interrupt_far new_int())

處理信息的接收。判斷信息類型。如是異常信息,就向主窗口發(fā)送一自定義WM_INTERRUPT1消息;如是一般信息,則發(fā)送一WM_INTERRUPT2消息。

· 中斷恢復(fù)(VOID PASCAL Restore_Comm())

恢復(fù)COM2狀態(tài),恢復(fù)0CH保護(hù)模式向量。

每當(dāng)串口有條碼信息到來,0CH中斷將發(fā)生,保證消息得到及時(shí)處理,因而實(shí)現(xiàn)了條碼信息的實(shí)時(shí)采集。

4 數(shù)據(jù)采集模塊與監(jiān)控模塊之間DDE的實(shí)現(xiàn)

數(shù)據(jù)采集模塊采用中斷方式實(shí)時(shí)采集串口COM2的條碼信息的同時(shí),還需將所采集的數(shù)據(jù)傳遞給監(jiān)控模塊。這兩者之間的信息交換采用Windows系統(tǒng)的動(dòng)態(tài)數(shù)據(jù)交換(DDE)來實(shí)現(xiàn)。

4.1 動(dòng)態(tài)數(shù)據(jù)交換(DDE)

動(dòng)態(tài)數(shù)據(jù)交換(DDE)是一種進(jìn)程之間的通信形式,而DDE會(huì)話則是實(shí)現(xiàn)進(jìn)程通信的手段,它總是在一個(gè)客戶程序和一個(gè)服務(wù)器程序之間進(jìn)行的。啟動(dòng)會(huì)話并要求接收數(shù)據(jù)的應(yīng)用程序是客戶程序。響應(yīng)客戶程序的要求并提供數(shù)據(jù)的程序是服務(wù)器程序。

在早期的Windows版本中,DDE會(huì)話是通過進(jìn)程之間互相發(fā)送消息的形式來實(shí)現(xiàn)的,DDE協(xié)議就是一組預(yù)定義的消息,被發(fā)送的數(shù)據(jù)包含在消息的兩個(gè)參數(shù)(wParam和1Param)中。

在Windows3.0以后的版本中,采用了一種先進(jìn)的DDE方案,即動(dòng)態(tài)數(shù)據(jù)交換管理庫(DDEML),DDEML提供了一系列API,將傳統(tǒng)的DDE消息及附屬的各種特征封裝在一個(gè)函數(shù)調(diào)用接口中,應(yīng)用程序通過調(diào)用DDEML中的函數(shù)實(shí)現(xiàn)DDE會(huì)話,從而交換數(shù)據(jù)或互相提供服務(wù)。在DDEML中,進(jìn)程之間傳遞的是事務(wù)事務(wù)是對數(shù)據(jù)和服務(wù)的請求,表現(xiàn)為一組預(yù)定義的常量,整個(gè)通訊過程都是圍繞著事務(wù)進(jìn)行的:首先,客戶程序向服務(wù)器程序發(fā)出建立聯(lián)接的事務(wù),服務(wù)器響應(yīng)之后,聯(lián)接便建立起來;之后,客戶向服務(wù)器發(fā)出請求數(shù)據(jù)的事務(wù),服務(wù)器便向客戶提供所需的數(shù)據(jù),這一過程可以在建立聯(lián)接之后多次進(jìn)行;最后,當(dāng)客戶不再需要數(shù)據(jù)時(shí),便向服務(wù)器發(fā)出終止聯(lián)接的事務(wù),從而結(jié)束一次DDEML會(huì)話過程。

4.2 DDE服務(wù)器的實(shí)現(xiàn)(工具為VC++1.52)

DDE會(huì)話有三種方式,冷鏈、溫鏈、熱鏈。由于采集的數(shù)據(jù)要及時(shí)得到監(jiān)控程序的處理,我們就采用了熱鏈方式來傳送數(shù)據(jù),即只要一有數(shù)據(jù)到來,采集服務(wù)器就立即把此數(shù)據(jù)傳送到監(jiān)控程序。

下面我們應(yīng)用DDEML機(jī)制來實(shí)現(xiàn)數(shù)據(jù)傳輸編程。其步驟如下:

步驟1.創(chuàng)建用于處理各類DDEML事務(wù)的回調(diào)函數(shù)(HDDEDATA EXPENTRY_export DdeCallBack(WORD wType,WORD wFmt,HCONV hConv,HSZ hxz1,HSZ hsz2,HDDEDATA hData,DWORD1Data1,DWORD 1Data2)

在DDEML中,進(jìn)程之間傳遞的是事務(wù),根據(jù)實(shí)際的需要,回調(diào)函數(shù)應(yīng)處理的事務(wù)如下:

·XTYP_CONNECT及XTYP_CONNECT_CONFIRM

證實(shí)客戶是否已連接到了采集服務(wù)器。

·XTYP_ADSTART

回復(fù)客戶熱鏈開始的申請。

·XTYP_ADVREQ

當(dāng)采集服務(wù)器一接收到信息時(shí),就向客戶傳遞此信息,實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)交換。

·XTYP_ADVSTOP

回復(fù)客戶熱鏈結(jié)束的申請。

·XTYP_DISCONNECT

回復(fù)客戶和服務(wù)器之間鏈接結(jié)束的申請。

步驟2.初始化DDEML (BOOL PASCAL InitializeDDEML(HWNDhWnd))通知DDEML該程序?qū)㈤_始使用DDE機(jī)制。

步驟3.登記服務(wù)名、主題名和項(xiàng)目名(BOOL PASCAL InitializeDDEML(HWND hWnd))

這涉及到WINDOWS的三級服務(wù)名稱管理體系。它們是;服務(wù)名(Server Name)、主題名(Topic Name)、項(xiàng)目名(Item Name)。首先,一個(gè)應(yīng)用程序作為服務(wù)器必須有一個(gè)服務(wù)名,當(dāng)客戶應(yīng)用程序希望和該服務(wù)器會(huì)話時(shí),就在發(fā)出鏈接事務(wù)時(shí)指定這個(gè)服務(wù)器,從而識別出該服務(wù)器;主題名是指一個(gè)服務(wù)器所支持的各類會(huì)話主題的名稱,在一次會(huì)話期間,客戶程序只能和服務(wù)器就某一主題進(jìn)行會(huì)話,客戶在發(fā)出鏈接事務(wù)時(shí)指定所關(guān)心的會(huì)話主題;項(xiàng)目名是關(guān)于一個(gè)主題的各類數(shù)據(jù)項(xiàng)的名稱,在鏈接建立以后,客戶可以請求不同項(xiàng)目的數(shù)據(jù),但都只能是屬于當(dāng)前主題范圍之內(nèi)。一個(gè)服務(wù)器可以決定自己所能支持的主題以及每個(gè)主題所擁有的各個(gè)項(xiàng)目。因此,服務(wù)名使客戶以找到服務(wù)器,主題名和項(xiàng)目名則合起來標(biāo)識客戶所需要的數(shù)據(jù)。

在這里,服務(wù)名為Server,主題名為TiaoMa,項(xiàng)目名則有兩個(gè),一個(gè)名為BaoJing,專門傳送異常信息;另一個(gè)名為RuKu,專門傳送一般信息。

步驟4.結(jié)束DDEML使用(BOOL PASCAL cleanUpDDEML(HWND hWnd))

當(dāng)客戶已不再需要服務(wù)器的數(shù)據(jù)時(shí),服務(wù)器需要被撤銷。

4.3 DDE客戶的實(shí)現(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ù)名、主題名和項(xiàng)目名。在Startup Form假設(shè)為Form1)中放入兩個(gè)文本框(假設(shè)為Text1,Text2),然后在文本框上單擊右鍵,在彈出菜單中選擇Properties屬性,在彈出的屬性對話框中將Text1和Text2的LinkTopic都設(shè)置為“Server1TiaoMa”,LinkItem為“0”Text1的LinkIdtem設(shè)置為“RuKu ”, Text2的zlinkIdtem設(shè)置為“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ù)啟動(dòng)采集服務(wù)器同時(shí)也是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

此時(shí)DDE客戶程序向DDE服務(wù)器發(fā)出終止鏈接的事務(wù),結(jié)束一次DDEML會(huì)話過程。

DDE的實(shí)現(xiàn)如圖3所示。

本系統(tǒng)采用了條碼自動(dòng)識別技術(shù),使車間生產(chǎn)線上的各種信息可以快速準(zhǔn)確地傳遞到監(jiān)控管理系統(tǒng),以便系統(tǒng)及時(shí)地作出各種反應(yīng),提高了工廠生產(chǎn)效率。

在開發(fā)過程中,解決了Windows操作環(huán)境中數(shù)據(jù)實(shí)時(shí)采集的技術(shù)難題。同時(shí),DDE不失為Windows下進(jìn)程間交換信息的好辦法。Visual Basic這個(gè)Windows應(yīng)用快速開發(fā)工具有不少優(yōu)點(diǎn),用它來開發(fā)多媒體動(dòng)畫、數(shù)據(jù)庫查詢等程序非常方便,但它作為一種解釋執(zhí)行語言,要將它用在工業(yè)現(xiàn)場實(shí)時(shí)監(jiān)控系統(tǒng)中,我們不得不慎重考慮它的運(yùn)行速度可能帶來的影響,需要采取妥善的辦法加以克服。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉