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

        ?

        基于TCP/Modbus協(xié)議的面向多連接信號采集器設計

        2010-04-12 00:00:00王立峰程季多
        現(xiàn)代電子技術 2010年7期

        摘 要:進行了基于Modbus協(xié)議和TCP/IP協(xié)議相結合的遠程網絡通信協(xié)議的研究。在詳細分析TCP/IP協(xié)議和Modbus協(xié)議的基礎上,提出對TCP/IP協(xié)議進行精簡的設計方法,設計了基于TCP/Modbus協(xié)議的面向多連接信號采集器,重點分析了信號采集器和多臺計算機通過Internet傳輸數(shù)據(jù)的方法。該設計方法能實現(xiàn)及時可靠的TCP/Modbus通信,此協(xié)議對系統(tǒng)的硬件和軟件要求較低,并成功應用于工程實際,對基于TCP/Modbus協(xié)議的工業(yè)以太網絡的具體應用具有一定的現(xiàn)實意義。

        關鍵詞:Modbus協(xié)議; TCP/IP協(xié)議; 多連接; 以太網數(shù)據(jù)幀

        中圖分類號:TN915.04 文獻標識碼:A

        文章編號:1004-373X(2010)07-0175-04

        Design of Signal Gathering Device Oriented to Multi-connection Based on TCP/Modbus Protocol

        WANG Li-feng1, LI Hui2, CHENG Ji-duo3

        (1.College of Mechanical and Electrical Engineering, Northeast Forestry University, Harbin 150040, China;

        2.College of Communication and Electronic Engineering, Qiqihar University, Qiqihar 161006, China;

        3.Diversified Company, Aermu Forestry Bureau of Daxing’anling, Daxing’anling 165302, China)

        Abstract:The research of remote network communication protocol is studied based on the combination of Modbus protocol and TCP/IP protocol. On the basis of analyzing Modbus protocol and TCP/IP protocol, the design method of retrenching TCP/IP protocol is proposed, and multi-connection signal gathering device based on TCP/Modbus protocol is designed. The method of transmitting data between the signal gathering device and multi-hosts in the Internet is analysed. This design method can realize prompt and reliable TCP/Modbus communication and only has minimum requirements on the system hardware and software, it has been used in the engineering and has actual meaning for the certainapplication of the industrial Ethernet based on TCP/Modbus protocol.

        Key words:Modbus protocol; TCP/IP protocol; multi-connection; Ethernet data frame

        0 引 言

        在工業(yè)以太網絡上,信號采集器作為數(shù)據(jù)服務器,必須可以支持多個并發(fā)的客戶機,甚至在計劃內用戶只有單一客戶時也要能響應(并發(fā)),并允許客戶機高速的順序關閉和重開連接,以對無發(fā)送的響應做出快速反應。對于這種并發(fā)的客戶機訪問,通常有兩種方式解決:第一種是使用嵌入式操作系統(tǒng),當有新的連接請求時,由操作系統(tǒng)動態(tài)建立一個任務來維持這個連接,即由每個任務來維持一個連接。其缺點是嵌入式操作系統(tǒng)對硬件有較高的要求,其內核也占用一定CPU資源,對軟件要求也較高。第二種是模擬多任務系統(tǒng),由系統(tǒng)預先分配一個大的數(shù)據(jù)區(qū)來存儲每個客戶機的連接信息及通信狀態(tài),通過數(shù)組或指針的方式進行索引查詢。該方法軟件編程結構較復雜,預設的客戶端越多,數(shù)據(jù)區(qū)占用硬件資源越嚴重,達到連接數(shù)量后,就不能再為其他客戶端提供數(shù)據(jù)了[1,2]。本文通過對TCP/IP協(xié)議和Modbus協(xié)議分析,提出對TCP/IP協(xié)議進行精簡設計,實現(xiàn)基于TCP/Modbus協(xié)議的信號采集器與多臺計算機通信,該方法對系統(tǒng)硬件要求較少,軟件編程代碼量小,通信響應的實時性更強,不限制連接數(shù)量。

        1 Modbus/TCP協(xié)議介紹

        Modbus應用層協(xié)議由美國Modicon公司于1979年開發(fā),用于實現(xiàn)其PLC產品與上位機的通信。由于其簡單易用,我國標準化委員會已將Modbus協(xié)議作為我國工業(yè)自動化的行業(yè)標準。1999年施奈德電氣發(fā)布了TCP/Modbus協(xié)議,使得以太網上的Modbus設備可以通過502端口進行通信。

        TCP/Modbus使用傳輸協(xié)議(TCP)進行Modbus應用協(xié)議的數(shù)據(jù)傳輸,使用封裝的方法將Modbus參數(shù)和數(shù)據(jù)嵌入到TCP數(shù)據(jù)包中。TCP/IP協(xié)議和以太網的鏈路層校驗機制可保證數(shù)據(jù)包傳遞的正確性,TCP/Modbus報文中不再存在CRC-16或LRC校驗域,但添加一個Modbus應用幀頭(MBAP),它對Modbus的參數(shù)及功能進行解釋[3,4]。

        一幀以太網數(shù)據(jù)包的大小是64~1 518 B,而TCP/Modbus協(xié)議所占用數(shù)據(jù)包的最大尺寸小于300 B。所以每一個客戶機請求數(shù)據(jù)和數(shù)據(jù)服務器回應的數(shù)據(jù)均用一個以太網幀即可實現(xiàn),而不用考慮正常TCP數(shù)據(jù)分組的拆分數(shù)據(jù)、分批傳輸及數(shù)據(jù)的完整性問題[5,6]。采集器和客戶機的通信是通過TCP/Modbus協(xié)議在Internet網絡上進行傳輸,整個網絡通信采用面向多連接方式,系統(tǒng)原理如圖1所示。

        圖1 信號采集器與客戶機通信原理圖

        2 精簡TCP/IP協(xié)議設計

        通過對TCP/IP協(xié)議分析發(fā)現(xiàn),在網絡數(shù)據(jù)傳輸過程中,客戶機向采集器所發(fā)送的以太網數(shù)據(jù)幀中包含MAC地址、IP地址、端口號、標志位、序列號等信息[7]。根據(jù)這些信息,經過計算整理后,采集器可以產生回應數(shù)據(jù)包,不需要保存各客戶端的狀態(tài)與連接信息,從而保證每一個數(shù)據(jù)包都能得到正確回應,這樣就使采集器不再限制客戶機的連接數(shù)量。這種數(shù)據(jù)的請求與回應體現(xiàn)在TCP 通訊中的三個過程:連接的建立、數(shù)據(jù)的傳輸、連接的關閉。對于回應數(shù)據(jù)包中的MAC地址、IP地址、端口號這些信息,可以在接收的數(shù)據(jù)包中得到,其他數(shù)據(jù)可通過接收到的數(shù)據(jù)計算獲得,其中主要改變的數(shù)據(jù)有:標志位、序列號和確認號等。以下對客戶機和采集器之間通信的三個過程中數(shù)據(jù)包的產生進行論述。

        2.1 第一個過程:連接的建立

        客戶端連接請求:客戶端向服務器發(fā)送一個同步數(shù)據(jù)包請求建立連接,該數(shù)據(jù)包中,同步標志位被置位,初始序列號是客戶端隨機產生的一個值,確認號是 0。

        服務器回應:服務器收到這個同步請求數(shù)據(jù)包后,會對客戶端進行一個同步確認。這個數(shù)據(jù)包中,同步標志位和確認標志位被置位,序列號是服務器隨機產生的一個值,確認號是客戶端的初始序列號+1。

        客戶端確認:客戶端收到這個同步確認數(shù)據(jù)包后,再對服務器進行一個確認。該數(shù)據(jù)包中,確認標志位被置位,序列號是上一個同步請求數(shù)據(jù)包中的確認號值,確認號是服務器的初始序列號+1。連接建立完成,即“三次握手”完成。

        2.2 第二個過程:數(shù)據(jù)的傳輸

        客戶端數(shù)據(jù)請求:客戶端向服務器發(fā)送一個帶有TCP/Modbus的數(shù)據(jù)包,該數(shù)據(jù)包中的序列號和確認號與建立連接第三步的數(shù)據(jù)包中的序列號和確認號相同。

        服務器數(shù)據(jù)回應:服務器收到該數(shù)據(jù)包后,分析數(shù)據(jù)的命令信息,正確后向客戶機發(fā)送一個確認數(shù)據(jù)包和回應數(shù)據(jù)包,在確認數(shù)據(jù)包中,確認標志位被置位,序列號是上一個數(shù)據(jù)包中的確認號值,而確認號為客戶端發(fā)送的上一個數(shù)據(jù)包中的序列號+該數(shù)據(jù)包中所帶數(shù)據(jù)的大小。在回應數(shù)據(jù)包中,確認標志位被置位,序列號和確認號與確認數(shù)據(jù)包中的序列號和確認號相同。

        2.3 第三個過程:關閉連接

        關閉連接過程分為服務器請求關閉和客戶端請求關閉,作為信號采集服務器不必主動關閉連接。客戶端關閉TCP連接請求,即客戶端數(shù)據(jù)包中結束標志位被置位。服務器收到客戶端發(fā)送的終止數(shù)據(jù)包后,將對客戶端發(fā)送確認信息,以關閉該方向上的 TCP 連接。這時在數(shù)據(jù)包中,同步標志位和確認標志位被置位,序列號為接收數(shù)據(jù)包中的確認號值,而確認號為接收數(shù)據(jù)包中的序列號+1。

        通過以上對TCP/IP協(xié)議的精簡,可以通過編程來實現(xiàn)服務器與客戶端的通信過程,且對客戶機的數(shù)量沒有限制。

        3 信號采集器硬件組成

        為了增強采集器的功能并減小硬件設計復雜程度,降低成本,CPU選用片上資源豐富的高速 SoC C8051F020 單片機。該款單片機的主要資源有:8個12位SARADC;8位ADC,可編程轉換速率最大500 KSPS;兩個12位DAC,可以同步輸出,用于產生無抖動波形;電壓基準;4 KB RAM;64 KB FLASH存儲器;兩個UART串口;硬件SMBus。信號采集器硬件原理框圖如圖2所示。

        存儲器選用24LC04,主要用于存放IP地址、MAC地址、采樣周期、有關硬件設置信息及數(shù)據(jù)處理所設定的參數(shù)等。為擴展C8051F020的內存,采用IS62LV2568數(shù)據(jù)存儲器,存儲空間為256 KB;以太網控制器采用新型獨立控制芯片CP2200,它符合IEEE 802.3協(xié)議,內置10 Mb/s以太網物理層器件PHY及媒介接入控制器MAC;以太網接口器件采用PRJ系列的PRJ-010型變壓器[8];RS 232接口芯片選用智能的RS 232收發(fā)器SP3223;RS 485接口芯片選用SP3485;日歷時鐘芯片采用工業(yè)級S-3539A;信號處理電路由阻容濾波電路、精密電阻、差分運放組成,將外部輸入差分信號(4~20 mA)轉換成符合CPU內A/D轉換器所要求的范圍內。電源電路主要有降壓型開關穩(wěn)壓器LM2576-5和AS1117/3.3組成,為整個硬件系統(tǒng)提供5 V和3.3 V直流電壓[9]。

        圖2 信號采集器硬件原理框圖

        4 軟件設計

        信號采集器可通過以太網接口、RS 232接口和RS 485接口與客戶機或其他智能設備相通信。當采用RS 232接口和RS 485接口連接其他智能設備時,可為其編寫相應的服務和配置程序進行數(shù)據(jù)采集。模擬信號進行數(shù)字采集處理電路處理后,接入單片機內部集成的A/D轉換模塊進行數(shù)據(jù)采集。采集到的全部數(shù)據(jù)統(tǒng)一存儲到預先分配好的內存中,為采集器與客戶機之間通信提供源數(shù)據(jù)[10]。本文主要介紹采集器與客戶機之間進行TCP/Modbus協(xié)議通信的實現(xiàn)過程,即對客戶機所發(fā)送的以太網幀做出正確回應。軟件流程圖如圖3所示。

        圖3 軟件流程圖

        根據(jù)對TCP/Modbus協(xié)議分析,采集器只需對三種以太網數(shù)據(jù)包產生回應,即可實現(xiàn)與客戶機的通信過程:連接請求的回應;數(shù)據(jù)請求的回應;關閉連接請求的回應?,F(xiàn)就關鍵代碼進行分析:Handle_ethPCK()函數(shù)對全部以太網數(shù)據(jù)包進行處理,并對正確的數(shù)據(jù)包進行回應,此函數(shù)包含TCP協(xié)議通訊的三個過程。

        void FillPCK(INT8U xdata * outbuf);

        //填充以太網數(shù)據(jù)包的公共數(shù)據(jù)信息

        void Handle_ethPCK(INT8U xdata * inbuf,INT16U len)//處理以太網封包

        {……

        if (cksum(inbuf+14,header_len) != 0xFFFF) return;//校驗IP包頭

        if (header_len > 20)

        {

        memmove(inbuf+34,inbuf+14+header_len,payload_len);//整合IP包,除去多余數(shù)據(jù)

        header_len=20;

        I_ip->ver_len=0x45;

        I_ip->total_length=20+payload_len;

        }

        if(I_ip->protocol_id!=TCP_TYPE) return;

        sum=(ULONG)cksum(inbuf+26,8+payload_len);//校驗TCP封包

        sum+= (ULONG)0x0006;

        sum+= (ULONG)len;

        result=(UINT)(sum+(sum>>16));

        if (result != 0xFFFF)return;

        if (I_tcp->dest_port != 502)return;//TCP端口號為502

        if ((I_tcp->flags FLG_SYN) ((I_tcp->flags FLG_ACK)==0))//建立連接請求的回應

        {

        O_len=62;

        outbuf=(UCHAR xdata *)malloc(O_len);

        memcpy(outbuf+54,opt,8);

        O_eth=(ETH_HEADER xdata *)outbuf;

        O_tcp=(TCP_HEADER xdata *)(outbuf+34);

        O_ip=(IP_HEADER xdata *)(outbuf+14);

        O_tcp->sequence=I_tcp->ack_number+100;

        O_tcp->ack_number=I_tcp->sequence+1;

        O_tcp->flags=(28<<10) | FLG_SYN | FLG_ACK;

        FillPCK(outbuf);//填充公共的數(shù)據(jù)信息

        eth_send(outbuf,O_len);//發(fā)送以太網封包

        return;

        }

        header_len = (I_tcp->flags 0xF000)>>10;

        data_len=len - header_len;

        if (I_tcp->flags FLG_FIN)//關閉連接請求回應

        {

        O_len=54;

        outbuf=(UCHAR xdata*)malloc(O_len);

        O_eth=(ETH_HEADER xdata*)outbuf;

        O_tcp=(TCP_HEADER xdata*)(outbuf+34);

        O_ip=(IP_HEADER xdata*)(outbuf+14);

        O_tcp->ack_number=tcp->sequence+data_len+1;

        O_tcp->flags=(20<<10) | FLG_FIN | FLG_ACK;

        FillPCK(outbuf);

        eth_send(outbuf,O_len);

        return;

        }

        header_len=(I_tcp->flags 0xF000)>>10;

        data_len=len-header_len;

        if (data_len !=0)//發(fā)送數(shù)據(jù)請求的回應

        {

        data_pos=34+header_len;//Modbus數(shù)據(jù)包位置

        if (! CheckMbPck(inbuf+data_pos)) return;//檢查Modbus數(shù)據(jù)請求包是否正確

        MB_Addr=(*(inbuf+header_pos+8))*256+(*(inbuf+header_pos+9));

        //Modbus數(shù)據(jù)請求的起始寄存器號

        If (MB_Addr!=m_Addr) return;//判斷MB_Addr是否是本地地址

        MB_len=(*(inbuf+header_pos+10))*256+(*(inbuf+header_pos+11));//MODBUS數(shù)據(jù)請求數(shù)量

        O_len=54+2*MB_len;

        outbuf=(UCHAR xdata *)malloc(O_len);

        O_eth=(ETH_HEADER xdata *)outbuf;

        O_tcp=(TCP_HEADER xdata *)(outbuf+34);

        O_ip=(IP_HEADER xdata *)(outbuf+14);

        O_tcp->ack_number=I_tcp->sequence+data_len;//發(fā)送數(shù)據(jù)包的確認號

        O_tcp->sequence=I_tcp->ack_number;//發(fā)送數(shù)據(jù)包的序列號

        O_tcp->flags=(28<<10) | FLG_ACK;

        O_len=54;

        FillPCK(outbuf);//填充公共的數(shù)據(jù)信息

        eth_send(outbuf,O_len);//發(fā)送以太網封包

        O_len=54+2*MB_len+3+6;

        *(outbuf+54+6)=2*MB_len+3;

        memcpy(outbuf+60,inbuf+data_pos+6,2);//填充Modbus數(shù)據(jù)頭

        *(outbuf+62)=2*MB_len;//填充Modbus數(shù)據(jù)長度

        memcpy(outbuf+63,MB_data,2*MB_len);//填充Modbus數(shù)據(jù)體

        O_tcp->sequence=I_tcp->ack_number;

        tcp->flags=0x5000 | FLG_ACK | FLG_PSH;

        FillPCK(outbuf);//填充公共的數(shù)據(jù)信息

        eth_send(outbuf,O_len);//發(fā)送以太網封包

        return;

        }

        }

        5 結 語

        采用精簡TCP/Modbus協(xié)議的信號采集器通過20臺客戶機測試,每臺客戶機每50 ms發(fā)送一次數(shù)據(jù)請求,客戶機的全部請求均能得到正確響應,沒有發(fā)現(xiàn)數(shù)據(jù)包丟失,實現(xiàn)了采集器和客戶機之間無差錯的遠程以太網通信。本文設計的信號采集器性價比高,實施成本低,該設計方法目前已成功應用于大慶某電廠的數(shù)據(jù)采集服務器中。本設計方法通過以太網通訊,傳輸距離遠,可在Internet涉及到的任何地方實現(xiàn)遠程監(jiān)控功能;可利用現(xiàn)有網絡設施,通用性強;可以將此設計方法應用于各種需要網絡監(jiān)控功能的電器設備中。

        參考文獻

        [1]潘洪躍.基于Modbus協(xié)議通信的設計與實現(xiàn)[J].計量技術,2002(4):35-36.

        [2]徐濤,閆科.基于Modbus協(xié)議的串行接口實現(xiàn)與DCS通信[J].工業(yè)控制計算機,2002,15(3):56-57.

        [3]姜斌.基于Modbus/TCP工業(yè)以太網協(xié)議的溫度采集網絡設計[D].大連:大連海事學院,2007.

        [4]蔣近,毛六平,戴瑜興.基于Modbus和TCP/IP協(xié)議的遠程網絡通信[J].低壓電器,2005(1):43-46.

        [5]段寧華.網絡基礎與應用實務教程[M].北京:清華大學出版社,2006.

        [6]劉衍珩,康輝,魏達,等.計算機網絡[M].北京:科學出版社,2007.

        [7]STEVENS R W. TCP/IP Illustrated Volume I: The Protocols [M]. Beijing: China Machine Press, 2000: 24-98.

        [8]童長飛.C8051F系列單片機開發(fā)與C語言編程[M].北京:北京航空航天大學出版社,2005.

        [9]胡偉,季曉衡.單片機C程序設計及應用實例[M].北京:人民郵電出版社,2003.

        [10]潘琢金,孫德龍,夏秀峰.C8051F單片機應用解析[M].北京:北京航空航天大學出版社,2002.

        亚洲女人毛茸茸的视频| 亚洲国产综合人成综合网站| 国产免费人成视频在线播放播| 国产精品三级自产拍av| 大香蕉av一区二区三区| 国产精品无码aⅴ嫩草| 日韩精品无码区免费专区| 一本色道久久综合狠狠躁中文| 一区二区三区日本高清| 国产成人无码精品久久久露脸 | 精品一二区| 国产一区二区三区精品乱码不卡 | 最新亚洲视频一区二区| 亚洲中文无码av永久| 饥渴的熟妇张开腿呻吟视频| 国内无遮码无码| 日韩人妻大奶子生活片| 色综合天天综合欧美综合| 国产免费av片在线观看播放| 日本久久久久| 在线亚洲精品中文字幕美乳色| 无码国产精品一区二区av| 少妇厨房愉情理伦片免费| 欧洲亚洲色一区二区色99| 开心五月骚婷婷综合网| 久久精品国产亚洲7777| 国自产偷精品不卡在线| 日本在线中文字幕一区二区| 日本一二三区在线观看视频| 亚洲熟女乱色综合亚洲图片| 人妻丰满熟妇AV无码片| 成人影院羞羞的视频免费观看| 亚洲日韩在线中文字幕综合| 亚洲免费人成在线视频观看 | 毛片av中文字幕一区二区| 精品日韩一级免费视频| 乌克兰少妇xxxx做受野外| 无码不卡一区二区三区在线观看| 日本一区二区偷拍视频| 男人女人做爽爽18禁网站| 久久精品久久精品中文字幕 |