鄭海成 謝云
(廣東工業(yè)大學(xué)自動化學(xué)院)
隨著我國社會經(jīng)濟(jì)的持續(xù)快速發(fā)展,長時(shí)間的站立排隊(duì)已成為金融機(jī)構(gòu)、電信、醫(yī)院、政府辦事大廳等場所的常見現(xiàn)象,以通信技術(shù)與計(jì)算機(jī)技術(shù)為基礎(chǔ)的智能排隊(duì)管理系統(tǒng)應(yīng)運(yùn)而生。而傳統(tǒng)的排隊(duì)系統(tǒng)中采用有線叫號終端,并且只有基本的呼叫票號功能,無法應(yīng)對日益提升的客戶功能需求。同時(shí),由于傳統(tǒng)叫號器采用都是較為落后的8位單片機(jī)處理器,無法應(yīng)付大客戶量、大通信量及復(fù)雜的任務(wù)調(diào)度的需求[1]。
因此,本文設(shè)計(jì)了一種基于嵌入式技術(shù)智能排隊(duì)叫號終端,由32位處理器代替?zhèn)鹘y(tǒng)的8位處理器,并通過ZIGBEE通信模塊實(shí)現(xiàn)無線叫號功能。相對傳統(tǒng)叫號器增加票號轉(zhuǎn)移、客戶評價(jià)、VIP客戶特呼等功能,較好的解決了排隊(duì)系統(tǒng)中存在的幾個(gè)實(shí)際問題。并通過嵌入式操作系統(tǒng)uC/OS-II進(jìn)行銀行任務(wù)調(diào)度,更好地進(jìn)行復(fù)雜業(yè)務(wù)的管理。
每個(gè)叫號終端作為一個(gè)終端節(jié)點(diǎn),通過ZIGBEE模塊設(shè)置其節(jié)點(diǎn)地址,每個(gè)叫號終端有自己特定的物理 ID地址(UID、PID、GID、TID)。在主控系統(tǒng)中應(yīng)用的通信模塊選用中心節(jié)點(diǎn)模式,有自己唯一的中心節(jié)點(diǎn)地址。各個(gè)叫號終端通過主從模式與主控系統(tǒng)進(jìn)行叫號業(yè)務(wù)通信[2],主控系統(tǒng)通過接收的數(shù)據(jù)體區(qū)分每個(gè)叫號終端的物理 ID,從而區(qū)分不同窗口發(fā)過來的請求信息,叫號終端與主控系統(tǒng)關(guān)系圖如圖1所示。

圖1 叫號終端與主控系統(tǒng)關(guān)系圖
叫號終端與外圍設(shè)備連接框圖如圖2 所示。智能叫號終端主要包括處理器主控模塊、鍵盤掃描模塊、EEPROM存儲模塊、ZIGBEE通信模塊和液晶顯示模塊等。

圖2 叫號終端與外圍設(shè)備連接框圖
處理器通過UART0接口與ZIGBEE模塊連接,與外界進(jìn)行數(shù)據(jù)交互,并通過UART1接口與評價(jià)器連接,實(shí)現(xiàn)每次叫號服務(wù)后的評價(jià)服務(wù)。此外,本設(shè)計(jì)通過EEPROM的掉電存儲功能,給每個(gè)叫號終端標(biāo)識一個(gè)唯一的物理ID,每次上電前進(jìn)行ID驗(yàn)證,此ID地址也在后續(xù)的通信格式上作為終端節(jié)點(diǎn)的區(qū)分地址,從而使主控系統(tǒng)能很好地識別不同窗口的叫號終端發(fā)過來的票號申請信息,從而更好地進(jìn)行票號管理和調(diào)度。
如圖 3所示,本文的主處理器選用 ST公司的STM32F103VBH6芯片,該芯片基于ARM Cortex-M3 32位的 RISC內(nèi)核,工作頻率最高可達(dá) 72MHz[3]。ZIGBEE通信模塊選用順舟科技的SZ05模塊,處理器與通信模塊通過USART1_TX和USART1_RX引腳連接,在叫號終端中應(yīng)用的通信模塊選用終端節(jié)點(diǎn)工作模式(即把通信模塊上的DS引腳接地)。

