亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于IOCP模型的多儀器數(shù)據(jù)采集與控制系統(tǒng)

        2015-06-23 16:27:39蔡晨曦秦會斌
        無線電通信技術(shù) 2015年5期
        關(guān)鍵詞:機(jī)軟件下位網(wǎng)絡(luò)通信

        蔡晨曦,秦會斌

        (杭州電子科技大學(xué),浙江 杭州 310000)

        基于IOCP模型的多儀器數(shù)據(jù)采集與控制系統(tǒng)

        蔡晨曦,秦會斌

        (杭州電子科技大學(xué),浙江 杭州 310000)

        為滿足工業(yè)現(xiàn)場中對多種不同類型的儀器進(jìn)行集中監(jiān)控的要求,并且針對儀器連接數(shù)量大、數(shù)據(jù)通信頻繁和實(shí)時(shí)性要求高等特點(diǎn),提出了以IOCP(I/O完成端口)網(wǎng)絡(luò)模型為核心結(jié)合了Windows多線程,數(shù)據(jù)庫編程等技術(shù)實(shí)現(xiàn)的局域網(wǎng)多智能儀表控制系統(tǒng)。首先介紹了控制系統(tǒng)的總體結(jié)構(gòu)以及IOCP模型工作原理,描述并分析了該系統(tǒng)在設(shè)計(jì)和實(shí)現(xiàn)過程遇到的關(guān)鍵問題和解決方案,最后通過移植LwIP輕量級網(wǎng)絡(luò)協(xié)議棧的STM32單片機(jī)作為下位機(jī)進(jìn)行網(wǎng)絡(luò)通信測試,驗(yàn)證了該方案的可行性。

        完成端口;重疊IO;TCP/IP;多線程;控制系統(tǒng)

        0 引言

        工業(yè)現(xiàn)場中通常需要很多不同類型的儀表對現(xiàn)場的溫度、濕度、電流和電壓等進(jìn)行數(shù)據(jù)采集與控制。在傳統(tǒng)模式下,每類儀器會用獨(dú)立的系統(tǒng)進(jìn)行數(shù)據(jù)采集與控制,儀器將采集到的數(shù)據(jù)通過串口發(fā)送到獨(dú)立的計(jì)算機(jī)進(jìn)行顯示和處理。這種模式既不利于宏觀反應(yīng)整個(gè)工業(yè)生產(chǎn)過程,也不便與計(jì)算機(jī)進(jìn)行集中監(jiān)控,同時(shí)又增加了生產(chǎn)成本。本文研究的系統(tǒng)沒有將上位機(jī)和儀器直接連接,而是采用STM32單片機(jī)作為下位機(jī)中轉(zhuǎn)通過工業(yè)以太網(wǎng)組網(wǎng)動(dòng)態(tài)接入上位機(jī),實(shí)現(xiàn)對所有儀器的統(tǒng)一監(jiān)控。

        Winsock2.0引入的內(nèi)核級高效處理機(jī)制IOCP是迄今為止最高效的Windows下處理并發(fā)網(wǎng)絡(luò)事件的I/O模型,IOCP全稱為I/O完成端口,利用該機(jī)制可提高網(wǎng)絡(luò)通信性能[1]?;贗OCP機(jī)制的上位機(jī)網(wǎng)絡(luò)通信方案能同時(shí)并發(fā)連接大量下位機(jī),進(jìn)行高效的網(wǎng)絡(luò)數(shù)據(jù)交互。極大提高系統(tǒng)的儀器承載量、可擴(kuò)展性和穩(wěn)定性。

        1 系統(tǒng)硬件設(shè)計(jì)

        多儀器數(shù)據(jù)采集與控制系統(tǒng)利用工業(yè)以太網(wǎng)進(jìn)行組網(wǎng),采用服務(wù)器/客戶端結(jié)構(gòu)進(jìn)行設(shè)計(jì)。本系統(tǒng)創(chuàng)新之處在于沒有將上位機(jī)作為網(wǎng)絡(luò)服務(wù)端,而是利用具有以太網(wǎng)10/100 M接口的STM32單片機(jī)作為下位機(jī)中介服務(wù)器,上位機(jī)軟件和儀器均作為客戶端根據(jù)設(shè)定的IP地址及端口號主動(dòng)連接到下位機(jī)其網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖1所示[2]。在實(shí)際工作過程中每個(gè)上位機(jī)軟件根據(jù)設(shè)定的IP地址范圍主動(dòng)掃描連接系統(tǒng)內(nèi)所有處于工作狀態(tài)的下位機(jī),建立連接后每個(gè)下位機(jī)將與其連接的儀器資源信息、工作模式、測試數(shù)據(jù)按照規(guī)定的通信協(xié)議封裝后打包發(fā)送到建立連接的上位機(jī)軟件。下位機(jī)同時(shí)接收上位機(jī)返回的測試方案對儀器進(jìn)行控制。

        圖1 網(wǎng)絡(luò)結(jié)構(gòu)拓?fù)鋱D

        該網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)可以支持多個(gè)上位機(jī)和系統(tǒng)中的下位機(jī)建立網(wǎng)絡(luò)連接,通過交換機(jī)或路由器工作人員不僅可以在工業(yè)現(xiàn)場還可以在辦公室里直接監(jiān)控儀器發(fā)送的測試數(shù)據(jù)。本系統(tǒng)還具有較強(qiáng)的靈活性和可擴(kuò)展性,當(dāng)系統(tǒng)需要接入更多的儀器時(shí)只需增加作為中介服務(wù)器的下位機(jī)數(shù)量,將儀器和下位機(jī)接到同一交換機(jī)下配置為同一網(wǎng)段,建立網(wǎng)絡(luò)連接后下位機(jī)即可同作為客戶端的多個(gè)儀器進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)收發(fā),同時(shí)上位機(jī)軟件會通過掃描連接找到新接入的下位機(jī)進(jìn)行數(shù)據(jù)交互[3]。

        采用上述設(shè)計(jì)模式少量的上位機(jī)可對工業(yè)現(xiàn)場所有儀器進(jìn)行集中監(jiān)控,提高了上位機(jī)的承載量和利用率,大大降低了生產(chǎn)成本。

        2 基于IOCP的上位機(jī)軟件設(shè)計(jì)與實(shí)現(xiàn)

        2.1 IOCP模型原理

        IOCP是一種用于同志應(yīng)用程序異步I/O操作完成的內(nèi)核對象。要使用IOCP,首先需要?jiǎng)?chuàng)建一個(gè)IOCP內(nèi)核對象,然后將該內(nèi)核對象與應(yīng)該監(jiān)控的設(shè)備(套接字)相關(guān)聯(lián)。當(dāng)設(shè)備完成了一個(gè)異步I/O操作之后,系統(tǒng)會把這個(gè)I/O操作的完成通知掛到該IOCP的完成通知隊(duì)列上去。當(dāng)IOCP的完成通知隊(duì)列上出現(xiàn)一個(gè)完成通知時(shí),IOCP將喚醒一個(gè)等待線程,讓該線程去處理這個(gè)完成通知。每個(gè)IOCP對象會關(guān)聯(lián)2倍于系統(tǒng)CPU數(shù)目的線程,這些線程不是在處理完成通知,就是在等待處理完成通知,構(gòu)成了和該IOCP相關(guān)聯(lián)的線程池[4]。

        一個(gè)IOCP內(nèi)核對象可同時(shí)監(jiān)控多個(gè)設(shè)備的異步I/O操作。由于任何時(shí)候都可能會有多個(gè)異步I/O操作的完成通知,因此IOCP內(nèi)核對象會維護(hù)三個(gè)線程隊(duì)列,即當(dāng)前所有完成通知的隊(duì)列,處于運(yùn)行狀態(tài)線程隊(duì)列,以及等待線程隊(duì)列,如圖2所示。

        圖2 IOCP線程隊(duì)列圖

        根據(jù)圖中顯示的IOCP線程隊(duì)列的工作方式,當(dāng)某個(gè)設(shè)備的一個(gè)異步I/O操作完成時(shí),系統(tǒng)會把一個(gè)完成通知添加到完成通知隊(duì)列,然后再從等待線程隊(duì)列中喚醒一個(gè)線程,讓該線程處理完成通知,同時(shí)把該線程從等待線程隊(duì)列移到運(yùn)行線程隊(duì)列[5]。

        2.2 數(shù)據(jù)結(jié)構(gòu)

        在通過IOCP模型進(jìn)行網(wǎng)絡(luò)編程過程中,會用到2個(gè)重要的IOContex和OverLappedPlus結(jié)構(gòu)體。IOContex結(jié)構(gòu)體主要存放連接下位機(jī)套接字的相關(guān)信息,包括該套接字所對應(yīng)的IP地址和端口號以及數(shù)據(jù)緩沖區(qū)。

        OVERLAPPED結(jié)構(gòu)體參數(shù)是用于向完成端口投遞IO請求時(shí)傳遞給完成端口的。由于OVERLAPPED結(jié)構(gòu)體本身只存儲了一些簡單的信息,應(yīng)用程序不能確定完成的是哪個(gè)操作。因此需要設(shè)計(jì)一個(gè)擴(kuò)展OVERLAPPED結(jié)構(gòu)體,使它包含一些其他信息并將OVERLAPPED結(jié)構(gòu)作為擴(kuò)展結(jié)構(gòu)體變量的第一個(gè)成員。具體的定義如下所示[6]:

        2.3 程序的實(shí)現(xiàn)流程

        上位機(jī)軟件網(wǎng)絡(luò)通信程序基于IOCP模型進(jìn)行實(shí)現(xiàn),其功能主要由3類線程來完成:分別是1個(gè)主線程,1個(gè)負(fù)責(zé)網(wǎng)絡(luò)連接掃描線程和4個(gè)IOCP工作者線程。線程之間的調(diào)度和切換由Windows系統(tǒng)自動(dòng)處理。IOCP模型的網(wǎng)絡(luò)通信程序流程圖如圖3所示。

        圖3 IOCP通信程序流程圖

        具體工作流程如下[7]:

        ①主線程調(diào)用CreateIoCompletionPort函數(shù)創(chuàng)建一個(gè)完成端口對象;

        ②根據(jù)設(shè)置網(wǎng)絡(luò)掃描IP地址范圍依次調(diào)用WSASocket函數(shù)創(chuàng)建重疊套接字并調(diào)配置IP地址及端口號;

        ③調(diào)用CreateIoCompletionPort函數(shù)把重疊套接字關(guān)聯(lián)到完成端口對象,調(diào)用AfxBeginThread函數(shù)創(chuàng)建系統(tǒng)內(nèi)核數(shù)乘以2數(shù)量的IOCP工作者線程;

        ④創(chuàng)建一個(gè)掃描連接線程,調(diào)用ConnectEx函數(shù)投遞連接套接字對嵌入式終端主動(dòng)發(fā)起TCP連接請求;

        ⑤在線程中等待完成通知,當(dāng)套接字成功建立連接或者讀寫操作完成,會喚醒IOCP工作者線程由工作者線程進(jìn)行處理;

        ⑥如果程序退出或者主線程接收到斷開網(wǎng)絡(luò)命令則按順序依次退出連接掃描線程和工作者線程并清理套接字資源[8]。

        主線程和工作者線程通過調(diào)用WSARecv和WSASend發(fā)起異步I/O請求,即執(zhí)行讀、寫操作后立即返回,由IOCP工作者線程函數(shù)ThreadPoolFunc負(fù)責(zé)等待并處理IOCP對象的I/O完成通知[6]。ThreadPoolFunc函數(shù)建立了一個(gè)while循環(huán),在循環(huán)中調(diào)用GetQueuedCompletionStatus函數(shù),然后線程就進(jìn)入等待狀態(tài)。當(dāng)函數(shù)返回值為FALSE且錯(cuò)誤代碼為WSA_IO_PENDING表明I/O操作還未正式完成繼續(xù)循環(huán)等待,當(dāng)函數(shù)成功返回且擴(kuò)展重疊結(jié)構(gòu)指針不為NULL時(shí)說明完成一個(gè)成功的I/O操作,則一個(gè)工作者線程被喚醒并處理I/O完成隊(duì)列中的I/O完成通知。工作者線程根據(jù)m_NetWorkE-nents變量的值來判斷哪一類I/O操作完成。如果是套接字讀寫操作完成,調(diào)用OnRecvRead或On-SendWrite函數(shù)處理,OnRecvRead函數(shù)先對收到的數(shù)據(jù)進(jìn)行解析,如果數(shù)據(jù)未發(fā)生丟失并且符合格式則調(diào)用ReceiveMessageProcess函數(shù)對數(shù)據(jù)進(jìn)行分析處理,否則要求下位重新發(fā)送數(shù)據(jù)。如果m_Net-WorkEnents變量值表示接到IOCP線程退出通知,則關(guān)閉相對應(yīng)的套接字并清理資源,然后退出線程[9]。

        3 系統(tǒng)測試

        基于以上設(shè)計(jì)思路設(shè)計(jì)上位機(jī)軟件,根據(jù)負(fù)載要求設(shè)計(jì)20塊帶RJ45網(wǎng)絡(luò)接口的STM32F103ZET6單片機(jī)作為下位機(jī),搭建測試平臺對系統(tǒng)網(wǎng)絡(luò)通信功能進(jìn)行測試[10]。

        3.1 測試環(huán)境

        硬件環(huán)境:上位機(jī)電腦采用Inter Core(Tm) 2CPU 6300 2.1 GHz內(nèi)存2 GB。下位機(jī)使用STM32F103單片機(jī)。上下位機(jī)之間通過10/100 M交換機(jī)進(jìn)行數(shù)據(jù)交換。

        網(wǎng)絡(luò)環(huán)境:10/100 M局域網(wǎng)絡(luò)。

        系統(tǒng)環(huán)境:上位機(jī)軟件在Microsoft Windows7 32位操作系統(tǒng)下運(yùn)行,下位機(jī)STM32單片機(jī)移植μC/OS-II嵌入式實(shí)時(shí)操作系統(tǒng)加LwIP嵌入式網(wǎng)絡(luò)協(xié)議棧[11]。

        3.2 測試方法

        (1)網(wǎng)絡(luò)掃描連接測試:STM32單片機(jī)在上位機(jī)軟件打開前或打開后開啟,上位機(jī)軟件均能掃描連接STM32單片機(jī)進(jìn)行并發(fā)網(wǎng)絡(luò)通信。

        (2)網(wǎng)絡(luò)通信測試:每個(gè)下位機(jī)每隔200 ms向上位機(jī)發(fā)送數(shù)據(jù)量為2 048 B的儀器測試數(shù)據(jù)。在程序中對上位機(jī)接收的數(shù)據(jù)量進(jìn)行統(tǒng)計(jì),和所有下位機(jī)發(fā)送的總數(shù)據(jù)量比較驗(yàn)證測試數(shù)據(jù)接收是否完整性和實(shí)時(shí)性[12]。

        3.3 測試結(jié)果

        按照上述測試方法對本系統(tǒng)進(jìn)行多次測試,測試結(jié)果如表1和表2所示。其中表1中每項(xiàng)測試次數(shù)為30次,全部下位機(jī)成功接入次數(shù)為30次。

        表1 網(wǎng)絡(luò)掃描連接測試結(jié)果

        表2 網(wǎng)絡(luò)通信測試結(jié)果

        多次測試結(jié)果表明上位機(jī)軟件實(shí)現(xiàn)對所有處于工作狀態(tài)下位機(jī)的主動(dòng)掃描連接,連接成功后上位機(jī)軟件能準(zhǔn)確地接收下位機(jī)發(fā)送的測試數(shù)據(jù),實(shí)時(shí)更新顯示在主界面上不會阻塞Winodws消息循環(huán)導(dǎo)致界面假死現(xiàn)象。

        4 結(jié)束語

        利用IOCP機(jī)制實(shí)現(xiàn)的上位機(jī)網(wǎng)絡(luò)通信程序能夠最大限度的利用線程對大量I/O讀寫請求進(jìn)行高效的處理,提供了最好的網(wǎng)絡(luò)伸縮性和負(fù)載均衡,保證了上位機(jī)軟件對多下位機(jī)大數(shù)據(jù)量并發(fā)通信的實(shí)時(shí)性和高效性,達(dá)到了系統(tǒng)設(shè)計(jì)的預(yù)期目標(biāo)。其良好的可擴(kuò)展性和兼容性則有利于系統(tǒng)的升級改造,減少開發(fā)成本。該系統(tǒng)已在生產(chǎn)過程通過測試,系統(tǒng)運(yùn)行穩(wěn)定,符合工業(yè)現(xiàn)場數(shù)據(jù)采集控制的要求。

        [1]孫海明.精通Windows Sockets網(wǎng)絡(luò)開發(fā):基于Visual C++實(shí)現(xiàn)[M].北京:人民郵電出版社,2008:40-100.

        [2]彭剛,秦志強(qiáng).基于ARM Cortex-M3的STM32系列嵌入式微控制器應(yīng)用實(shí)踐[M].北京:電子工業(yè)出版社,2011:100-165.

        [3]湯莉莉,黃偉,王春波,等.基于Cortex-M3單片機(jī)的WiFi物聯(lián)網(wǎng)小車的設(shè)計(jì)[J].無線電工程,2014,44 (4):58-61.

        [4]Kevin R,F(xiàn)all W.Richard Stevens.TCP/IP詳解[M].北京:機(jī)械工業(yè)出版社,2012:579-591.

        [5]張會勇.Winsock網(wǎng)絡(luò)編程經(jīng)絡(luò)[M].北京:電子工業(yè)出版社,2012:233-235.

        [6]汪慶蓮.網(wǎng)絡(luò)掃描系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].湖北第二師范學(xué)院學(xué)報(bào),2010,27(8):110-119.

        [7]廖宏建,楊玉寶,唐連章.完成端口實(shí)現(xiàn)高性能服務(wù)端通信層的關(guān)鍵問題[J].計(jì)算機(jī)應(yīng)用,2012,32(3): 812-815.

        [8]李健,李麗霞.基于以太網(wǎng)的數(shù)字話音傳輸系統(tǒng)設(shè)計(jì)[J].無線電工程,2014,44(5):68-70,74.

        [9]吳鑫,俞建定,汪沁,等.基于W5100的RS485-Ethernet數(shù)據(jù)轉(zhuǎn)換器設(shè)計(jì)[J].無線電通信技術(shù),2014,40(5):93-96.

        [10]韓松,李奎,王麗麗,等.基于Modbus/TCP協(xié)議的遠(yuǎn)程控制網(wǎng)關(guān)[J].儀表技術(shù)與傳感器,2014(10): 102-104,107.

        [11]陸旭.基于μC/OS-II和LwIP的嵌入式設(shè)備監(jiān)控平臺研究[D].重慶:重慶大學(xué),2013.

        [12]王景忠,王俊芳,于立佳.一種實(shí)現(xiàn)RS232接口一對多通信的方法[J].無線電工程,2012,42(12):1-3,29.

        Multi-instrument Data Collection and Control System Based on IOCP Model

        CAI Chen-xi,QIN Hui-bin
        (Hangzhou Dianzi University,Hangzhou Zhejiang 310000,China)

        To meet the requirement of different types of instruments for centralized monitoring,and considering the great amount of instrument connections,frequent data communication and high demands on real-time,a design method,which takes the IOCP network model as the core and combines Windows multi-thread and database programming technology,is proposed in this paper to realize a multi-instrument control system.The principle of IOCP and the control system structure are presented first,then the key problems encountered during system design and implementation and their solutions are described and discussed.Finally the validity of the method is verified by network communication test by using embedded system based on STM32 with Low Weight Internet Protocol(LwIP).

        IOCP;overlapped I/O;TCP/IP protocol;multi-thread;control system

        TP273

        A

        1003-3114(2015)05-71-3

        10.3969/j.issn.1003-3114.2015.05.19

        蔡晨曦,秦會斌.基于IOCP模型的多儀器數(shù)據(jù)采集與控制系統(tǒng)[J].無線電通信技術(shù),2015,41(5):71-73,85.

        2015-03-03

        蔡晨曦(1988—),男,碩士研究生,主要研究方向:計(jì)算機(jī)網(wǎng)絡(luò)編程。秦會斌(1972—),博士生導(dǎo)師,主要研究方向:新型電子器件及ASIC設(shè)計(jì)、現(xiàn)代傳感器設(shè)計(jì)及應(yīng)用。

        猜你喜歡
        機(jī)軟件下位網(wǎng)絡(luò)通信
        基于網(wǎng)絡(luò)通信的智能照明系統(tǒng)設(shè)計(jì)
        電子制作(2019年15期)2019-08-27 01:11:48
        發(fā)射機(jī)房監(jiān)控系統(tǒng)之下位機(jī)
        網(wǎng)絡(luò)通信中信息隱藏技術(shù)的應(yīng)用
        基于網(wǎng)絡(luò)通信的校園智能音箱設(shè)計(jì)
        電子制作(2018年1期)2018-04-04 01:48:30
        談?dòng)?jì)算機(jī)網(wǎng)絡(luò)通信常見問題及技術(shù)發(fā)展
        電子制作(2017年17期)2017-12-18 06:41:06
        道岔監(jiān)測系統(tǒng)上位機(jī)軟件設(shè)計(jì)
        景洪電廠監(jiān)控系統(tǒng)下位機(jī)數(shù)據(jù)傳輸網(wǎng)絡(luò)改造
        圍觀黨“下位”,吐槽帝“登基”
        基于正交試驗(yàn)法的北斗用戶機(jī)軟件測試用例設(shè)計(jì)
        PCI-e高速數(shù)據(jù)采集卡的驅(qū)動(dòng)與上位機(jī)軟件設(shè)計(jì)
        電子器件(2015年5期)2015-12-29 08:43:12
        高清无码精品一区二区三区| h视频在线播放观看视频| 亚洲国产熟女精品传媒| 蜜芽亚洲av无码精品色午夜| 国产精品久久久久9999| 亚洲女同免费在线观看| 一区二区三区国产精品乱码| 亚洲精品乱码久久久久蜜桃| 亚洲热线99精品视频| 天天摸日日摸狠狠添| 国产成人综合在线视频| 国产欧美日产久久| 国产精品一区二区av片| 亚洲AV无码中文AV日韩A| 国内激情一区二区视频| 免费看黄视频亚洲网站| 久久亚洲av成人无码国产最大| 中文字幕久久波多野结衣av不卡| 亚洲人交乣女bbw| 欧美熟妇精品一区二区三区| 天天狠天天透天干天天| 亚洲av粉色一区二区三区| 成年毛片18成年毛片| 精品女同一区二区三区亚洲| 亚洲熟妇av一区二区三区hd| 免费看片的网站国产亚洲| 国产精品久久久在线看| 美女免费视频观看网址| 色天使久久综合网天天| 少妇性饥渴无码a区免费| 国产精品福利自产拍久久| 精品国产AⅤ无码一区二区| 国产亚洲欧洲AⅤ综合一区| 国产一区二区三区免费在线视频 | 亚洲欧美aⅴ在线资源| 狠狠色噜噜狠狠狠狠色综合久| 色婷婷七月| 青青草伊人视频在线观看| 男女调情视频在线观看| 亚洲久悠悠色悠在线播放| 国产两女互慰高潮视频在线观看 |