999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用動態鏈接庫實現Modbus應答

2009-10-26 09:35:10唐崇華
新媒體研究 2009年13期
關鍵詞:功能設備

唐崇華

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

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

[關鍵詞]ModbusTCP/IP工業控制

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

一、MODBUS協議描述

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

圖1ModBus協議格式

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

啟動MODBUS事務處理的客戶機創建MODBUS應用數據單元。功能碼向服務器指示將執行哪種操作。

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

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

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

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

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

MODBUS響應:服務器發送的響應信息。

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

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

MBAP報文頭包括下列域:

報文頭為7個字節長:

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

協議標識符:用于系統內的多路復用。通過值0識別MODBUS協議。

長度:長度域是下一個域的字節數,包括單元標識符和數據域。

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

二、MODBUS功能碼舉例

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

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

請求

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

錯誤

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

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

三、用動態鏈接庫封裝MODBUS應答服務

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

1.Modbus協議解析函數

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

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

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

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

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

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

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;//數據字節數

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

for (i=0;i

{//訪問設備,得到數據項并賦值。

… …

}

}

break;

… …

}

return6+ mRrequest [5];

2.通信模型的選擇

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

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

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

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

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

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

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

四、MODBUS異常響應

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

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

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

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

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

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

參考文獻:

[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 網絡開發-基于Visual C++實現》,人民郵電出版社.

猜你喜歡
功能設備
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
諧響應分析在設備減振中的應用
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
關于非首都功能疏解的幾點思考
懷孕了,凝血功能怎么變?
媽媽寶寶(2017年2期)2017-02-21 01:21:24
“簡直”和“幾乎”的表達功能
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
如何在設備采購中節省成本
原來他們都是可穿戴設備
消費者報道(2014年7期)2014-07-31 11:23:57
主站蜘蛛池模板: 91精品啪在线观看国产| 欧美精品1区| 久久久久88色偷偷| 国产成人8x视频一区二区| 国产毛片高清一级国语 | 91热爆在线| 永久免费av网站可以直接看的| 在线观看国产小视频| 亚洲 欧美 偷自乱 图片| 中文字幕色站| 成年A级毛片| 黄色a一级视频| 老司国产精品视频91| 久久夜色精品| 国产日韩精品欧美一区喷| 国产精品嫩草影院av| 欧美午夜理伦三级在线观看| 青青网在线国产| 国产成人精品视频一区二区电影| 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产精品尤物在线| 日韩精品一区二区三区大桥未久 | 无码乱人伦一区二区亚洲一| 91精品人妻互换| 日本妇乱子伦视频| 国产在线拍偷自揄观看视频网站| 国产人碰人摸人爱免费视频| 亚洲天堂视频在线观看| 国产成人做受免费视频| 国产一在线| 播五月综合| 亚洲视频免| 国产在线观看一区精品| 婷婷亚洲视频| 色综合热无码热国产| 一本一道波多野结衣一区二区| AV在线天堂进入| 丁香六月综合网| 波多野结衣中文字幕一区二区| 国产一级无码不卡视频| 永久免费精品视频| 色偷偷一区二区三区| 中文字幕久久精品波多野结| 欧美午夜理伦三级在线观看| 粉嫩国产白浆在线观看| 亚洲va欧美ⅴa国产va影院| 无码aaa视频| 日韩高清一区 | 午夜毛片福利| 亚洲一区黄色| 无码又爽又刺激的高潮视频| 欧美亚洲国产精品久久蜜芽| 国产熟睡乱子伦视频网站| 国产一区二区三区在线观看免费| 专干老肥熟女视频网站| 亚洲高清免费在线观看| 亚洲国产精品久久久久秋霞影院| 国产系列在线| 精品色综合| 国产精品一区二区不卡的视频| 国内精品九九久久久精品| 国产成人8x视频一区二区| 久久男人资源站| 高清无码一本到东京热| 91小视频在线| 69视频国产| 亚洲综合欧美在线一区在线播放| 欧美性色综合网| 国产微拍一区| 国产欧美视频综合二区| 九九久久精品免费观看| 欧美视频二区| 99九九成人免费视频精品| 国产精品欧美亚洲韩国日本不卡| 黄色免费在线网址| 黄片在线永久| 国产欧美日韩va| 毛片网站观看| 久久久久亚洲精品无码网站| 五月婷婷丁香综合| 久精品色妇丰满人妻| 国产欧美亚洲精品第3页在线|