Modbus-RTU協(xié)議簡單說明_第1頁
Modbus-RTU協(xié)議簡單說明_第2頁
Modbus-RTU協(xié)議簡單說明_第3頁
Modbus-RTU協(xié)議簡單說明_第4頁
Modbus-RTU協(xié)議簡單說明_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余8頁可下載查看

下載本文檔

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

文檔簡介

1、經(jīng)典文胸的但誦以曲說R編程ModOui通訊協(xié)議分為RTI:的議和XSC口協(xié)議.我司的多種儀表部采用ModRuB KTI 遛調(diào)那談,如】TD2W口 HBR電力篙假,逛粉表.敖晶表,尤軒敢顯表帶,卜面箍UodBu s RTU協(xié)議茴要介紐如下:一、通ill怫說(-)、迎訊傳送方式:前訊為子介力如。的吃口頭.和發(fā)送的端叫幫樹 以下的訕加彳專送/嵬七幅陽 DBI S m通雙炊約柏及演筑舊 H位二遇制錯(cuò)誤檢輸 CK【兀余肺壞碼】初妗精構(gòu)-三宇宙臚段子問 埴址碼-字節(jié)M屈碼二I字節(jié)費(fèi)提H N字節(jié)招戌校戶=lb忖C氏的結(jié)束玷構(gòu)=今4字節(jié)的時(shí)間地址碼!地址科為通訊科送的第一今字節(jié).這個(gè)7節(jié)表明由用戶近定地址田府

2、從機(jī)將花也山J機(jī)發(fā)送土M1H息.并且晦十從機(jī)郵仃具有唯一的地址跖并且科威回送用以各自 印。5日H將主機(jī)集坐的地址翻亮胴送龕地刊的從機(jī)地址.而北機(jī)發(fā)送的地址碼亮明叵I 送的隊(duì)機(jī)地址.項(xiàng)能碼:通訊傳送的第二A字節(jié).M誦配界泌訊說妁出E功能勺為】J-J 127京儀表工 利用亂中的一部分功能叫.作為主HL請(qǐng)求發(fā)送、皿以由鹿口告訴從機(jī)執(zhí)仃fl么助件 作為 從機(jī)響應(yīng),從機(jī)發(fā)送的前能碼占從主機(jī)發(fā)送來的功能眄一樣.并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行 操作.如果從機(jī)里出的功能碼畫最島值為1 f比如功比的大打匕大上12T).則表明隊(duì)機(jī)沒 宥響應(yīng)操偉成發(fā)送出的.*K1截輾區(qū)品限據(jù)不同的功睦碼而不同.數(shù)據(jù)區(qū)可以是實(shí)際數(shù)值.諛置

3、點(diǎn).主機(jī) 次建笳隊(duì)兒或靈機(jī)發(fā)送殆十機(jī)囹地ULCRC硒:二字節(jié)的情。檢割碼.(二、通訊耗的當(dāng)通鈿帝金發(fā)送至儀窿時(shí).符合相應(yīng)地址碼的發(fā)名接通機(jī)命令.并除去地址碼.讀 以信息.如果祖有出錯(cuò),剜執(zhí)行相度的任翳;整打把械打結(jié)果返注給發(fā)送春,返送我佶忘中包括地址嗎、執(zhí)仃功仰的功造俏執(zhí)打動(dòng)他后結(jié)果的數(shù)據(jù)以后錯(cuò)誤的驗(yàn)據(jù) 如果5錯(cuò)就 不發(fā)送任何信息.L科01幅結(jié)構(gòu)地垃冏功能何數(shù)據(jù)區(qū)博諾校喊曬8位位K M業(yè)也K位地址碼:地內(nèi)碼是;.口帕的第一信囹,從口到電這個(gè)字節(jié)賽站由用戶傻置下載可編輯復(fù)制經(jīng)典文他卻的從機(jī)將楂收田木機(jī)笈塞米的值屈,母個(gè)從用都必於右一唯一的地碼.并n只門符含 地址因怕狀肛,能響曲回送。當(dāng)從機(jī)回搜值

4、息附相當(dāng)峋地址碼表明該信息來自于何處;功能碼;主機(jī)發(fā)送的功質(zhì)碼告訴我機(jī)執(zhí)行什總?cè)蝿?wù)口妻it列出的功能碼都有具體 的含義強(qiáng)操怦;代研含義操作03讀取數(shù)都讀取當(dāng)一揖。搟內(nèi)一個(gè)里多個(gè)一班制電08崔單一寄存冊(cè)設(shè)置的二處制11寫入單一寄存塔數(shù)據(jù)區(qū):數(shù)據(jù)區(qū)包含淅零雙機(jī)執(zhí)tH么動(dòng)作或由從機(jī)及乩的思醫(yī)看思二一咒金息可以 是融值、善等地址等等 泣e .功處嗎告訴從it遺取寄存簿峋tn,煙數(shù)據(jù)區(qū)必需包含要讀 取奇有霜的起蚱地址員康堰牧度.冏1不同的從機(jī).地址和幫掘信息都不相同,特課校驗(yàn)碼:主機(jī)或從機(jī)可用校監(jiān)仍述行列別根收仃息是西山惜.司,由電子 聲或其它一當(dāng)千就.信息在傳輸過程中會(huì)發(fā)牛二期做的變化.惜誤校駱碼戈訐

