MODBUS通訊協(xié)議及編程(RTU)_百度文庫(kù)_第1頁(yè)
MODBUS通訊協(xié)議及編程(RTU)_百度文庫(kù)_第2頁(yè)
MODBUS通訊協(xié)議及編程(RTU)_百度文庫(kù)_第3頁(yè)
MODBUS通訊協(xié)議及編程(RTU)_百度文庫(kù)_第4頁(yè)
MODBUS通訊協(xié)議及編程(RTU)_百度文庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MODBUS通訊協(xié)議及編程ModBus通訊協(xié)議分為RTU協(xié)議和ASCII協(xié)議,我公司的多種儀表都采用ModBus RTU通訊協(xié)議,如:CH2000智能電力監(jiān)測(cè)儀、CH2000M電力參數(shù)采集模塊、巡檢表、數(shù)顯表、光柱數(shù)顯表等。下面就ModBus RTU協(xié)議簡(jiǎn)要介紹如下:一、通訊協(xié)議(一)、通訊傳送方式: 通訊傳送分為獨(dú)立的信息頭,和發(fā)送的編碼數(shù)據(jù)。以下的通訊傳送方式定義也與MODBUS RTU通訊規(guī)約相兼容: 編 碼8位二進(jìn)制起始位1位數(shù)據(jù)位8位奇偶校驗(yàn)位1位(偶校驗(yàn)位)停止位1位錯(cuò)誤校檢CRC(冗余循環(huán)碼)初始結(jié)構(gòu) = 4字節(jié)的時(shí)間 地址碼 = 1 字節(jié)功能碼 = 1 字節(jié)數(shù)據(jù)區(qū) = N 字節(jié)

