• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于MODBUS TCP協(xié)議的船用以太網(wǎng)通信系統(tǒng)設(shè)計

    2018-04-23 03:53:44楊明超
    船電技術(shù) 2018年3期
    關(guān)鍵詞:客戶機(jī)船用服務(wù)器端

    鄭 軼,楊明超

    (武漢船用電力推進(jìn)裝置研究所,武漢 430064)

    0 引言

    隨著艦船設(shè)備的不斷更新?lián)Q代,對艦船的操作與控制也在逐步向集中式的方向靠攏。艇員依靠集中控制室的計算機(jī)便可觀測艦船各設(shè)備的狀態(tài),并可通過計算機(jī)向各設(shè)備發(fā)送指令。艦船設(shè)備的狀態(tài)參數(shù)的獲取與指令的發(fā)送,需要船用通信系統(tǒng)的良好支持。目前應(yīng)用于艦船的通信方式主要包括CAN通信及以太網(wǎng)通信,其中,以太網(wǎng)通信速率較快,數(shù)據(jù)傳輸穩(wěn)定,不易受到外部干擾,適合大量數(shù)據(jù)參數(shù)的循環(huán)上傳。

    1 概述

    1.1 MODBUS協(xié)議概述

    MODBUS協(xié)議由Modicon在1979年發(fā)明,是OSI模型第7層上的應(yīng)用層報文傳輸協(xié)議,它定義了一個與基礎(chǔ)通信層無關(guān)的協(xié)議數(shù)據(jù)單元(PDU),即PDU=MODBUS功能碼+數(shù)據(jù)域。在某些特定總線或網(wǎng)絡(luò)上,MODBUS協(xié)議能夠映射在應(yīng)用數(shù)據(jù)單元(ADU)上,即ADU=地址域+PDU+校驗碼,其通用幀格式如圖1所示。

    圖1 MODBUS通用幀格式

    目前MODBUS協(xié)議主要應(yīng)用于以太網(wǎng)通信(MODBUS TCP)、串口通信(MODBUS RTU)及高速令牌傳遞網(wǎng)絡(luò)(MODBUS PLUS)。在不同類別的網(wǎng)絡(luò)中,對ADU的封裝也存在差異,以MODBUS TCP/IP為例,其ADU的組成如圖2所示。

    圖2 MODBUSTCP/IP幀格式

    可以看出,在MODBUS TCP協(xié)議中,ADU=MBAP+PDU。MBAP是TCP/IP協(xié)議上使用的一種專用報文頭,用以識別ADU。MBAP報文頭由7個字節(jié)組成,其格式如下表1所示。

    表1 MBAP報文頭組成

    從表格中可以看到,由于MBAP中含有長度信息,接收者能夠清晰的識別報文的邊界,因此在MODBUS TCP協(xié)議中,其ADU不再含有校驗碼。

    1.2 MODBUS TCP通信系統(tǒng)模型

    MODBUS TCP通信系統(tǒng)模型一般基于客戶機(jī)/服務(wù)器模型搭建,如圖3所示。

    圖3 MODBUS TCP通信系統(tǒng)客戶機(jī)/服務(wù)器模型

    客戶機(jī)/服務(wù)器模型基于4種類型的報文:請求、指示、響應(yīng)和證實(shí)??蛻魴C(jī)向服務(wù)器發(fā)送請求指令(MODBUS請求),服務(wù)器接收到來自客戶機(jī)的指令(MODBUS指示)后,對該指令進(jìn)行響應(yīng)(MODBUS響應(yīng)),即按照約定的協(xié)議內(nèi)容向客戶機(jī)發(fā)送數(shù)據(jù),并由客戶機(jī)對發(fā)送的數(shù)據(jù)進(jìn)行辨識和處理(MODBUS證實(shí))。

    MODBUS TCP通信系統(tǒng)可以包括多個MODBUS客戶機(jī)和服務(wù)器,其他互聯(lián)設(shè)備也可通過客戶機(jī)或服務(wù)器TCP/IP網(wǎng)關(guān)接入該通信系統(tǒng),如圖4所示。

    圖4 MODBUS TCP通信系統(tǒng)示意圖

    1.3 船用以太網(wǎng)通信系統(tǒng)

    目前廣泛使用的船用以太網(wǎng)通信系統(tǒng)多采用“一主多從”的構(gòu)建思路,即由集中控制室的計算機(jī)擔(dān)任主機(jī),依次向各設(shè)備輪詢數(shù)據(jù),如圖5所示。

    圖5 船用以太網(wǎng)通信系統(tǒng)結(jié)構(gòu)示意圖

    采用集中式輪詢方式的好處在于可以分時段向各設(shè)備發(fā)送數(shù)據(jù)請求,一來可以有效利用集控室計算機(jī)的系統(tǒng)資源,二來可以避免各設(shè)備同時返回數(shù)據(jù)造成通信線路堵塞。

    2 設(shè)計實(shí)現(xiàn)

    2.1 船用MODBUS TCP通信系統(tǒng)總體框圖

    圖6 船用MODBUS TCP通信系統(tǒng)結(jié)構(gòu)

    結(jié)合圖3、圖4和圖5可以看出,船用以太網(wǎng)通信系統(tǒng)可以按照MODBUS TCP通信系統(tǒng)結(jié)構(gòu)進(jìn)行搭建,如圖6所示。

    將集控室計算機(jī)作為客戶機(jī),各設(shè)備作為服務(wù)器,由集控室計算機(jī)向各設(shè)備發(fā)送輪詢請求,并接收返回數(shù)據(jù)。以客戶機(jī)與其中一臺服務(wù)器為例,其信息交換示意圖如圖7所示。

    圖中,socket()函數(shù)用于創(chuàng)建套接字,bind()函數(shù)用來綁定一個端口號到該套接字,并在套接字與所指定的端口號之間建立一個連接。socket初始化完成后,服務(wù)器端需要使用listen()函數(shù)將狀態(tài)置為偵聽,才能夠接收到來自客戶機(jī)的連接請求。此時,若客戶機(jī)需要與服務(wù)器進(jìn)行數(shù)據(jù)交換,則需要使用connect()函數(shù)來指定套接字號、服務(wù)器IP地址和端口號,服務(wù)器在接收到客戶機(jī)的連接請求后,需要使用accept()函數(shù)指定之前在listen()函數(shù)中所指定的套接字號,用以確定當(dāng)前訪問的客戶機(jī)。在連接完成后,客戶機(jī)可以使用send()函數(shù)向服務(wù)器發(fā)送MODBUS請求,服務(wù)器需要使用recv()函數(shù)進(jìn)行接收,再使用send()函數(shù)向客戶機(jī)發(fā)送MODBUS響應(yīng)。值得注意的是,客戶機(jī)在發(fā)送一個MODBUS請求后,無需等待服務(wù)器端的響應(yīng)便可以繼續(xù)發(fā)送下一個MODBUS請求。

    圖7 MODBUS TCP通信系統(tǒng)信息交換示意圖

    2.2 MODBUS服務(wù)器端建立

    MODBUS服務(wù)器端的主要處理流程如圖8所示。

    程序在初始化完成后即進(jìn)入等待,在接收到來自客戶機(jī)的請求PDU后,對該P(yáng)DU進(jìn)行檢驗,根據(jù)檢驗情況決定生成MODBUS應(yīng)答或是MODBUS異常,并將該應(yīng)答或者異常作為響應(yīng)發(fā)送給客戶機(jī),其詳細(xì)設(shè)計分述如下:

    圖8 MODBUS服務(wù)器端信息處理流程圖

    1)初始化

    與其他基于TCP/IP協(xié)議的設(shè)備類似,作為服務(wù)器端程序,MODBUS服務(wù)器端首先需要進(jìn)行初始化,其核心內(nèi)容是設(shè)置并綁定自身IP。建立服務(wù)器函數(shù)CreateServer()的核心代碼如下:

    接下來需要將服務(wù)器置于偵聽狀態(tài)。MODBUS服務(wù)器端應(yīng)支持多個并發(fā)的客戶機(jī)同時連接。在設(shè)計時,采用多線程策略可以實(shí)現(xiàn)該項功能,即每當(dāng)偵聽到新的連接請求時,便建立一個新的線程來進(jìn)行操作。偵聽函數(shù)TcpListen()的核心代碼如下:

    2)生成MODBUS應(yīng)答/異常

    對于并發(fā)的連接,在接收到來自客戶機(jī)的請求時,服務(wù)器端將在對應(yīng)的線程內(nèi)對請求進(jìn)行處理。根據(jù)MODBUS協(xié)議的MBAP報文頭判斷請求類別,再按照約定的協(xié)議內(nèi)容向客戶機(jī)返回數(shù)據(jù)。響應(yīng)函數(shù)ClientService()的核心代碼如下:

    2.3 MODBUS客戶端建立

    MODBUS客戶端的主要處理流程如圖9所示。

    圖9 MODBUS客戶端信息處理流程圖

    程序在初始化完成后即進(jìn)入等待,根據(jù)需求發(fā)送請求PDU,同時監(jiān)測是否收到響應(yīng)PDU,根據(jù)檢驗情況決定生成MODBUS肯定證實(shí)或是MODBUS否定證實(shí),并將該證實(shí)發(fā)送給用戶應(yīng)用,其詳細(xì)設(shè)計分述如下:

    1)初始化

    MODBUS客戶端初始化的主要內(nèi)容是建立客戶機(jī)與服務(wù)器端的連接。使用Socket類中的Connect函數(shù)可以完成這一目標(biāo)。連接函數(shù)TcpConnect()的核心代碼如下:

    2)發(fā)送MODBUS請求

    可采用多種策略發(fā)送MODBUS請求,最為常用的是使用timer定時器作為觸發(fā),定時發(fā)送。發(fā)送函數(shù)timersend_Tick()的核心代碼如下:

    3)處理數(shù)據(jù)并生成肯定/否定證實(shí)

    與服務(wù)器端的處理方式類似,接收函數(shù)根據(jù)MODBUS協(xié)議的MBAP報文頭判斷數(shù)據(jù)類別,再按照約定的協(xié)議內(nèi)容解析數(shù)據(jù)。接收函數(shù)ReceiveMsg()的核心代碼如下:

    3 通信測試

    3.1 MODBUS服務(wù)器端測試

    根據(jù)第二章的內(nèi)容,采用C#編寫MODBUS服務(wù)器端測試程序,使用0x03功能碼進(jìn)行測試,起始地址為40101,大端模式。其主界面如圖10所示。

    測試時使用TCP/UDP調(diào)試工具模擬MODBUS客戶端。運(yùn)行MODBUS服務(wù)器端測試程序,單擊程序中的“開啟服務(wù)器”按鈕,并在TCP/UDP調(diào)試工具中設(shè)置本機(jī)IP為192.168.163.1,端口為9000,連接類型為TCP,單擊“連接”按鈕。此時調(diào)試工具已與本機(jī)連接。按照MODBUS協(xié)議,其MODBUS請求格式及數(shù)值如表2所示。

    圖10 MODBUS服務(wù)器端測試程序

    單擊TCP/UDP調(diào)試工具中“發(fā)送”按鈕,可在接收欄中看到數(shù)據(jù)序列如圖11所示。

    將該數(shù)據(jù)序列進(jìn)行解析,如表3所示。

    可見調(diào)試工具接收到的報文信息完整、正確,通信正常。

    表2 MODBUS請求格式及數(shù)值

    3.2 MODBUS客戶端測試

    根據(jù)第二章的內(nèi)容,采用C#編寫MODBUS客戶端測試程序,使用0x03功能碼進(jìn)行測試,起始地址為40101,大端模式,采用定時器觸發(fā)方式向服務(wù)器發(fā)送MODBUS請求。使用Modbus Slave調(diào)試工具模擬MODBUS服務(wù)器端,設(shè)置如圖12所示。

    圖11 TCP/UDP調(diào)試工具結(jié)果

    表3 調(diào)試結(jié)果解析

    圖12 Modbus Slave調(diào)試工具設(shè)置

    運(yùn)行MODBUS客戶端測試程序,單擊“連接服務(wù)器”按鈕,得到的結(jié)果如圖13所示。

    圖13 MODBUS客戶端測試程序結(jié)果

    對比圖12和圖13可以看出,客戶端收到服務(wù)器端數(shù)據(jù),且數(shù)據(jù)完整、正確,通信正常。

    4 小結(jié)

    本文結(jié)合MODBUS TCP通信系統(tǒng)與船用以太網(wǎng)通信系統(tǒng)的結(jié)構(gòu)特征,設(shè)計了基于MODBUS TCP協(xié)議的船用以太網(wǎng)通信系統(tǒng),采用C#開發(fā)環(huán)境對通信系統(tǒng)的服務(wù)器端和客戶端進(jìn)行了編程設(shè)計并進(jìn)行了通信測試。測試結(jié)果表明,該編程設(shè)計正確,能夠有效進(jìn)行數(shù)據(jù)交互。

    參考文獻(xiàn):

    [1] 張小川.Modbus設(shè)備嵌入式網(wǎng)頁控制方法的研究與實(shí)現(xiàn)[J].科技風(fēng),2014,(20):26-27.

    [2] 黃波.虛擬儀器技術(shù)在電力諧波分析系統(tǒng)中的應(yīng)用[D].華中科技大學(xué),2014.

    [3] 史妍.基于Modbus的人防工程能源監(jiān)控系統(tǒng)研究[D].哈爾濱工業(yè)大學(xué),2012.

    [4] 張芳.網(wǎng)絡(luò)控制系統(tǒng)時延分析、控制器設(shè)計及仿真研究[D].北京交通大學(xué),2007.

    [5] 郝曉弘,祖守圓,徐維濤.基于VC的Modbus/TCP協(xié)議模型通信測試軟件的實(shí)現(xiàn)[J].微計算機(jī)信息,2006,(07):64-67.

    猜你喜歡
    客戶機(jī)船用服務(wù)器端
    Reducing the global cancer burden with gastrointestinal screening: China’s 30 years practice
    船用PVC夾芯板在近場水下爆炸作用下的吸能特性
    山鋼拿下船用9Ni鋼訂單
    山東冶金(2022年1期)2022-04-19 13:40:40
    船用柴油機(jī)應(yīng)用前景展望
    淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
    成功(2018年10期)2018-03-26 02:56:14
    我國第一臺2205千瓦船用低速柴油機(jī)
    蘭臺世界(2017年9期)2017-06-01 12:20:02
    在Windows中安裝OpenVPN
    網(wǎng)頁防篡改中分布式文件同步復(fù)制系統(tǒng)
    瘦客戶機(jī):安全與便捷的選擇
    基于Web數(shù)據(jù)提高訪問速度的方法
    龙川县| 瑞昌市| 汪清县| 海门市| 繁昌县| 贵定县| 雅安市| 阿瓦提县| 黄山市| 泗洪县| 两当县| 宜章县| 伊川县| 苍南县| 长葛市| 类乌齐县| 新巴尔虎右旗| 邳州市| 建平县| 辰溪县| 平乡县| 上饶县| 叙永县| 涪陵区| 南乐县| 盐池县| 镇安县| 崇信县| 赤水市| 灵川县| 临西县| 建瓯市| 和林格尔县| 磴口县| 本溪| 鹤山市| 高碑店市| 乌兰县| 神农架林区| 曲麻莱县| 高陵县|