5、ri,或從機(jī) 利在肉送過口小山川的七總不起ftJIL這樣增加了系統(tǒng)的安全利效率,措識(shí)校甄錄用CRC T6校監(jiān)方法.在信息頓的格式那地不刑何;地址仍.功能叫、數(shù)弱區(qū)利希誤校獨(dú)帽.九獵陜校驗(yàn)瓦爾端H;碼(匚咫,包含2午干節(jié),即16位二就制.匚即用市發(fā)送設(shè)蒂計(jì)W,酒酉于 貸讀信息的手部.掛收情息的設(shè)備再面新計(jì)第接收到侑息峋廠附碼.比虻U得利的叔 司是西與接收到的相格如果兩者不相符,則我明HitlLCM蚪的計(jì)算斤。,足.丸頊方 g位商存罌金為1。即透出也許E付數(shù)騏f總邊什處爬. 在遇仃G既得計(jì)算時(shí)只用8位數(shù)據(jù)懂,起崎位地匕川色加有奇偶校皖胡的話也包括奇耦 校蛤仲,都不寫與CRG碼計(jì)審.itMHC此碼時(shí)

6、.2位數(shù)兆。寄在罌狗敷甥和計(jì)或, M列的封梁向候仁移一字鼠用 U堪祚烈島山,理植自后乜,如聚嶼低位為I*把力存耨的內(nèi)柞與我H數(shù)出界或劃梟 日相歸出冷一革:汕小力:的下載可編輯復(fù)制經(jīng)典文這個(gè)過程一直重復(fù)8次,第8次豚位后.下一十8位再與以在皆存得的內(nèi)容相榴異 直,這個(gè)過程與以上一樣隸員8次,當(dāng)斯存的軟察信息處理完后,最后寄存器的內(nèi)容即為 C耽碼值* GCP1中晌數(shù)據(jù)發(fā)送,接收時(shí)低字節(jié)在前.計(jì)算CRC碼的步驟為:, 購亞1b位奇存稀為八地制FF盯即全為I J二稱比奇存器為LRL寄存器: 把第 個(gè)H位數(shù)據(jù)與16位嗣寄存料的醺僮和異或r杷站果放于時(shí)寄存格; 把寄存豁的內(nèi)容&唐一栓(朝械也).川口填撲最

7、高位a檢查聶桂世, 如果最衽位為5重良第3般f再次辨桿);加里最低位為卜Ct寄存舞與多場式4 001 (1010 0000 OODO (0Q1 ) ill行異氏; 重復(fù)士理3川L我到八岸總次.這打裳4 位數(shù)據(jù)全部辿行了處理, 甫包布轆2tli的驟進(jìn)行下一個(gè)8付數(shù)據(jù)的處理L及IZJ劃的C虬花存黠叩為LHC螞n3 .功能明口3.睡取點(diǎn)和返回假:崗段來川曲曲一酊口通訊規(guī)約.利用通福金令, M吼進(jìn)杼讀取廣丁 “保苗寄存牌) 或返回世(1卷人寄存器”的操作,緊仲用慚入寄存器郡是15慢12字甘J值.并”島 便在前.這樣用于儀表前沒取點(diǎn)和返回值都是2字節(jié).一次品塞可設(shè)睨寄存翳數(shù)髭前.由 下一建可墉程投制器不

8、用功腌碼03.削以功能罔03破田作讀取點(diǎn)和返目值,從機(jī)晌應(yīng)的 命令格式是從機(jī)地址.功能丹.數(shù)據(jù)區(qū)及。咫冏,數(shù)幫區(qū)中的甯存耦數(shù)據(jù)都是用兩個(gè)畢節(jié) 圖字節(jié)在前.4 .而彼碼口6,電告很乖下載可編輯復(fù)制經(jīng)典文1機(jī)利汨這條命令把單點(diǎn)和據(jù)保存打儀表的斤他端從機(jī)也任這個(gè)功非需向主機(jī)送送 信息.二組程舉程卜血皂一個(gè)川V。一寫的MoMuy RF通訊的咧子(-),通訊口設(shè)置NB deb;hCoi.=CrefitFi IeCON *,CeWRIC REAB 聊ERIC TRI1E,0, NULL. OFliN EXISTING, 0,NLLL);i 1 仆 Con -=1WR_HgO/心 E)E-MesF4KBox