圖3 主處理器與外圍設(shè)備通信電路設(shè)計(jì)
系統(tǒng)軟件結(jié)構(gòu)設(shè)計(jì)主要包括3部分:叫號終端任務(wù)狀態(tài)優(yōu)先級設(shè)計(jì)、叫號業(yè)務(wù)狀態(tài)流程設(shè)計(jì)和叫號終端通信業(yè)務(wù)數(shù)據(jù)格式設(shè)計(jì)。
本設(shè)計(jì)中,基于uC/OS-II嵌入式操作系統(tǒng)的系統(tǒng)任務(wù)優(yōu)先級劃分如表1所示[4]。

表1 叫號終端系統(tǒng)任務(wù)優(yōu)先級劃分
由于在uC/OS-II中最多可以支持64個(gè)任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0為最高優(yōu)先級,63為最低級。系統(tǒng)保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低優(yōu)先級的任務(wù),所有用戶可以使用的任務(wù)數(shù)有56個(gè),所以最高優(yōu)先級任務(wù)從5開始。
本設(shè)計(jì)中,除了Task_Init和Task_Idle任務(wù)為系統(tǒng)自帶,其他9個(gè)任務(wù)均由用戶創(chuàng)建。Task_Init是系統(tǒng)的第一個(gè)任務(wù),對系統(tǒng)時(shí)鐘和底層設(shè)備進(jìn)行初始化,創(chuàng)建所有事件和其他各項(xiàng)用戶任務(wù),并對系統(tǒng)進(jìn)行監(jiān)測;Task_Login任務(wù)主要完成銀行柜臺員工的身份登錄和發(fā)送信息驗(yàn)證,當(dāng)用戶登錄后,此任務(wù)將一直被掛起,直到有用戶退出登錄為止;Task_Uart1任務(wù)是叫號終端與主控系統(tǒng)進(jìn)行業(yè)務(wù)通信,包括叫號、棄號、轉(zhuǎn)移、VIP特呼等業(yè)務(wù)狀態(tài)的申請;Task_Uart0相對Task_Uart1優(yōu)先級略低,是因?yàn)榇巳蝿?wù)是有條件性的,在每次完成辦理之后,才調(diào)用此任務(wù)把通信對象切換成叫號終端與評價(jià)器,客戶通過評價(jià)器進(jìn)行評價(jià),完成最終業(yè)務(wù)辦理。評價(jià)完畢后,此任務(wù)將一直被掛起直到下一次業(yè)務(wù)的辦理結(jié)束;Task_Timer_QueNum任務(wù)主要是通過定時(shí)器,每隔十秒定時(shí)中斷向主控系統(tǒng)發(fā)出申請更新排隊(duì)人數(shù);Task_Timer_Timout任務(wù)是在每次由叫號終端向主控系統(tǒng)發(fā)送命令申請時(shí),若超過三秒未收到應(yīng)答,則自動跳轉(zhuǎn)到上一個(gè)系統(tǒng)狀態(tài);Task_Keyscan任務(wù)是整個(gè)叫號終端的核心,主要是進(jìn)行鍵盤掃描和具體業(yè)務(wù)流程辦理,此任務(wù)的具體功能實(shí)現(xiàn)將在下一節(jié)的業(yè)務(wù)狀態(tài)流程進(jìn)行詳細(xì)分析;Task_LCD_Dis任務(wù)主要負(fù)責(zé)驅(qū)動 LCD16032進(jìn)行排隊(duì)人數(shù)和工作狀態(tài)的實(shí)時(shí)更新;Task_LED任務(wù)主要是負(fù)責(zé)驅(qū)動4個(gè)LED(分別代表連接或未連接、已連上、通信中、通信完畢)進(jìn)行當(dāng)前工作狀態(tài)的顯示;Task_Stat主要負(fù)責(zé)業(yè)務(wù)信息的通信,包括客戶的評價(jià)結(jié)果信息等。
本設(shè)計(jì)中,叫號終端的業(yè)務(wù)狀態(tài)流程如圖4所示。整個(gè)叫號業(yè)務(wù)共設(shè)定了14個(gè)全局系統(tǒng)狀態(tài)變量,此14個(gè)系統(tǒng)狀態(tài)與上述的9個(gè)用戶任務(wù)嵌套運(yùn)用。而主要的系統(tǒng)狀態(tài)跳變都在 Task_Keyscan任務(wù)中進(jìn)行。以下是具體系統(tǒng)狀態(tài)在各任務(wù)中的劃分:
在 Task_Init任務(wù)下,主要包括 SYS_POWER_ON、SYS_WAITING_MODIFY_SIGN、SYS_LID_MODIFYING、SYS_LID_MODIFY_ END四個(gè)系統(tǒng)狀態(tài),主要完成系統(tǒng)時(shí)鐘、串口、定時(shí)器等初始化。并在此任務(wù)中等待三秒,若有任何按鍵按下,則跳入到修改硬件號中,此設(shè)計(jì)是為了直接修改不同叫號終端的物理ID,即通過對EEPROM存儲器的讀寫,進(jìn)行物理ID的更新。
在 Task_Login任務(wù)下,主要包括 SYS_CONNECTED_WAIT_LOGIN_UID、SYS_CONNECTED_WAIT_LOGIN_PSW和SYS_CONNECTED_LOGOUT_QUERY三個(gè)系統(tǒng)狀態(tài),主要負(fù)責(zé)員工的身份登錄和退出操作。
在 Task_Keyscan任務(wù)中,主要包括 SYS_CONNECTED_LOGINED_C_UNPROCESS、SYS_CONNECTED_LOGINED_P、SYS_CONNECTED_LOGINED_MOVESERV、SYS_CONNECTED_LOGINED_C_PROCESSING、SYS_CONNECTED_LOGINE-D_SPCALL五個(gè)系統(tǒng)狀態(tài)。主要包括叫號流程中的順呼、重呼、VIP特呼、轉(zhuǎn)移等功能的具體實(shí)現(xiàn)。