2、錯(cuò)誤校檢 = 16位CRC碼 結(jié)束結(jié)構(gòu) = 4字節(jié)的時(shí)間地址碼:地址碼為通訊傳送的第一個(gè)字節(jié)。這個(gè)字節(jié)表明由用戶(hù)設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來(lái)的信息。并且每個(gè)從機(jī)都有具有唯一的地址碼,并且響應(yīng)回送均以各自的地址碼開(kāi)始。主機(jī)發(fā)送的地址碼表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。功能碼:通訊傳送的第二個(gè)字節(jié)。ModBus通訊規(guī)約定義功能號(hào)為1到127。本儀表只利用其中的一部分功能碼。作為主機(jī)請(qǐng)求發(fā)送,通過(guò)功能碼告訴從機(jī)執(zhí)行什么動(dòng)作。作為從機(jī)響應(yīng),從機(jī)發(fā)送的功能碼與從主機(jī)發(fā)送來(lái)的功能碼一樣,并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。如果從機(jī)發(fā)送的功能碼的最高位為(比如功能碼大與此同時(shí)12

3、7,則表明從機(jī)沒(méi)有響應(yīng)操作或發(fā)送出錯(cuò)。數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)是根據(jù)不同的功能碼而不同。數(shù)據(jù)區(qū)可以是實(shí)際數(shù)值、設(shè)置點(diǎn)、主機(jī)發(fā)送給從機(jī)或從機(jī)發(fā)送給主機(jī)的地址。 CRC碼:二字節(jié)的錯(cuò)誤檢測(cè)碼。(二)、通訊規(guī)約: 當(dāng)通訊命令發(fā)送至儀器時(shí),符合相應(yīng)地址碼的設(shè)備接通訊命令,并除去地址碼,讀取信息,如果沒(méi)有出錯(cuò),則執(zhí)行相應(yīng)的任務(wù);然后把執(zhí)行結(jié)果返送給發(fā)送者。返送的信息中包括地址碼、執(zhí)行動(dòng)作的功能碼、執(zhí)行動(dòng)作后結(jié)果的數(shù)據(jù)以及錯(cuò)誤校驗(yàn)碼。如果出錯(cuò)就不發(fā)送任何信息。1信息幀結(jié)構(gòu)地址碼功能碼數(shù)據(jù)區(qū)錯(cuò)誤校驗(yàn)碼8位8位N × 8位16位地址碼:地址碼是信息幀的第一字節(jié)(8位,從0到255。這個(gè)字節(jié)表明由用戶(hù)設(shè)置地址的

4、從機(jī)將接收由主機(jī)發(fā)送來(lái)的信息。每個(gè)從機(jī)都必須有唯一的地址碼,并且只有符合地址碼的從機(jī)才能響應(yīng)回送。當(dāng)從機(jī)回送信息時(shí),相當(dāng)?shù)牡刂反a表明該信息來(lái)自于何處。 功能碼:主機(jī)發(fā)送的功能碼告訴從機(jī)執(zhí)行什么任務(wù)。表1-1列出的功能碼都有具體的含義及操作。 代碼含義 操作03讀取數(shù)據(jù)讀取當(dāng)前寄存器內(nèi)一個(gè)或多個(gè)二進(jìn)制值06重置單一寄存器把設(shè)置的二進(jìn)制值寫(xiě)入單一寄存器數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)包含需要從機(jī)執(zhí)行什么動(dòng)作或由從機(jī)采集的返送信息。這些信息可以是數(shù)值、參考地址等等。例如,功能碼告訴從機(jī)讀取寄存器的值,則數(shù)據(jù)區(qū)必需包含要讀取寄存器的起始地址及讀取長(zhǎng)度。對(duì)于不同的從機(jī),地址和數(shù)據(jù)信息都不相同。錯(cuò)誤校驗(yàn)碼冗余循環(huán)碼(CRC

5、)包含2個(gè)字節(jié),即因此必須對(duì)數(shù)據(jù)的備份工作一定做好,以防以外的發(fā)生。對(duì)于不同的系統(tǒng)數(shù)據(jù)的備份和恢復(fù)的方法會(huì)有一些不同,但是都是將系統(tǒng)數(shù)據(jù)通過(guò)某種方式存儲(chǔ)到系統(tǒng)以外的介質(zhì)里。CRC碼由發(fā)送設(shè)備計(jì)算,放置于發(fā)送信息的尾部。接收信息的設(shè)備再重新計(jì)算接收到信息的 CRC碼,比較計(jì)算得到的CRC(請(qǐng)參閱:某數(shù)控機(jī)床CRC碼的計(jì)算方法是,先預(yù)置系統(tǒng)參數(shù)備份)1。再逐步把每8位數(shù)據(jù)信息進(jìn)行處理。在進(jìn)行CRC碼計(jì)算時(shí)只用(1CRC碼計(jì)算。 在計(jì)算CRC碼時(shí),)位數(shù)據(jù)與寄存器的數(shù)據(jù)相異或,得到的結(jié)果向低位移一字節(jié),用0填補(bǔ)最高位。再檢查最低位,如果最低位為1(3,不進(jìn)行異或運(yùn)算。MMC 數(shù)據(jù); 其中MMC100

6、.28次。第8次移位后,下一個(gè)8位再與現(xiàn)在寄存器的內(nèi)容相相異或,這個(gè)過(guò)程與以上一樣重復(fù)(CRC碼值。pcin) 計(jì)算CRC碼的步驟為: 預(yù)置16位寄存器為十六進(jìn)制2、系列備份(1)、傳輸參數(shù)的設(shè)定(西門(mén)子系統(tǒng)V24寄存器;PC 把第一個(gè)位數(shù)據(jù)與16參數(shù)設(shè)定如表3CRC寄存器;所示 表把寄存器的內(nèi)容右移一位(朝低位,用0填補(bǔ)最高位,檢查最低位; 如果最低位為0:重復(fù)第3步(碼。數(shù)據(jù)區(qū)中的寄存器數(shù)據(jù)都是每?jī)蓚€(gè)字節(jié)高字節(jié)在前。 按下(Switch-over鍵)MessageBox("createfile error,error"BOOL error=SetupComm(hCom,

7、1024,1024;(2MessageBox("setupcomm error"error=GetCommState(hCom,&dcb;if(!errorMessageBox("getcommstate,error"dcb.BaudRate=2400;dcb.ByteSize=8;dcb.Parity=EVENPARITY;/NOPARITY;dcb.StopBits=ONESTOPBIT;的接口X6;b校驗(yàn)碼計(jì)算UINT crcvoid calccrc(BYTE crcbufBYTE i;crc=crc crcbuf;for(i=0;i<

8、;8;i+BYTE TT;TT=crc&1;crc=crc>>1;crc=crc&0x7fff;if (TT=1crc=crc0xa001;crc=crc&0xffff;(三)、數(shù)據(jù)發(fā)送zxaddr=11;/讀取地址為11的巡檢表數(shù)據(jù)zxnum=10;/讀取十個(gè)通道的數(shù)據(jù)writebuf20=zxaddr;writebuf21=3;writebuf22=0;writebuf23=0;writebuf24=0;writebuf25=zxnum;crc=0xffff;calccrc(writebuf20;calccrc(writebuf21;calccrc(wr

9、itebuf22;calccrc(writebuf23;calccrc(writebuf24;按下“input”writebuf27=crc/0x100;WriteFile(hCom,writebuf2,8,&comnum,NULL;(四)、數(shù)據(jù)讀取ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL;/讀取zxnum個(gè)通道數(shù)據(jù)可增加錯(cuò)誤處理程序,如地址碼錯(cuò)誤、CRC碼錯(cuò)誤判斷、通訊故障處理等。; 如果最低位為1:CRC寄存器與多項(xiàng)式A001(1010 0000 0000 0001)進(jìn)行異或; 重復(fù)步驟3和4,直到右移8次,這樣整個(gè)8位數(shù)據(jù)全部進(jìn)行了處理; OFF 重復(fù)步驟2到步驟5XON位數(shù)據(jù)的處理; 最后得到的CR LF為段結(jié)束3功能碼03,讀取點(diǎn)和返回值:儀表采用DRS信號(hào)(“保持寄存器前后引導(dǎo)或返回值磁帶格式” 的操作。保持和輸入寄存器都是16位(2字節(jié))值,并且高位在前。這樣用于儀表的讀取點(diǎn)和返回值都是2字節(jié)。一次最多可讀取寄存器數(shù)是60。由于一些可編程控制器不用功能碼03,所以功能碼039600406,單點(diǎn)保存主機(jī)利用這條命令

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論