9、(*creatf i I e error, eiLrcr*);)BOQ1. ert oi S/tupCunn hCofnH 1021 h 1 D2 I;l M ! 1m tn)MrsriguDjA tupcjKinii ul iui 卜.ri-i$l e liCnr, JldcH);i I(!eri jr)nmnstat. ri r7i ”);di Lj. fUudRei .tL-2 1(H);deb. RrtoSixe SI;rkKPii i iy=EVEPARir V)人RTTV;deb. SlopB Hs=WB5W1IT;n i or _Sc ICjirmSi ni rhror., &

10、-;-h):(二)、CRG酸弱碼il養(yǎng)UTN7 etcraid racrc(BYTE errbuf)IBYTE i;ric=crc cicbul :for i_0;) “新建項(xiàng)目”,打開“新建項(xiàng)目”對(duì)話框:下載可編輯復(fù)制經(jīng)典文請(qǐng)?jiān)凇邦悇e”中選擇“常規(guī)”,再從“項(xiàng)目”中選擇“Java應(yīng)用程序”,然后點(diǎn)擊“下一步”,進(jìn)入“新建 Java應(yīng)用程序”對(duì)話框:口彳?在這個(gè)對(duì)話框中需要設(shè)置項(xiàng)目的名稱以及項(xiàng)目所在目錄,我為自己的項(xiàng)目起名為JUnitTest , “項(xiàng)目位置”為 G:YPJCCKJUnitNetBeans ,此外,請(qǐng)將“創(chuàng)建主類”前的對(duì) 號(hào)去掉。項(xiàng)目創(chuàng)建好后,已經(jīng)自帶了 JUnit 3.8.1

11、。二.編寫用于測試的 JavaBean用于測試的JavaBean很簡單,名為Book,只有id和name兩個(gè)屬性,這兩個(gè)屬性將分別用 于兩個(gè)用例當(dāng)中。下面開始編寫該JavaBean o請(qǐng)點(diǎn)擊“文件”- “新建文件”,打開“新建文件”對(duì)話框:下載可編輯復(fù)制經(jīng)典文確?!绊?xiàng)目”選擇的是 JUnitTest ,然后在“類別”中選中 Java類,在“文件類型”中選中Java類,點(diǎn)擊“下一個(gè),進(jìn)入下一窗口:設(shè)置類名為Book,包為net.zheng.junit.test ,設(shè)置完成后點(diǎn)擊完成,修改代碼如下:package net.zheng.junit.test;public class Book pri

12、vate String id = null; private String name = null;public String getId() return id;public void setId(String id) this.id = id;public String getName() return name;public void setName(String name) = name;下載可編輯復(fù)制經(jīng)典文至此,用于測試的 JavaBean編寫完成。三.編寫測試用例這里只用了一個(gè)類進(jìn)行測試,名為 BookTest,該類繼承自junit.framework.Test

13、Case 類。BookTest類包含兩個(gè)用例,分別對(duì)應(yīng)該類的testId 和testName方法,即每個(gè)方法實(shí)現(xiàn)了一個(gè)測試用例。注意,在 JUnit中,junit.framework.TestCase的子類中每個(gè)用來實(shí)現(xiàn)測試用例的方法都必須以testXXX的格式來命名,這些方法在運(yùn)行時(shí)會(huì)被執(zhí)行。此外,BookTest還包括setUp和tearDown這兩個(gè)方法,前者在每個(gè)測試方法開始之前執(zhí)行,多用來做初始化;后者在每個(gè)測試方法完成之后執(zhí)行,多用來清理資源。下面開始編寫B(tài)ookTest。請(qǐng)點(diǎn)擊“文件”- “新建文件”,打開“新建文件”對(duì)話框:確?!绊?xiàng)目”選擇的是 JUnitTest ,然后在“類

14、別”中選中 JUnit類,在“文件類型”中選 中現(xiàn)有類的測試,點(diǎn)擊“下一個(gè)”,進(jìn)入下一窗口:選擇要測試的類,點(diǎn)擊“完成”,修改代碼如下:下載可編輯復(fù)制經(jīng)典文package net.zheng.junit.test;import junit.framework.TestCase;import junit.framework.Assert;public class BookTest extends TestCase Book book = null;/建議為測試類創(chuàng)建構(gòu)造public BookTest(String name) super(name);protected void setUp()

15、throws Exception /調(diào)用超類的setUp(),以確保測試環(huán)境被初始化super.setUp();System.out.println( 測試開始!);book = new Book();System.out.println(book對(duì)象被初始化!);protected void tearDown() throws Exception System.out.println(book對(duì)象將被清理!);book = null;System.out.println( 測試結(jié)束!);/調(diào)用超類的tearDown(),以確保測試環(huán)境被清理super.tearDown();public vo

