基于USB通信的科氏粉料流量測控系統設計
引言
本文引用地址:http://dyxdggzs.com/article/201610/308696.htm目前,由北京航空航天大學(xué)與冀東發(fā)展集團有限責任公司合作研發(fā)的科氏粉料流量測控系統(以下簡(jiǎn)稱(chēng)“測控系統”)已經(jīng)成功應用到工業(yè)現場(chǎng),運行狀況良好,測量精度優(yōu)于±0.5%。測控系統底層和PC端上層控制軟件通過(guò)RS-232串行接口通信。這樣,操作者就能夠方便地對測控系統的各個(gè)參數進(jìn)行修改,同時(shí)研發(fā)人員在進(jìn)行現場(chǎng)調試時(shí)進(jìn)行流量數據采集,然而,基于RS-232通信的測控系統還存在一定的應用限制。
雖然測控系統的流量測量精度高,但是其控制精度并不能滿(mǎn)足現場(chǎng)要求,針對于此,作者所在課題組正在開(kāi)展粉料流量控制技術(shù)的相關(guān)研究工作,這就要求盡可能完整地采集流量數據,為粉料流量控制技術(shù)研究提供精確的數據支持。目前,測控系統的RS-232通信速率為9 600bps,并不能滿(mǎn)足需求,必須通過(guò)提高通信速率實(shí)現,然而,這樣會(huì )增加CPU處理數據的負擔,導致通信數據不正確的情況發(fā)生,降低底層程序性能。同時(shí)RS-232串口通信為端到端傳輸模式,在實(shí)際運行時(shí),上層應用程序無(wú)法對當前通信狀態(tài)進(jìn)行實(shí)時(shí)監測,不利于測控系統對各個(gè)設備運行狀態(tài)的準確實(shí)時(shí)監測和控制。
綜上所述,開(kāi)發(fā)更為快速、方便、可靠的人機通信接口變得尤為重要。結合USB通信速率高、通信可靠、即插即用、成本低廉等優(yōu)點(diǎn),本文設計了基于USB通信的測控系統。
1 USB設備簡(jiǎn)介
USB(Universal Serial Bus,通用串行總線(xiàn))設備是USB通信系統中不可或缺的部分,隨著(zhù)USB技術(shù)的不斷發(fā)展,USB設備類(lèi)型也逐漸增加,主要包括Audio設備、Communicat ion device設備、HID設備、Image設備、Printer設備、Mass storage設備、Hub設備等等。其中,HID類(lèi)是比較大的一個(gè)類(lèi),屬人機交互操作的設備,用于控制計算機操作的一些應用中,如USB鼠標、USB觸摸板、遙控等設備。Windows操作系統自帶了HID類(lèi)設備的驅動(dòng)程序,用戶(hù)直接調用相應的API函數即可完成通信,不用開(kāi)發(fā)特定的Windows驅動(dòng)程序,這樣能夠有效縮短應用程序的開(kāi)發(fā)周期。本文在測控系統中,采用HID設備進(jìn)行USB通信設計。
2 測控系統USB通信設計
根據系統功能需求,測控系統可分為系統上層、系統底層、中控室和系統外設4個(gè)部分。圖1為測控系統原理框圖。

系統上層為基于C#語(yǔ)言的Windows應用程序,主要完成測控系統的數據交互功能。
測控系統底層為測控系統核心,主要由STM32F103VET6處理器(簡(jiǎn)稱(chēng)STM32)和μC/OS—II實(shí)時(shí)操作系統構成。主要通過(guò)對應的命令方式完成對外設進(jìn)行控制、傳感器測量信號采集、粉料流量計算與控制。
中控室為測控系統的遠程監控終端,通過(guò)4~20 mA電流實(shí)現測控系統的流量監測與控制。
系統外設主要包括變頻器、繼電器、電動(dòng)機以及各類(lèi)信號終端。系統底層通過(guò)對應的命令方式對外設進(jìn)行控制,或對傳感器測量信號進(jìn)行采集。
2.1 測控系統底層USB通信設計
STM32為ST公司推出的基于A(yíng)RM Cortex-M3內核的微控制器,自帶USB全速設備接口,支持USB2.0通信協(xié)議,可配置1~8個(gè)USB端點(diǎn),包含512字節的SRAM數據緩沖區。因此,基于STMS2的USB通信設計可以有效簡(jiǎn)化系統硬件電路。
圖2為測控系統USB接口硬件電路圖。其中,JP-USBENABLE接口用于實(shí)現對測控系統USB通信功能控制,USBENABLE用于底層應用程序控制USB設備的連接狀態(tài)。