圖4 叫號業(yè)務(wù)狀態(tài)流程圖
叫號終端與主控系統(tǒng)的通信數(shù)據(jù)格式如圖 5所示,其中UID為無線網(wǎng)絡(luò)中的入網(wǎng)設(shè)備唯一識別號;PID為端口號;GID為組編號,指明硬件所屬組;TID為硬件類型號,這4個(gè)ID已被固化到每個(gè)叫號終端的EEPROM存儲器中,作為不同叫號終端的區(qū)別標(biāo)識號。每次發(fā)送數(shù)據(jù)將直接從存儲器中進(jìn)行讀取[5]。

圖5 叫號終端與主控系統(tǒng)的通信數(shù)據(jù)格式
而數(shù)據(jù)體部分則進(jìn)一步細(xì)分為四位的消息類型和若干參數(shù),消息類型代表不同的業(yè)務(wù)流程,而后續(xù)的參數(shù)為特定業(yè)務(wù)流程下要傳輸?shù)臄?shù)據(jù)體。例如在“用戶登錄驗(yàn)證”狀態(tài)下,發(fā)送的數(shù)據(jù)體為“1001 |UserID | Pwd”。以下為不同業(yè)務(wù)流程下的數(shù)據(jù)體部分的具體命令格式,如表2所示。

表2 不同業(yè)務(wù)流程下的數(shù)據(jù)體具體命令格式
通信中斷接收數(shù)據(jù)處理流程如圖6所示,在通信中斷接收部分,對收到的數(shù)據(jù)包進(jìn)行校驗(yàn)。首先檢測是否有緩沖區(qū)存儲數(shù)據(jù)包,若無,則說明上一次中斷接收數(shù)據(jù)未完成,不接收新數(shù)據(jù);接著檢測包長度是否正確,如果不正確,則說明不是一個(gè)完整的數(shù)據(jù)包,拒絕接收。最后進(jìn)行幀頭幀尾校驗(yàn),本設(shè)計(jì)中設(shè)置的幀頭為AA BB,幀尾為AA CC。經(jīng)過此校驗(yàn)后進(jìn)行四個(gè)ID的檢測,以驗(yàn)證接收對象身份。若以上條件均通過,則為有效數(shù)據(jù)包,進(jìn)行數(shù)據(jù)體存儲判斷。