16、id testId() book.setId(001);/ 設(shè)置 id 屬性的值為 001/使用Assert查看id屬性的值是否為001Assert.assertEquals(001, book.getId();System.out.println(id屬性被測試!);public void testName() book.setName(ASP); / 設(shè)置 name屬性的值為 ASP/使用Assert查看name屬性的值是否為JSP,這是個(gè)必 然出現(xiàn)錯(cuò)誤的測試Assert.assertEquals(JSP, book.getName();System.out.println(name屬性被

17、測試!);這里setUp和tearDown方法沒什么好說的,就是執(zhí)行了對(duì) book對(duì)象的初始化和清理,不過testId 和testName需要說明一下。前者是在對(duì)book的id屬性進(jìn)行測試,首先賦值為001”, 然后使用Assert的assertEquals 方法查看id屬性中存放的值是否是期待的值,由于我的 期待值也是“ 001”,所以執(zhí)行后這個(gè)用例應(yīng)該是成功的;后者則是對(duì)book的name屬性進(jìn)行測試,也是首先賦值為”ASP,然后使用Assert的assertEquals 方法查看其值是否是下載可編輯復(fù)制經(jīng)典文期待的,由于我特意將期待值設(shè)定為根本不可能的JSP,因此這個(gè)用例執(zhí)行后會(huì)出現(xiàn)一個(gè)

18、錯(cuò)誤。但請(qǐng)注意,由于我是特意要讓測試出現(xiàn)錯(cuò)誤,所以將期待值設(shè)定成了不可能的值, 如果你是測試人員,請(qǐng)千萬不要這么做,否則如果別的地方導(dǎo)致了錯(cuò)誤,很容易給自己造成不必要的麻煩。下面簡單介紹一下上邊用到的靜態(tài)類junit.framework.Assert。該類主要包含 8個(gè)方法:1. assertEquals() 方法,用來查看對(duì)象中存的值是否是期待的值,與字符串比較中使用的 equals()方法類似;2. assertFalse() 和assertTrue() 方法,用來查看變量是是否為false 或true ,如果assertFalse()查看的變量的值是 false則測試成功,如果是 tru

19、e則失敗,assertTrue()與之相反;3. assertSame()和assertNotSame()方法,用來比較兩個(gè)對(duì)象的引用是否相等和不相等, 類似于通過“=和“ != ”比較兩個(gè)對(duì)象;4. assertNull() 和assertNotNull() 方法,用來查看對(duì)象是否為空和不為空;5. fail ()方法,意為失敗,用來拋出錯(cuò)誤。我個(gè)人認(rèn)為有兩個(gè)用途:首先是在測試驅(qū)動(dòng)開發(fā)中,由于測試用例都是在被測試的類之前編寫,而寫成時(shí)又不清楚其正確與否,此時(shí)就可以使用fail方法拋出錯(cuò)誤進(jìn)行模擬;其次是拋出意外的錯(cuò)誤,比如要測試的內(nèi)容是從數(shù)據(jù)庫中讀取的數(shù)據(jù)是否正確,而導(dǎo)致錯(cuò)誤的原因卻是數(shù)據(jù)庫

20、連接失敗。四.運(yùn)行BookTest編寫好BookTest后,就可以運(yùn)行了。請(qǐng)?jiān)凇绊?xiàng)目”欄中選中 BookTest,點(diǎn)擊鼠標(biāo)右鍵,選擇“運(yùn)行文件”,測試信息會(huì)從“輸出”窗口輸出:下載可編輯復(fù)制經(jīng)典文當(dāng)有多個(gè)測試類需要一次性進(jìn)行測試時(shí),可以使用測試套件來完成這項(xiàng)工作。在NetBeans中,點(diǎn)擊“文件”- “新建文件”,打開“新建文件”對(duì)話框:確?!绊?xiàng)目”選擇的是 JUnitTest ,然后在“類別”中選中 JUnit類,在“文件類型”中選中測試套件,點(diǎn)擊“下一個(gè)”,進(jìn)入下一窗口:修改“類名”為 AllTests ,點(diǎn)擊“完成”,然后修改代碼如下:package net.zheng.junit.te

21、st;import junit.framework.*;public class AllTests extends TestCase public AllTests(String testName) super(testName);public static Test suite() TestSuite ts= new TestSuite(AllTests);ts.addTestSuite(BookTest.class);return ts;下載可編輯復(fù)制經(jīng)典文)其中TestSuite 是用來組織測試類的, 通過其addTestSuite()方法將測試類添加到 ts對(duì)象 中,凡是添加到ts中的測試類都將在運(yùn)行文件時(shí)被執(zhí)行。此外,您也可以在定義

溫馨提示

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

評(píng)論

0/150

提交評(píng)論