2.1.1 HID設備內核定義
在進(jìn)行USB通信設計之前,必須完成USB設備的底層驅動(dòng)設計。將ST公司提供的針對于STMS2的USB固件庫移植到現有工程目錄中,這樣只需修改庫文件中關(guān)于USB設備的相關(guān)定義即可。在該庫中,提供了完整的HID設備定義所需描述符,包括設備描述符、配置描述符、報告描述符、廠(chǎng)商字符串、產(chǎn)品字符串等。只需根據需要進(jìn)行相關(guān)描述符的修改即可滿(mǎn)足要求,在此,只針對設備描述符、配置描述符、報告描述符做簡(jiǎn)要介紹。
(1)設備描述符
設備描述符主要完成USB設備的基本定義,主要包括設備類(lèi)、最大數據包大小、配置個(gè)數等。在這里進(jìn)行如下定義:
設備類(lèi):HID設備。
最大包大?。?4字節。
配置個(gè)數:1。
(2)配置描述符
配置描述符主要完成USB設備的配置定義,包括當前配置下的接口個(gè)數、接口定義、每個(gè)接口下的端點(diǎn)定義。在本測控系統的USB設備配置描述符中有如下定義:
接口個(gè)數:1。
接口端點(diǎn)個(gè)數:2(一個(gè)IN端點(diǎn)和一個(gè)OUT端點(diǎn))。
端點(diǎn)最大包大?。?4字節。
(3)報告描述符
HID設備要和主機進(jìn)行正常通信,必須在主機對設備枚舉時(shí)提供完整的通信報文描述符,主機將根據設備提供的報告描述符進(jìn)行USB通信控制。在報告描述符中可以定義多個(gè)報告(輸入報告、輸出報告),在這里,只定義一個(gè)輸入報告和一個(gè)輸出報告,其中報告大小均為64字節。
2.1.2 基于μC/OS—II的USB通信設計
μC/OS—II為多任務(wù)實(shí)時(shí)操作系統,通過(guò)多任務(wù)的編程方式易于實(shí)現具有較高性能的嵌入式系統。目前測控系統包含5個(gè)任務(wù):
CACULATE_TASK:計算任務(wù),完成粉料流量的計算。
CTRL_TASK:控制任務(wù),完成測控系統流量的控制。
GETWEIGHT_TASK:稱(chēng)重任務(wù),讀取稱(chēng)重倉的數據。
UART_TFASK:串口通信任務(wù),完成串口的數據交換。
DETECT_TASK:檢測任務(wù)。實(shí)時(shí)監測測控系統的工作狀態(tài)。
基于此,測控系統底層應用程序新增USB通信數據接收任務(wù)USBCOMRX_TASK和數據發(fā)送任務(wù)USBCOMTX_TASK。其中,USBCOMRX_TASK任務(wù)實(shí)時(shí)接收上層應用程序下發(fā)的命令,并將命令進(jìn)行解析處理;USBCOMTX_TASK任務(wù)實(shí)時(shí)將相關(guān)數據通過(guò)USB接口發(fā)送到上層應用程序。
為提高通信數據的可靠性,設計了專(zhuān)用的環(huán)形數據緩沖區。圖3為數據緩沖區結構示意圖,其最小單位為數據包。

在程序設計時(shí)有如下定義:
typedef struct{
//數據緩沖區
U8 DataBuffer[BUFLEN][CMDLEN];
//數據起始位置
U8 DataStart;
//數據結束位置
U8 DataStop;
//通信信號量
OS_EVENT*USB_sem;
}UsbBuffer;
緩沖區由二維數組構成,每一行代表一幀數據,由BUFLEN幀數據組成,每幀數據長(cháng)度為CMDLEN。其中,DataStart指示緩沖區有效數據包的起始位置,Datastop指示緩沖區有效數據包的結束位置。USB_sem為通信所需信號量,對于接收數據緩沖區,USB接收中斷服務(wù)子程序中將接收到的數據包復制到該緩沖區中,并更新DataStop值,然后通過(guò)該信號量通知USBCOMRX_TASK進(jìn)行數據處理;對于發(fā)送數據緩沖區,需要通過(guò)USB接口發(fā)送數據的任務(wù),將待發(fā)送數據填充到相應的緩沖區中,并更新DataStop值,然后利用該信號量通知USBCOMTX_TASK進(jìn)行數據發(fā)送。
圖4為USBCOMRX_TASK任務(wù)流程圖。當任務(wù)收到接收信號量時(shí),循環(huán)處理緩沖區中DataStart至DataStop之間的有效數據包。

