穆莉莉 倪申翔 薛程光
摘要:為提高煤礦井下斜巷提升絞車的安全運(yùn)行及信號(hào)自動(dòng)控制,設(shè)計(jì)了一種基于嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II的絞車控制信號(hào)裝置串口屏人機(jī)交互系統(tǒng)。系統(tǒng)基于Cortex-M3內(nèi)核微控制器STM32F101C8T6硬件平臺(tái),采用μC/OS-II實(shí)現(xiàn)絞車控制器與串口屏的數(shù)據(jù)通信,實(shí)現(xiàn)了絞車斜巷中各聲光信號(hào)器歷史數(shù)據(jù)記錄、當(dāng)前狀態(tài)顯示、打點(diǎn)、語(yǔ)音播報(bào)及絞車電機(jī)實(shí)時(shí)控制等。實(shí)驗(yàn)表明,采用μC/OS-II進(jìn)行人機(jī)交互及絞車控制等多任務(wù)管理,增強(qiáng)了系統(tǒng)的穩(wěn)定性,提高了系統(tǒng)控制的實(shí)時(shí)性。
關(guān)鍵詞:μC/OS-II;絞車控制;串口屏;人機(jī)交互
中圖分類號(hào):TD534.6文獻(xiàn)標(biāo)志碼:A文章編號(hào):1672-1098(2014)04-0068-05
目前國(guó)內(nèi)煤礦井下斜巷提升普遍采用聲光信號(hào)器和絞車控制信號(hào)裝置手動(dòng)發(fā)送打點(diǎn)和語(yǔ)音信號(hào)的方式來(lái)對(duì)絞車進(jìn)行控制[1]。在該方式下,信號(hào)把鉤工與絞車司機(jī)通過(guò)打點(diǎn)音和語(yǔ)音通話及時(shí)反饋斜巷狀況,相對(duì)早期的打點(diǎn)器和電鈴有很大的進(jìn)步[2],但對(duì)于布置多臺(tái)聲光信號(hào)器的長(zhǎng)距離運(yùn)輸斜巷,存在多臺(tái)聲光信號(hào)器同時(shí)發(fā)送控制信號(hào)的情況發(fā)生,絞車司機(jī)將無(wú)法準(zhǔn)確區(qū)分具體打點(diǎn)和語(yǔ)音位置,并且絞車控制信號(hào)裝置無(wú)打點(diǎn)、語(yǔ)音和絞車運(yùn)行記錄功能,不利于提高生產(chǎn)調(diào)度與管理。因此設(shè)計(jì)一種絞車控制信號(hào)裝置,通過(guò)人機(jī)交互系統(tǒng)實(shí)時(shí)顯示和記錄井下斜巷工作面狀況將成為提高煤礦產(chǎn)業(yè)信息化和安全性的一種發(fā)展趨勢(shì)[3]。
串口屏由于其簡(jiǎn)單的通訊接口和友好的多功能觸摸界面的集成化設(shè)計(jì),已廣泛運(yùn)用于人機(jī)界面中。在與串口屏通訊的過(guò)程中,以往的方式均采用前、后臺(tái)系統(tǒng),在處理多任務(wù)時(shí),系統(tǒng)的實(shí)時(shí)性無(wú)法得到保證[4]。因此,在所研制的一種絞車控制信號(hào)裝置上,對(duì)人機(jī)交互系統(tǒng)進(jìn)行了詳細(xì)設(shè)計(jì)。采用了基于Cortex-M3內(nèi)核微控制器(STM32F101C8T6)硬件平臺(tái),結(jié)合嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II對(duì)系統(tǒng)多機(jī)多任務(wù)進(jìn)行管理,以提高系統(tǒng)控制的實(shí)時(shí)性,最終實(shí)現(xiàn)了對(duì)絞車控制裝置網(wǎng)絡(luò)中不同任務(wù)的實(shí)時(shí)顯示和歷史記錄保存。
1系統(tǒng)硬件設(shè)計(jì)
11串口屏介紹
串口屏由于內(nèi)部嵌入32位處理器,集成化程度高,本身就是一個(gè)獨(dú)立的系統(tǒng),用戶只需利用單片機(jī)串口發(fā)送相應(yīng)的指令,就可以實(shí)現(xiàn)圖片、文本和曲線的顯示,給用戶設(shè)計(jì)帶來(lái)極大的方便。
選用廣州大彩公司的工業(yè)串口屏DC48270S043-01,串口屏內(nèi)部結(jié)構(gòu)如圖1所示,其內(nèi)部采用Cortex-M3+FPGA雙核設(shè)計(jì),功能強(qiáng)大,可以提供USB口工程下載、發(fā)送和接收串口指令緩存區(qū)數(shù)據(jù)、控制矩陣鍵盤和RTC實(shí)時(shí)時(shí)鐘等外設(shè)。FPGA主要實(shí)現(xiàn)NandFlash讀取和TFT-LCD控制顯示。
圖1串口屏內(nèi)部結(jié)構(gòu)12系統(tǒng)電路設(shè)計(jì)
為實(shí)現(xiàn)主機(jī)與串口屏間始終處于實(shí)時(shí)高效和準(zhǔn)確無(wú)誤的通訊狀態(tài),采用了如圖2所示的系統(tǒng)構(gòu)架。其中,主機(jī)與串口屏分別采用33 VDC和12 VDC供電。主機(jī)微控制器選用ARM公司生產(chǎn)的基于Cortex-M3內(nèi)核的STM32F101C8T6,該微控制器性價(jià)比較高,工作頻率最高達(dá)36 MHz,具有64kFlash,10kSRAM, 2個(gè)通用定時(shí)器,3個(gè)串口,57個(gè)IO口等,豐富的外設(shè)滿足了系統(tǒng)設(shè)計(jì)要求。
系統(tǒng)主時(shí)鐘源選用8 MHz頻率高速外部振蕩器。實(shí)時(shí)時(shí)鐘源選用32768 kHz頻率低速外部振蕩器,它們?yōu)橄到y(tǒng)提供了準(zhǔn)確的時(shí)鐘頻率;利用JTAG接口在線調(diào)試及代碼下載與調(diào)試節(jié)省了大量的調(diào)試時(shí)間;串口屏的DIN和DOUT口選用TTL串口通信方式直接與主控制器的USART1的PA9、PA10接口連接進(jìn)行數(shù)據(jù)通訊,節(jié)省了RS232電平轉(zhuǎn)TTL電平電路的設(shè)計(jì)。
圖2人機(jī)交互系統(tǒng)電路示意圖2系統(tǒng)軟件設(shè)計(jì)
21系統(tǒng)功能介紹
結(jié)合斜巷中絞車控制信號(hào)裝置(主機(jī))和多聲光信號(hào)器(分機(jī))相互傳送打點(diǎn)、語(yǔ)音信號(hào)的方式,對(duì)人機(jī)交互系統(tǒng)的功能做了規(guī)劃(見(jiàn)圖3)。主機(jī)接收各臺(tái)分機(jī)發(fā)送的打點(diǎn)、講話等觸發(fā)事件信號(hào)的同時(shí),串口屏使用圖標(biāo)控件實(shí)時(shí)顯示各分機(jī)的通訊狀態(tài),并利用串口屏內(nèi)部128KFlash對(duì)分機(jī)事件進(jìn)行記錄。串口屏矩陣鍵盤和按鈕等控件主要是上傳更新通知至主機(jī),控制絞車運(yùn)行及主機(jī)打點(diǎn)、講話等事件地觸發(fā)、顯示與記錄。
圖3系統(tǒng)功能圖22串口屏指令集
DC48270S043-01串口屏的指令集包括組態(tài)控件指令集和基本指令集,指令幀如表1所示,由幀頭(EE)、指令、指令參數(shù)、幀尾(FF FC FF FF)組成,其中指令數(shù)值為十六進(jìn)制。若指令參數(shù)大于一個(gè)字節(jié),采用高字節(jié)在前,低字節(jié)在后的方式發(fā)送。組態(tài)控件指令包括:按鈕控件ID值上傳、更新文本控件、動(dòng)畫(huà)控件顯示和圖標(biāo)控件等;基本指令包括:矩陣鍵盤控制、Flash讀寫和讀取RTC時(shí)鐘等。
表1串口屏指令幀
指令集指令指令參數(shù) 矩陣鍵盤12/13K1 Flash讀寫88/87Adr4 L2/Adr4 Dn 讀RTC82\ 文本B1 11Sid2 Cid2 11 Sn 圖標(biāo)B1 26Sid2 Cid2 00/01 Id1 動(dòng)畫(huà)B1 20Sid2 Cid2 23指令幀的發(fā)送與接收
串口屏指令幀的接收與發(fā)送采用主微控制器串口1外設(shè)中斷方式,指令幀的接收是先將指令緩入緩存區(qū)rdata[QUEUE-MAX-SIZE],然后通過(guò)判斷幀頭、幀尾定時(shí)循環(huán)地從指令緩入緩存區(qū)中提取串口屏發(fā)送至主機(jī)的每條指令幀,相關(guān)代碼如下:
u8 data=USART1->DR;
/*串口1接受一個(gè)字節(jié)數(shù)據(jù)*/
queue-push(data);/*緩入rdata緩存區(qū)*/
if(queue-find-cmd(buf,len)> 0);/*指令幀幀頭和幀尾判斷,為真時(shí)進(jìn)行指令類型判斷,buf:緩沖區(qū)指針,len:指令幀長(zhǎng)度*/
由于串口屏每條指令幀包含字節(jié)數(shù)量較大,當(dāng)各分機(jī)與主機(jī)間通訊頻繁時(shí),若采用主微控制器串口直接發(fā)送每個(gè)字節(jié),則占用了系統(tǒng)大量時(shí)間,因此系統(tǒng)的實(shí)時(shí)性無(wú)法得到保證。本設(shè)計(jì)中主機(jī)根據(jù)各分機(jī)發(fā)送的通訊信號(hào),先將待發(fā)送的指令幀先依次寫入發(fā)送環(huán)形緩沖區(qū)cmd-buffer[CMD-MAX-BUFFER],系統(tǒng)定時(shí)循環(huán)檢測(cè)緩沖區(qū)不空,并在串口發(fā)送中斷服務(wù)函數(shù)中采用先入先出的方式,逐個(gè)發(fā)送緩沖區(qū)內(nèi)的每個(gè)指令字節(jié)至串口屏,相關(guān)代碼如下:
sendToBuf(p,num);
/*寫入環(huán)形緩沖區(qū),p為指令幀指針,num為指令幀字節(jié)數(shù)*/
readFromBuf(void);
/*依次從環(huán)形緩沖區(qū)讀取一個(gè)字節(jié)數(shù)據(jù),發(fā)送至串口屏*/
24系統(tǒng)程序設(shè)計(jì)
采用實(shí)時(shí)操作系統(tǒng)μC/OS-II作為STM32F101C8T6的片上操作系統(tǒng)(見(jiàn)圖4),相對(duì)前、后臺(tái)系統(tǒng),系統(tǒng)實(shí)時(shí)性和多任務(wù)管理能力得到了很大的提高。
圖4程序流程圖
系統(tǒng)首先對(duì)硬件和操作系統(tǒng)進(jìn)行初始化,包括初始化主微控制器時(shí)鐘和systick定時(shí)器,初始化串口,初始化操作系統(tǒng)初始變量等。初始化函數(shù)如下:
Stm32-Clock-Init(9);//時(shí)鐘初始化
SysTick-Init(72);//systick定時(shí)器初始化
uart-init(72,9600);//串口初始化
OSInit (void);//操作系統(tǒng)初始化變量初始化
其次創(chuàng)建系統(tǒng)任務(wù)和事件,并掛起部分任務(wù),系統(tǒng)按優(yōu)先級(jí)先后順序依次對(duì)串口屏通訊、矩陣鍵盤、按鈕控件處理、讀RTC時(shí)鐘、Flash讀寫和分機(jī)信號(hào)處理等任務(wù)進(jìn)行調(diào)度。任務(wù)之間的通信事件采用信號(hào)量、郵箱和消息隊(duì)列機(jī)制,部分函數(shù)如下:
OSTaskCreate(lcd-task,(void*)0,(OS-STK*)&LCD-TASK-STK[LCD-STK-SIZE-1],LCD-TASK-PRIO);
/*創(chuàng)建串口屏指令幀接收與發(fā)送任務(wù)*/
OSTaskSuspend(KEY-TASK-PRIO);
/*掛起矩陣鍵盤任務(wù)*/
F-Semp=OSSemCreate(1);
/*創(chuàng)建信號(hào)量*/
WF-Box=OSMboxCreate((void *)0);
/*創(chuàng)建寫flash郵箱*/
S-Q=OSQCreate(&MsgGrp[0],N-MESSAGES);
/*創(chuàng)建分機(jī)事件信號(hào)消息隊(duì)列*/
…
最后系統(tǒng)對(duì)不同優(yōu)先級(jí)任務(wù)進(jìn)行調(diào)度,各任務(wù)按優(yōu)先級(jí)順序內(nèi)容如下:
Lcd-task:20ms循環(huán)執(zhí)行,接收到串口屏指令幀后,使用findcmd函數(shù)解讀后恢復(fù)key-task、button-task、RF-task任務(wù);
Rtc-task:100ms循環(huán)執(zhí)行,對(duì)串口屏內(nèi)部時(shí)鐘數(shù)據(jù)的進(jìn)行讀取后,發(fā)送至T-Box郵箱,用于記錄主分機(jī)的通訊時(shí)間;
key-task:Lcd-task恢復(fù)后執(zhí)行,判斷主機(jī)打點(diǎn)、講話信號(hào),絞車開(kāi)停,觸發(fā)相應(yīng)事件動(dòng)作后向各分機(jī)發(fā)送事件信號(hào),并發(fā)送對(duì)應(yīng)的圖標(biāo)控件指令幀至發(fā)送環(huán)形緩沖區(qū),執(zhí)行完成后掛起該任務(wù);
button-task:Lcd-task恢復(fù)后執(zhí)行,判斷串口屏記錄查詢按鈕控件ID值為真后請(qǐng)求RF-Box郵箱和信號(hào)量F-Semp,獲得權(quán)限后發(fā)送更新文本控件指令幀發(fā)送環(huán)形緩沖區(qū),執(zhí)行完成后掛起該任務(wù);
RF-task:Lcd-task恢復(fù)后執(zhí)行,讀取串口屏內(nèi)部Flash數(shù)據(jù)并發(fā)送至RF-Box郵箱成功后,釋放信號(hào)量F-Semp,執(zhí)行完成后掛起該任務(wù);
Ext-task: 100ms循環(huán)執(zhí)行,從消息隊(duì)列S-Q中提取分機(jī)信號(hào)后,發(fā)送至WF-Box郵箱并恢復(fù)WF-task任務(wù);
WF-task:Ext-task恢復(fù)后執(zhí)行,同時(shí)請(qǐng)求WF-Box郵箱和T-Box郵箱后,發(fā)送寫記錄到Flash的指令幀至發(fā)送環(huán)形緩沖區(qū),執(zhí)行完成后掛起該任務(wù);
其中,串口1發(fā)送接收完成中斷服務(wù)函數(shù)USART1-IRQHandler可隨時(shí)打斷上述任務(wù)的執(zhí)行,按字節(jié)接收串口屏指令幀并發(fā)送至接收指令緩存區(qū),使用readFromBuf函數(shù)將發(fā)送環(huán)形緩沖區(qū)內(nèi)數(shù)據(jù)發(fā)送至串口顯示或記錄。
3人機(jī)交互界面
絞車控制信號(hào)裝置人機(jī)交互界面主要分為主分機(jī)與絞車運(yùn)行界面(見(jiàn)圖5)和歷史記錄查詢界面(見(jiàn)圖6)。
圖5主分機(jī)與絞車運(yùn)行界面
圖6歷史記錄查詢界面
交互界面中用到的按鈕、圖標(biāo)和文本等控件的數(shù)量近30個(gè),不同的控件類型,需發(fā)送的指令幀格式不同;不同分機(jī)號(hào),需發(fā)送的指令幀內(nèi)容不同,因此系統(tǒng)通過(guò)串口與顯示屏交互時(shí),易發(fā)生通信堵塞,處理事件繁索等問(wèn)題。由于μC/OS-II操作系統(tǒng)在任務(wù)調(diào)度和時(shí)間管理方面的優(yōu)異性能,外加串口屏內(nèi)部設(shè)有4 kB的指令緩沖區(qū),有效的避免了此類狀況的發(fā)生,用戶在使用該人機(jī)交互界面時(shí),實(shí)時(shí)狀態(tài)顯示及時(shí),觸摸響應(yīng)靈敏,不會(huì)產(chǎn)生死機(jī)現(xiàn)象,基本上滿足了煤礦井下設(shè)備的安全使用要求。
4結(jié)論
本系統(tǒng)在采用精簡(jiǎn)內(nèi)核的嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II對(duì)系統(tǒng)多任務(wù)進(jìn)行調(diào)度,在減少系統(tǒng)代碼量和提高系統(tǒng)實(shí)時(shí)性的同時(shí),增強(qiáng)了系統(tǒng)的模塊化設(shè)計(jì),系統(tǒng)調(diào)試通過(guò),現(xiàn)已穩(wěn)定運(yùn)行于現(xiàn)場(chǎng)。
所設(shè)計(jì)的μC/OS-II的串口屏人機(jī)交互系統(tǒng)通用性高,還可廣泛應(yīng)用于其他中小型礦用電器設(shè)備控制系統(tǒng)中,比如礦用蓄電池監(jiān)控設(shè)備、礦用充電機(jī)及礦用通風(fēng)監(jiān)控系統(tǒng)等。
參考文獻(xiàn):
[1]常宏奎,劉戰(zhàn)軍.斜巷提升語(yǔ)音聲光組合信號(hào)系統(tǒng)的開(kāi)發(fā)與應(yīng)用[J].中州煤炭,2010(2):16-17.
[2]周廣興,姜永春,張廣蘭,等.單片機(jī)在礦井提升機(jī)打點(diǎn)器中的應(yīng)用[J].煤礦機(jī)械,2004(7):87-88.
[3]倪樹(shù)標(biāo),張冠文,劉日威,等.淺談串口屏在儀器人機(jī)界面設(shè)計(jì)中的應(yīng)用[J]. 廣東科技,2012(21):176-177.
[4]任哲.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2009:116-118.
[5]公茂法,劉建平,徐新源,等.基于串口屏的井下多回路電網(wǎng)監(jiān)測(cè)儀的設(shè)計(jì)[J].煤礦機(jī)械,2013,34(1):263-264.
(責(zé)任編輯:何學(xué)華,吳曉紅)