王 捷 艾 紅
(1.北方工業(yè)大學(xué)電氣與控制工程學(xué)院;2.北京信息科技大學(xué)自動化學(xué)院)
基于TCP和μC/OS-Ⅱ的數(shù)據(jù)采集系統(tǒng)研究①
王 捷1艾 紅2
(1.北方工業(yè)大學(xué)電氣與控制工程學(xué)院;2.北京信息科技大學(xué)自動化學(xué)院)
基于ARM7處理器LPC2210的鎖相環(huán)功能與處理器的時鐘頻率,描述了A/D轉(zhuǎn)換時鐘頻率的計(jì)算公式。設(shè)計(jì)了基于ARM7的數(shù)據(jù)采集系統(tǒng)。闡述了基于I2C總線協(xié)議實(shí)現(xiàn)數(shù)據(jù)存儲的功能,說明了向存儲器寫入數(shù)據(jù),從存儲器中讀取數(shù)據(jù)的函數(shù)調(diào)用?;贏RM7和μC/OS-Ⅱ操作系統(tǒng)的多任務(wù)應(yīng)用,給出了創(chuàng)建多任務(wù)的流程圖。通過網(wǎng)頁可以顯示實(shí)時數(shù)據(jù)采集值、報(bào)警上下限值、實(shí)時時鐘和歷史數(shù)據(jù)?;赥CP 協(xié)議實(shí)現(xiàn)了數(shù)據(jù)采集與網(wǎng)絡(luò)傳輸系統(tǒng)的功能。
數(shù)據(jù)采集 TCP協(xié)議 μC/OS-Ⅱ操作系統(tǒng) 網(wǎng)頁顯示
在工業(yè)測量控制領(lǐng)域,需要獲取大量的實(shí)時工業(yè)現(xiàn)場參數(shù),使用ARM處理器不僅具有一般采集系統(tǒng)的優(yōu)點(diǎn),還加入了一些新的功能和特性,如網(wǎng)絡(luò)功能。μC/OS-Ⅱ操作系統(tǒng)中重要的概念之一是任務(wù)。一個任務(wù)也稱作一個線程,是一個簡單的程序。每個任務(wù)都是整個應(yīng)用的一部分,每個任務(wù)被賦予一定的優(yōu)先級。μC/OS-Ⅱ是搶占式實(shí)時多任務(wù)內(nèi)核,采用基于優(yōu)先級的任務(wù)調(diào)度策略[1,2]。筆者實(shí)現(xiàn)了基于TCP協(xié)議的網(wǎng)絡(luò)傳輸數(shù)據(jù)采集系統(tǒng)。在數(shù)據(jù)采集過程中,采用串行E2PROM芯片CAT24WC02對歷史數(shù)據(jù)進(jìn)行存儲。為了使網(wǎng)頁增加交互性,系統(tǒng)應(yīng)用了JavaScript技術(shù)設(shè)計(jì)界面。利用開放的TCP通信協(xié)議,任何計(jì)算機(jī)都可以使用通用的網(wǎng)絡(luò)瀏覽軟件訪問設(shè)備,現(xiàn)場設(shè)備的信息可以通過網(wǎng)頁的形式顯示出來?;贏RM處理器嵌入μC/OS-Ⅱ操作系統(tǒng)設(shè)計(jì)數(shù)據(jù)采集系統(tǒng),進(jìn)一步擴(kuò)展了Web服務(wù)器的應(yīng)用范圍。
系統(tǒng)采用ARM7處理器LPC2210?;贏RM7的數(shù)據(jù)采集系統(tǒng)如圖1所示,包括時鐘電路、電源電路、復(fù)位電路、鍵盤與顯示模塊、數(shù)據(jù)存儲器及信號放大電路等。
圖1 基于ARM7的數(shù)據(jù)采集系統(tǒng)框圖
2.1 鎖相環(huán)與時鐘頻率
LPC2210具有鎖相環(huán)PLL電路,PLL接收的輸入時鐘頻率范圍為10~25MHz。FOSC是晶振頻率,M是PLLCFG寄存器中MSEL位的倍頻值,鎖相環(huán)PLL輸出的處理器時鐘頻率cclk=M×FOSC。VPB分頻器決定了處理器時鐘cclk與外設(shè)器件所使用的時鐘pclk之間的關(guān)系。通過VPB總線為外設(shè)提供所需的pclk時鐘。A/D轉(zhuǎn)換器的基本時鐘由VPB時鐘提供。編程分頻器可以將時鐘調(diào)至逐次逼近轉(zhuǎn)換所需的4.5MHz。VPB分頻器連接如圖2所示。
圖2 VPB分頻器連接
2.2 數(shù)據(jù)采集功能實(shí)現(xiàn)
LPC2210具有8路10位逐次逼近式A/D轉(zhuǎn)換器,測量范圍為0~3V,每秒可執(zhí)行四十萬次10位采樣。10位精度要求的轉(zhuǎn)換需要11個A/D轉(zhuǎn)換時鐘。將VPB時鐘pclk進(jìn)行分頻得到A/D轉(zhuǎn)換時鐘。該時鐘必須不大于4.5MHz。ADC轉(zhuǎn)換時鐘分頻值的計(jì)算公式如下:
其中CLKDIV是A/D控制寄存器ADCR的15~8位;pclk是VPB提供的時鐘;adclk是ADC時鐘,其值不能大于4.5MHz。A/D模塊功能如圖3所示。
圖3 A/D模塊功能
使用引腳AIN0和AIN1兩個通道進(jìn)行10位A/D轉(zhuǎn)換,A/D轉(zhuǎn)換時鐘設(shè)置為1MHz。進(jìn)行A/D模塊設(shè)置,程序中的語句x< ADCR = (1 << 0) | // SEL = 1 ,選擇通道0 ((Fpclk / 1000000 - 1) << 8) | // CLKDIV = Fpclk /1000000-1,即A/D轉(zhuǎn)換時鐘為1MHz (0 << 16) |//轉(zhuǎn)換由軟件控制,需要11個時鐘方能完成 (0 << 17) | // CLKS = 0,11個時鐘/10位 (1 << 21) | // PDN = 1,正常工作模式(非掉電轉(zhuǎn)換模式) (0 << 22) | // TEST[1:0] = 00,正常模式(非器件測試模式) (1 << 24) | // START = 1,立即啟動ADC轉(zhuǎn)換 (0 << 27); // EDGE=0,該位在START字段為010~111時有效 DelayNS(10); ADC_Data = ADDR; //讀取ADC轉(zhuǎn)換結(jié)果,并清除A/D轉(zhuǎn)換完成標(biāo)志位 while(1) { ADCR = (ADCR&0xFFFFFF00)|0x01|(1 << 24); //選擇第一通道進(jìn)行第1次轉(zhuǎn)換 while( (ADDR&0x80000000)==0 ); //等待轉(zhuǎn)換結(jié)束 ADCR = ADCR | (1 << 24); //再次啟動轉(zhuǎn)換 while( (ADDR&0x80000000)==0 ); ADC_Data = ADDR; //讀取ADC轉(zhuǎn)換結(jié)果 ADC_Data = (ADC_Data>>6) & 0x3FF; ADC_Data = ADC_Data * 3300; ADC_Data = ADC_Data / 1024; //數(shù)據(jù)處理 sprintf(str, "%4dmV at VIN1", ADC_Data); //顯示第1個通道A/D采集結(jié)果 ISendStr(60, 23, 0x30, str); ADCR = (ADCR&0xFFFFFF00)|0x02|(1 << 24);//選擇第二通道并進(jìn)行第1次轉(zhuǎn)換 while( (ADDR&0x80000000)==0 ); //等待轉(zhuǎn)換結(jié)束 ADCR = ADCR | (1 << 24);//再次啟動轉(zhuǎn)換 while( (ADDR&0x80000000)==0 ); ADC_Data = ADDR;//讀取ADC轉(zhuǎn)換結(jié)果 ADC_Data = (ADC_Data>>6) & 0x3FF; ADC_Data = ADC_Data * 3300; ADC_Data = ADC_Data / 1024; //數(shù)據(jù)處理 sprintf(str, "%4dmV at VIN2", ADC_Data); //顯示第2個通道A/D采集結(jié)果 ISendStr(60, 21, 0x30, str); DelayNS(10); } return(0);} 數(shù)據(jù)采集系統(tǒng)采集數(shù)據(jù)的過程以函數(shù)形式進(jìn)行。首先設(shè)置ADCR控制寄存器的值,選擇通道,寫入A/D轉(zhuǎn)換時鐘頻率,軟件控制轉(zhuǎn)換操作,選擇正常工作模式。當(dāng)設(shè)置完A/D控制寄存器ADCR并延時一段時間后,從A/D數(shù)據(jù)寄存器ADDR中讀取選中通道的A/D轉(zhuǎn)換結(jié)果。 2.3 數(shù)據(jù)存儲功能 存儲器CAT24WC02支持I2C總線數(shù)據(jù)傳送協(xié)議。采用字節(jié)寫方式時,主設(shè)備ARM處理器LPC2210的I2C接口首先向從設(shè)備CAT24WC02發(fā)送起始條件和從設(shè)備地址信息,在收到CAT24WC02的應(yīng)答信號后,ARM處理器發(fā)送要寫入的第1個字節(jié)地址[3,4]。系統(tǒng)設(shè)計(jì)采用選擇性讀模式,ARM處理器可以對CAT24WC02存儲器中的任意字節(jié)數(shù)據(jù)進(jìn)行讀操作。首先主設(shè)備ARM處理器LPC2210的I2C接口向從設(shè)備CAT24WC02發(fā)送起始命令、CAT24WC02的設(shè)備地址和要讀取的字節(jié)數(shù)據(jù)地址,CAT24WC02發(fā)送應(yīng)答信號后,ARM處理器接收一個字節(jié)的數(shù)據(jù)。 向存儲器寫入數(shù)據(jù)。在確定了I2C總線控制器件地址與子地址之后,進(jìn)行數(shù)據(jù)存儲。將data_buf [0]中的1字節(jié)數(shù)據(jù)寫入到存儲器中,基本程序設(shè)計(jì)如下: #define CAT24WC02 0xA0 //定義器件地址 Uint8 data_buf[4]; IRcvStr(CAT24WC02,0x00, data_buf, 1) //data_buf [0]中的1個字節(jié)數(shù)據(jù)寫入到存儲器中 從存儲器中讀取一個字節(jié)數(shù)據(jù)。在確定了I2C總線控制器件地址與子地址之后,進(jìn)行數(shù)據(jù)讀取。從CAT24WC02存儲器中的0x00中獲取一個字節(jié)數(shù)據(jù),基本程序設(shè)計(jì)如下: #define CAT24WC02 0xA0 //定義器件地址 Uint8 data_buf[4]; ISendStr(CAT24WC02,0x00, data_buf, 1) //從CAT24WC02器件的0x00中獲取一個字節(jié)的數(shù)據(jù) 3.1 多任務(wù) μC/OS-Ⅱ操作系統(tǒng)可以管理多達(dá)64個任務(wù),保留了8個任務(wù)供系統(tǒng)使用,因此用戶可以有多達(dá)56個應(yīng)用任務(wù)。一個任務(wù)通常是一個無限的循環(huán),看起來像其他C函數(shù)一樣,有函數(shù)返回類型,有形式參數(shù)變量。形式參數(shù)變量是由用戶代碼在第1次執(zhí)行時帶入的。該變量的類型是一個指向void的指針。這是為了允許用戶在應(yīng)用程序中傳遞任何類型的數(shù)據(jù)任務(wù)。當(dāng)任務(wù)完成以后,任務(wù)可以自我刪除,使這個任務(wù)的代碼不再運(yùn)行。多任務(wù)體現(xiàn)在μC/OS-Ⅱ操作系統(tǒng)程序、TCP通信任務(wù)程序、鍵盤服務(wù)任務(wù)程序、實(shí)時時鐘任務(wù)程序和按鍵控制網(wǎng)頁小燈任務(wù)程序設(shè)計(jì)。創(chuàng)建多任務(wù)task0流程如圖4所示。 圖4 創(chuàng)建多任務(wù)task0流程 3.2 實(shí)時時鐘任務(wù)程序設(shè)計(jì) 實(shí)時時鐘RTC提供一套計(jì)數(shù)器在系統(tǒng)工作時對時鐘進(jìn)行測量。從RTC實(shí)時時鐘系統(tǒng)中獲取當(dāng)前的時、分、秒和當(dāng)前日期,對時間的數(shù)值數(shù)據(jù)處理是將RTC實(shí)時時鐘系統(tǒng)中獲得的時間值進(jìn)行ASCII碼轉(zhuǎn)換,再將時間結(jié)構(gòu)體中的秒、分、時、日、月、年進(jìn)行BCD碼轉(zhuǎn)換,為數(shù)碼管的每一位的正常顯示做準(zhǔn)備。數(shù)碼管顯示是在ARM7處理器的硬件平臺上,數(shù)碼管低6位實(shí)時顯示時、分、秒,前兩位數(shù)碼管分時顯示年、月、日,循環(huán)顯示。設(shè)計(jì)時以i作為狀態(tài)變量,每過一秒鐘i進(jìn)行自加,當(dāng)變量i為0~2時,數(shù)碼管前兩位顯示年,當(dāng)變量i為3~7時,數(shù)碼管前兩位顯示月,當(dāng)變量i為8~14時,數(shù)碼管前兩位顯示日。隨著秒鐘的不斷跳變,數(shù)碼管可以顯示年、月、日、時、分、秒。 在基于ARM7處理器的數(shù)據(jù)采集系統(tǒng)中,能夠通過鍵盤設(shè)定實(shí)現(xiàn)采集通道數(shù)據(jù)的報(bào)警上下限,并利用報(bào)警系統(tǒng)對采樣數(shù)據(jù)實(shí)現(xiàn)上下限報(bào)警??梢垣@得上位計(jì)算機(jī)下傳的實(shí)時時間,即年、月、日、時、分、秒,并在數(shù)據(jù)采集系統(tǒng)上顯示。在上位機(jī)上,通過瀏覽器可以看到從數(shù)據(jù)采集系統(tǒng)傳輸來的兩個通道采樣數(shù)據(jù)和數(shù)據(jù)的報(bào)警上下限值??梢酝ㄟ^按鍵控制小燈,或者當(dāng)報(bào)警超限時點(diǎn)亮報(bào)警燈。打開Internet Explorer瀏覽器,在地址欄輸入http://192.168.0.174 并按回車鍵,網(wǎng)頁上出現(xiàn)從基于ARM7的數(shù)據(jù)采集系統(tǒng)硬件平臺發(fā)送的VIN1通道和VIN2通道的報(bào)警上下限值及當(dāng)前VIN1通道和VIN2通道的數(shù)據(jù)采集值。ADC數(shù)據(jù)監(jiān)測結(jié)果界面如圖5所示。當(dāng)前VIN1通道和VIN2通道的數(shù)據(jù)采集值超出報(bào)警上下限時,蜂鳴器報(bào)警且網(wǎng)頁當(dāng)前數(shù)據(jù)采集值變紅。網(wǎng)頁上可以顯示當(dāng)前VIN1通道和VIN2通道的變化率是否正常。如果采集的數(shù)據(jù)變化率過快,網(wǎng)頁可以顯示報(bào)警。點(diǎn)擊網(wǎng)頁上 “顯示歷史數(shù)據(jù)”按鈕,將VIN1通道和VIN2通道采集的歷史數(shù)據(jù)值顯示在網(wǎng)頁中。點(diǎn)擊網(wǎng)頁上 “關(guān)閉歷史數(shù)據(jù)”按鈕,將歷史數(shù)據(jù)欄收起。點(diǎn)擊網(wǎng)頁上 “清除歷史數(shù)據(jù)”按鈕,則清除網(wǎng)頁上的歷史數(shù)據(jù)。 圖5 ADC數(shù)據(jù)監(jiān)測結(jié)果界面 CPU在沒有操作系統(tǒng)時,運(yùn)行主程序要通過外部中斷,執(zhí)行相對應(yīng)的中斷子程序,這需要很多步驟去完成。尤其是在網(wǎng)絡(luò)傳輸?shù)榷嗳蝿?wù)環(huán)境下,沒有操作系統(tǒng)顯得力不從心。在移植操作系統(tǒng)后,使得多任務(wù)并行執(zhí)行變得簡單,尤其是在添加或刪減各個任務(wù)時,變得尤為方便。數(shù)據(jù)采集系統(tǒng)以單任務(wù)的形式調(diào)試成功后,將所有單任務(wù)組織成一個多任務(wù)的系統(tǒng),最重要的是設(shè)置好每個任務(wù)的優(yōu)先級,使它們能夠穩(wěn)定地執(zhí)行。實(shí)踐證明多任務(wù)系統(tǒng)可以很好地實(shí)現(xiàn)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)采集功能。基于ARM7和μC/OS-Ⅱ操作系統(tǒng)設(shè)計(jì)數(shù)據(jù)采集系統(tǒng)由多任務(wù)完成,采用TCP/IP協(xié)議實(shí)現(xiàn)數(shù)據(jù)顯示功能。通過網(wǎng)頁瀏覽實(shí)時數(shù)據(jù)采集值、報(bào)警上下限值和數(shù)據(jù)采集系統(tǒng)的工作狀態(tài),實(shí)現(xiàn)了利用TCP網(wǎng)絡(luò)進(jìn)行傳輸與顯示多路數(shù)據(jù)的功能。 [1] 趙玉鳳,楊厚俊,范延濱. μC/OS-Ⅱ在ARM Cortex A9處理器上的移植與實(shí)現(xiàn)[J]. 工業(yè)控制計(jì)算機(jī),2016,29(6):10~11. [2] 毛衛(wèi)平. 基于ARM的海洋溫度數(shù)據(jù)監(jiān)測系統(tǒng)設(shè)計(jì)[J]. 艦船科學(xué)技術(shù),2016,38(5A):127~129. [3] 趙華瑋. 一種基于Linux嵌入式的智能瓦斯監(jiān)測設(shè)計(jì)[J]. 自動化與儀器儀表,2016,(8):106~107. [4] 王平,楊濤,侯守全,等. LabVIEW中DAQ數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J]. 自動化儀表,2015,36(7):31~33. ResearchonDataAcquisitionSystemBasedonTCPandμC/OS-Ⅱ WANG Jie1, AI Hong2 (1.CollegeofElectricalandControlEngineering,NorthChinaUniversityofTechnology; 2.CollegeofAutomation,BeijingInformationScience&TechnologyUniversity) Based on PLL function and clock frequency of the ARM7 processor LPC2210, the calculation formula of A/D conversion clock frequency was described and the ARM7-based data acquisition system was designed; and the function of data storage based on I2C bus protocol was expounded and writing the data to the memory and reading the function call of data from the memory were explained. Basing on ARM7 and μC/OS- Ⅱ operating system-based multi-task application to present the flow chart of creating multi tasks was implemented, including the display of real-time data acquisition values, the upper and lower limits of the alarm, real-time clock and data collection of historical data and other functions through the web page and the realization of the function of data acquisition and network transmission system based on TCP protocol. data acquisition,TCP protocol, μC/OS-Ⅱ operating system,web page display 北京市自然科學(xué)基金項(xiàng)目(4162025)。 王捷(1962-),講師, 從事智能儀表與自動化裝置的研究。 聯(lián)系人艾紅(1962-),教授,從事智能儀表與自動化裝置的研究,hong_ai@126.com。 TH865 A 1000-3932(2017)06-0591-05 2016-12-13, 2017-01-18)3 μC/OS-Ⅱ操作系統(tǒng)與多任務(wù)
4 基于TCP協(xié)議的數(shù)據(jù)采集
5 結(jié)束語