圖5為USBCOMTX_TASK任務(wù)流程圖。當任務(wù)收到發(fā)送信號量時(shí),循環(huán)發(fā)送緩沖區中Datastart至DataStop之間的有效數據包。

2.2 測控系統上層USB通信設計
系統上層為基于C#語(yǔ)言的Windows應用程序,基于此進(jìn)行測控系統上層USB通信設計。測控系統上層USB通信設計主要有兩個(gè)方面:USB連接狀態(tài)監測和USB數據通信。
2.2.1 USB連接狀態(tài)監測
USB連接狀態(tài)監測主要對測控系統的連接狀態(tài)進(jìn)行監測,完成USB正常通信之前的準備工作。為實(shí)現USB連接狀態(tài)的實(shí)時(shí)監測,采用線(xiàn)程的方式進(jìn)行設計。
圖6為USB連接狀態(tài)監測線(xiàn)程UsbDeviceStatus流程圖。USBConnected用于指示HID設備的連接狀態(tài),若目標USB設備已經(jīng)連接主機,則堵塞當前線(xiàn)程,一旦監測到USB設備連接斷開(kāi),則繼續輪詢(xún)主機上的HID設備。

2.2.2 USB數據通信
在Windows操作系統中,應用程序通過(guò)文件操作的方式使用USB設備。在USB連接狀態(tài)監測線(xiàn)程中,如果查找到目標HID設備,會(huì )創(chuàng )建相應的文件操作句柄供應用程序使用。
文件的操作有4種方式:異步讀、同步寫(xiě)、異步讀和異步寫(xiě)。讀、寫(xiě)文件操作即申請一次接收、發(fā)送數據操作。
在異步模式下,應用程序向USB控制器發(fā)送一次請求之后,無(wú)論請求是否成功,相應的請求函數即刻返回,將剩余的工作交由USB驅動(dòng)程序完成;在同步模式下,則必須等到請求成功之后才返回。采用同步讀的方式可以有效提高應用程序處理通信數據的實(shí)時(shí)性。在此采用同步讀和異步寫(xiě)的方式進(jìn)行USB通信。
采用同步讀方式通信時(shí),若底層沒(méi)有數據包發(fā)送,則當前線(xiàn)程會(huì )處于堵塞狀態(tài),直到讀取到數據線(xiàn)程恢復運行。在此采用線(xiàn)程的方式完成USB數據的同步讀操作。
圖7為USB接收數據線(xiàn)程流程圖。通過(guò)ReadFile()函數的返回值即可判斷USB的連接狀態(tài)。表1為ReadFile()函數返回狀態(tài)值對應的USB設備連接狀態(tài)。


當應用程序需要通過(guò)USB總線(xiàn)發(fā)送數據時(shí),首先會(huì )檢測當前USB設備的連接狀態(tài),若狀態(tài)為“連接正常”,則調用WriteFile()函數進(jìn)行相應數據發(fā)送。
結語(yǔ)
根據系統功能需,完成了測控系統的USB通信功能設計,解決了如下幾個(gè)問(wèn)題:
①采用USB全速通信方式,通信速率高達12Mbps,較大程度提高了測控系統流量數據的采集速率,為流量控制算法研究提供了更加完整的數據支持,解決了RS-232串口通信速率低的局限性。
②增加USB通信方式,應用程序可以更加方便地監測測控系統的通信狀態(tài),有效提高通信連接和數據傳輸的可靠性。
③有效解決了RS-232串口通信不支持熱插拔的問(wèn)題,使得通信更加方便靈活。
針對于RS-232串口通信的應用局限性,進(jìn)行了測控系統的USB通信設計,提高了科氏粉料流量測控系統的靈活性和應用可擴展性,在今后的市場(chǎng)中將具有更廣闊的應用前景,同時(shí),該測控系統的USB通信設計方法對嵌入式高速數據采集系統有_定的參考價(jià)值。
評論