圖6 通信中斷接收數(shù)據(jù)處理流程
叫號終端所用的主控系統(tǒng)如圖7所示。PC機(jī)連接ZIGBEE PC終端,設(shè)置為中心節(jié)點(diǎn)模式;叫號終端接ZIGBEE模塊,設(shè)置為終端節(jié)點(diǎn)模式[6]。

圖7 主控系統(tǒng)軟件界面示意圖
(1)叫號終端根據(jù)不同的業(yè)務(wù)類型,以“消息類型+若干參數(shù)”的數(shù)據(jù)格式發(fā)送命令到主控系統(tǒng);
(2)主控系統(tǒng)接收到叫號終端發(fā)送過來的數(shù)據(jù)后,進(jìn)行消息類型分析和參數(shù)分析,并從數(shù)據(jù)庫調(diào)用相關(guān)數(shù)據(jù)發(fā)送回叫號終端;
(3)叫號終端接收到主控系統(tǒng)的應(yīng)答信號后,分析數(shù)據(jù)體并進(jìn)行相應(yīng)的系統(tǒng)狀態(tài)跳變。
(1)叫號終端向主控系統(tǒng)發(fā)送數(shù)據(jù)體為:11 11 AA BB 05 00 00 00 01 00 02 00 01 00 01 00 01 00 01 00 15 31 30 30 31 7c 31 32 33 30 7c 31 32 33 30 00 AA CC。可分析消息類型為:1001 參數(shù)1:1230 參數(shù)2:1230。即在用戶登錄狀態(tài)下,發(fā)送工名為1230,密碼為1230的申請驗(yàn)證信息;
(2)主控系統(tǒng)接到數(shù)據(jù)后,給叫號終端返回應(yīng)答數(shù)據(jù)體,具體格式為:2001 | 1 | 員工名稱|窗口號|窗口名稱;
(3)叫號器接收到主控系統(tǒng)的應(yīng)答信號后,對數(shù)據(jù)體進(jìn)行分離分析,并在LCD上顯示員工名稱、窗口號和窗口名稱信息,如圖8所示。并把系統(tǒng)狀態(tài)跳轉(zhuǎn)到“空閑”狀態(tài),從而可以開始叫號業(yè)務(wù)辦理。

圖8 叫號終端收到登錄應(yīng)答后的顯示界面
本文設(shè)計(jì)了基于STM32的嵌入式銀行排隊(duì)系統(tǒng)智能叫號終端,并對其硬件電路和軟件設(shè)計(jì)流程進(jìn)行詳細(xì)分析,經(jīng)過與實(shí)際主控系統(tǒng)的聯(lián)合調(diào)試和數(shù)個(gè)銀行機(jī)構(gòu)的實(shí)際應(yīng)用表明:本文設(shè)計(jì)的智能叫號終端具有穩(wěn)定性好、實(shí)時(shí)性高、抗干擾能力強(qiáng)的特點(diǎn),適用于對業(yè)務(wù)功能和復(fù)雜度要求較高的場所,此外也能廣泛應(yīng)用于火車站、證券中心、醫(yī)院等管理系統(tǒng)中。
[1]姜斯盈.嵌入式排隊(duì)抽號控制系統(tǒng)設(shè)計(jì)[J].科學(xué)之友,2011,25(52):68-71.
[2]滕麗麗.基于單片機(jī)的銀行排隊(duì)系統(tǒng)的設(shè)計(jì)[J].信息科技,2010,22(9).
[3]STMicroelectronic.STM32F103VB HandBook.[EB/OL].[2011-8].http://www.st.com/internet/mcu/product/164493.jsp
[4]邵貝貝.嵌入式實(shí)時(shí)操作系統(tǒng)uc/os-II(第二版)[M].北京:北京航空航天大學(xué)出版社,2007:39-47.
[5]劉軍.例說 STM32[M].北京:北京航空航天大學(xué)出版社,2011:220-265.
[6]ZIGBEE Alliance.ZIGBEE Home Automation Certified Products.[EB/OL].[2011-8].http://www.ZIGBEE.org/Products/CertifiedProducts/ZIGBEEHomeAutomation.aspx