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

        ?

        用動態(tài)鏈接庫實現(xiàn)Modbus應答

        2009-10-26 09:35:10唐崇華
        新媒體研究 2009年13期
        關鍵詞:客戶機字節(jié)寄存器

        唐崇華

        [摘要]MODBUS協(xié)議是應用于電子控制器上的一種通用協(xié)議。通過此協(xié)議,控制器相互之間、控制器經由網絡(例如以太網)和其它設備之間可以通信。它已經成為一種通用工業(yè)標準。不同廠商生產的控制設備可以連成工業(yè)網絡進行集中監(jiān)控。此協(xié)議定義一個控制器能認識使用的消息結構,而不管它們是經過何種網絡進行通信的。它描述控制器請求訪問其它設備的過程,如何回應來自其它設備的請求,以及怎樣偵測錯誤并記錄。它制定消息域格局和內容的公共格式。

        MODBUS是OSI模型第7層上的應用層報文傳輸協(xié)議,它在連接至不同類型總線或網絡的設備之間提供客戶機/服務器通信。自從1979年出現(xiàn)工業(yè)串行鏈路的事實標準以來,MODBUS使成千上萬的自動化設備能夠通信。目前,繼續(xù)增加對簡單而雅觀的MODBUS結構支持。

        [關鍵詞]ModbusTCP/IP工業(yè)控制

        中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0710066-02

        一、MODBUS協(xié)議描述

        MODBUS是一個請求/應答協(xié)議,并且提供功能碼規(guī)定的服務。目前,以以太網上的TCP/IP使用MODBUS比較常見。

        圖1ModBus協(xié)議格式

        MODBUS協(xié)議定義了一個與基礎通信層無關的簡單協(xié)議數(shù)據(jù)單元(PDU)。特定總線或網絡上的MODBUS協(xié)議映射能夠在應用數(shù)據(jù)單元(ADU)上引入一些附加域。Modbus協(xié)議格式如圖1所示。TCP/IP上的MODBUS的請求/響應協(xié)議格式如圖2所示。

        啟動MODBUS事務處理的客戶機創(chuàng)建MODBUS應用數(shù)據(jù)單元。功能碼向服務器指示將執(zhí)行哪種操作。

        MODBUS報文傳輸服務提供設備之間的客戶機/服務器通信,這些設備聯(lián)接在一個Ethernet(以太網)TCP/IP網絡上。

        這種客戶機/服務器模式是基于4種類型報文:

        MODBUS請求:客戶機在網絡上發(fā)送用來啟動事務處理的報文。

        MODBUS證實:在客戶端接收的響應信息。

        MODBUS指示:服務端接收的請求報文。

        MODBUS響應:服務器發(fā)送的響應信息。

        圖2TCP/IP上的MODBUS的請求/響應協(xié)議格式

        在TCP/IP上使用一種專用報文頭識別MODBUS應用數(shù)據(jù)單元。將這種報文頭稱為MBAP報文頭(MODBUS協(xié)議報文頭)。

        MBAP報文頭包括下列域:

        報文頭為7個字節(jié)長:

        事務處理標識符:用于事務處理配對。在響應中,MODBUS服務器復制請求的事務處理標識符。

        協(xié)議標識符:用于系統(tǒng)內的多路復用。通過值0識別MODBUS協(xié)議。

        長度:長度域是下一個域的字節(jié)數(shù),包括單元標識符和數(shù)據(jù)域。

        單元標識符:為了系統(tǒng)內路由使用這個域。專門用于通過以太網TCP-IP網絡和MODBUS串行鏈路之間的網關對MODBUS或MODBUS+串行鏈路從站的通信。MODBUS客戶機在請求中設置這個域,在響應中服務器必須利用相同的值返回這個域。

        二、MODBUS功能碼舉例

        以讀保持寄存器(功能碼3)為例。

        在一個遠程設備中,使用該功能碼讀取保持寄存器連續(xù)塊的內容。請求PDU說明了起始寄存器地址和寄存器數(shù)量。從零開始尋址寄存器。將響應報文中的寄存器數(shù)據(jù)分成每個寄存器有兩字節(jié),在每個字節(jié)中直接地調整二進制內容。對于每個寄存器,第一個字節(jié)包括高位比特,并且第二個字節(jié)包括低位比特。

        請求

        響應(*N=寄存器的數(shù)量)

        錯誤

        這是一個請求讀寄存器108-110的實例:

        將寄存器108的內容表示為兩個十六進制字節(jié)值02 2B,或十進制555。將寄存器109-110的內容分別表示為十六進制00 00和00 64,或十進制0和100。

        三、用動態(tài)鏈接庫封裝MODBUS應答服務

        采用動態(tài)鏈接庫(Dynamic-Linbk Library)實現(xiàn)對MODBUS應答服務的封裝。應客戶要求此動態(tài)鏈接庫主要的功能為響應客戶MODBUS請求并按請求將從設備采集到的數(shù)據(jù)以MODBUS協(xié)議格式發(fā)送給客戶。數(shù)據(jù)為32位浮點數(shù),采用IEEE754格式編碼。為便于用VB等開發(fā)工具開發(fā)的客戶端調用,采用標準的動態(tài)鏈接庫格式,即函數(shù)用__stdcall定義。

        1.Modbus協(xié)議解析函數(shù)

        函數(shù)processMsg(unsigned char mdreq):負責解析modbus請求。主要代碼:

        switch(mRrequest[7])//按照modbus協(xié)議該位置為功能號

        { case 3://請求保持寄存器

        {unsigned regNo = getWord(mRrequest, 8);//起始寄存器地址

        Unsigned regCount = getWord(mRrequest, 10);// 寄存器數(shù)量

        if (len != 12) { //標準Modbus請求為12個字節(jié),否則非法請求,填寫錯誤響應

        mRrequest [7] |= 0x83;//錯誤碼

        mRrequest [8] = 3;// 異常碼

        mRrequest [5] = 3; // length

        break;

        }

        if (regCount < 1 || regCount > 125 || regNo >= num4xRegs || (regCount + regNo) > num4xRegs) {// 請求寄存器范圍不合法,填寫錯誤響應

        mRrequest [7] |= 0x83;// //錯誤碼

        mRrequest [8] = 2; // 異常碼

        mRrequest [5] = 3; // length

        break;

        }

        // 正確的請求,填寫響應

        mRrequest [8] = 2 * regCount;//數(shù)據(jù)字節(jié)數(shù)

        mRrequest [5] = mRrequest [8] + 3;//響應信息長度

        for (i=0;i

        {//訪問設備,得到數(shù)據(jù)項并賦值。

        … …

        }

        }

        break;

        … …

        }

        return6+ mRrequest [5];

        2.通信模型的選擇

        由于采用動態(tài)鏈接庫的方式實現(xiàn)對Modbus通信幀的監(jiān)聽和解析,為了避免窗體的使用,所以采用SELECT模型負責網絡通信工作。SELECT模式是Winsock中最常見的I/O模型。之所以稱其為“select模式”,是由于它的中心思想是利用SELECT函數(shù),實現(xiàn)對I/O的管理。利用SELECT函數(shù),可以判斷套接字上是否存在數(shù)據(jù),或者能否向一個套接字寫入數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)的收發(fā)工作。采用SELECT主要用到函數(shù)ioctlsocket、select和FD_ZERO、FD_SET、FD_ISSET和FD_CLR宏。

        在應用開發(fā)時,通過以下步驟,完成對套接字的可讀可寫判斷。

        (1)使用FD_ZERO宏,初始化感興趣的套接字集合fd_set,可以為可讀套接字集合和可寫套接字集合。例如FD_ZERO(ReadFD)。

        (2)使用FD_SET宏將套接字分配給參與操作的fd_set集合。例如FD_SET(s,ReadFD)。

        (3)以fd_set為參數(shù)調用select函數(shù)。等待在指定的fd_set集合中I/O活動設置好套接字。select函數(shù)完成后會返回在所有fd_set集合中設置的套接字句柄總數(shù),并對每個集合進行相應的更新。

        (4)select函數(shù)成功返回后,使用FD_ISSET宏,對每個fd_set集合進行檢查。例如,FD_ISSET(s,ReadFD)。如果該宏的值為TRUE,則說明該套接字可讀。

        (5)調用相應的Windows Sockets API進行數(shù)據(jù)的接受和發(fā)送。

        四、MODBUS異常響應

        異常響應報文有兩個與正常響應不同的域:

        功能碼域:在正常響應中,服務器利用響應功能碼域來應答最初請求的功能碼。所有功能碼的最高有效位(MSB)都為0(它們的值都低于十六進制80)。在異常響應中,服務器設置功能碼的MSB為1。這使得異常響應中的功能碼值比正常響應中的功能碼值高十六進制80。通過設置功能碼的MSB,客戶機的應用程序能夠識別異常響應,并且能夠檢測異常碼的數(shù)據(jù)域。

        數(shù)據(jù)域:在正常響應中,服務器可以返回數(shù)據(jù)域中數(shù)據(jù)或統(tǒng)計表(請求中要求的任何報文)。在異常響應中,服務器返回數(shù)據(jù)域中的異常碼。

        客戶機請求和服務器異常響應的實例:

        在這個實例中,客戶機對服務器設備尋址請求。功能碼(01)用于讀輸出狀態(tài)操作。它將請求地址1245(十六進制04A1)的輸出狀態(tài)。

        如果在服務器設備中不存在輸出地址,那么服務器將返回異常碼(02)的異常響應。這就說明從站的非法數(shù)據(jù)地址。

        參考文獻:

        [1]《MODBUS Protocol Reference Guide》,http://www.Modbus-IDA.org.

        [2]《MODBUS MESSAGEING ON TCP/IP IMPLEMENTATION GUIDE V1.0a》,

        Http://www.Modbus-IDA.org.

        [3]《MODBUS Application Protocol Specification》,http://www.Modbus-IDA.org.

        [4]孫海民,《Windows Sockets 網絡開發(fā)-基于Visual C++實現(xiàn)》,人民郵電出版社.

        猜你喜歡
        客戶機字節(jié)寄存器
        Reducing the global cancer burden with gastrointestinal screening: China’s 30 years practice
        No.8 字節(jié)跳動將推出獨立出口電商APP
        Lite寄存器模型的設計與實現(xiàn)
        計算機應用(2020年5期)2020-06-07 07:06:44
        No.10 “字節(jié)跳動手機”要來了?
        簡談MC7字節(jié)碼
        分簇結構向量寄存器分配策略研究*
        高速數(shù)模轉換器AD9779/AD9788的應用
        瘦客戶機:安全與便捷的選擇
        一種可重構線性反饋移位寄存器設計
        通信技術(2010年8期)2010-08-06 09:29:16
        人類進入“澤它時代”
        久久精品久99精品免费| 久久久久久一级毛片免费无遮挡| 校花高潮一区日韩| 特级国产一区二区三区| 国产精品无码dvd在线观看| 国产无遮挡裸体免费视频| 亚洲VA中文字幕欧美VA丝袜| 亚洲最大的av在线观看| 一区二区三区四区国产99| 亚洲av麻豆aⅴ无码电影| 91免费在线| 中文字幕一区二区三区喷水| 手机看片久久第一人妻| 亚洲色欲色欲www| 亚洲阿v天堂网2021| 五十路一区二区中文字幕| 久久99精品久久久久久清纯| 永久免费av无码网站yy| 国产91一区二这在线播放| 一个人午夜观看在线中文字幕| 久久久久亚洲av综合波多野结衣| 国产suv精品一区二区| 91精品欧美综合在线观看 | 日韩精品中文字幕一区二区| 国内精品伊人久久久久网站| 国产一区日韩二区欧美三区| 538在线视频| 一二三区亚洲av偷拍| 性高湖久久久久久久久| 国产精品青草视频免费播放| 中文字幕亚洲精品综合| 亚洲精品国偷拍自产在线| 初尝黑人巨砲波多野结衣| 国产裸体AV久无码无遮挡| 少妇爽到高潮免费视频| 丰满少妇a级毛片野外| 精品一精品国产一级毛片| 99亚洲女人私处高清视频| 中国美女a级毛片| 国产人妖视频一区二区| 精品人妻久久av中文字幕|