Modbus-RTU协议简单说明_第1页
Modbus-RTU协议简单说明_第2页
Modbus-RTU协议简单说明_第3页
Modbus-RTU协议简单说明_第4页
Modbus-RTU协议简单说明_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、经典文胸的但诵以曲说R编程ModOui通讯协议分为RTI:的议和XSC口协议.我司的多种仪表部采用ModRuB KTI 遛调那谈,如】TD2W口 HBR电力篙假,逛粉表.敖晶表,尤轩敢显表带,卜面箍UodBu s RTU协议茴要介纽如下:一、通ill怫说(-)、迎讯传送方式:前讯为子介力如。的吃口头.和发送的端叫帮树 以下的讪加彳专送/嵬七幅阳 DBI S m通双炊约柏及演筑旧 H位二遇制错误检输 CK【兀余肺坏码】初妗精构-三宇宙胪段子问 埴址码-字节M屈码二I字节费提H N字节招戌校户=lb忖C氏的结束玷构=今4字节的时间地址码!地址科为通讯科送的第一今字节.这个7节表明由用户近定地址田府

2、从机将花也山J机发送土M1H息.并且晦十从机邮仃具有唯一的地址跖并且科威回送用以各自 印。5日H将主机集坐的地址翻亮胴送龛地刊的从机地址.而北机发送的地址码亮明叵I 送的队机地址.项能码:通讯传送的第二A字节.M诵配界泌讯说妁出E功能勺为】J-J 127京仪表工 利用乱中的一部分功能叫.作为主HL请求发送、皿以由鹿口告诉从机执仃fl么助件 作为 从机响应,从机发送的前能码占从主机发送来的功能眄一样.并表明从机已响应主机进行 操作.如果从机里出的功能码画最岛值为1 f比如功比的大打匕大上12T).则表明队机没 宥响应操伟成发送出的.*K1截辗区品限据不同的功睦码而不同.数据区可以是实际数值.谀置

3、点.主机 次建笳队儿或灵机发送殆十机囹地ULCRC硒:二字节的情。检割码.(二、通讯耗的当通钿帝金发送至仪窿时.符合相应地址码的发名接通机命令.并除去地址码.读 以信息.如果祖有出错,剜执行相度的任翳;整打把械打结果返注给发送春,返送我佶忘中包括地址吗、执仃功仰的功造俏执打动他后结果的数据以后错误的验据 如果5错就 不发送任何信息.L科01幅结构地垃冏功能何数据区博诺校喊晒8位位K M业也K位地址码:地内码是;.口帕的第一信囹,从口到电这个字节赛站由用户傻置下载可编辑复制经典文他却的从机将楂收田木机笈塞米的值屈,母个从用都必於右一唯一的地码.并n只门符含 地址因怕状肛,能响曲回送。当从机回搜值

4、息附相当峋地址码表明该信息来自于何处;功能码;主机发送的功质码告诉我机执行什总任务口妻it列出的功能码都有具体 的含义强操怦;代研含义操作03读取数都读取当一揖。擀内一个里多个一班制电08崔单一寄存册设置的二处制11写入单一寄存塔数据区:数据区包含淅零双机执tH么动作或由从机及乩的思医看思二一咒金息可以 是融值、善等地址等等 泣e .功处吗告诉从it遗取寄存簿峋tn,烟数据区必需包含要读 取奇有霜的起蚱地址员康堰牧度.冏1不同的从机.地址和帮掘信息都不相同,特课校验码:主机或从机可用校监仍述行列别根收仃息是西山惜.司,由电子 声或其它一当千就.信息在传输过程中会发牛二期做的变化.惜误校骆码戈讦

5、ri,或从机 利在肉送过口小山川的七总不起ftJIL这样增加了系统的安全利效率,措识校甄录用CRC T6校监方法.在信息顿的格式那地不刑何;地址仍.功能叫、数弱区利希误校独帽.九猎陕校验瓦尔端H;码(匚咫,包含2午干节,即16位二就制.匚即用市发送设蒂计W,酒酉于 贷读信息的手部.挂收情息的设备再面新计第接收到侑息峋厂附码.比虻U得利的叔 司是西与接收到的相格如果两者不相符,则我明HitlLCM蚪的计算斤。,足.丸顼方 g位商存罂金为1。即透出也许E付数骐f总边什处爬. 在遇仃G既得计算时只用8位数据懂,起崎位地匕川色加有奇偶校皖胡的话也包括奇耦 校蛤仲,都不写与CRG码计审.itMHC此码时

6、.2位数兆。寄在罂狗敷甥和计或, M列的封梁向候仁移一字鼠用 U堪祚烈岛山,理植自后乜,如聚屿低位为I*把力存耨的内柞与我H数出界或划枭 日相归出冷一革:汕小力:的下载可编辑复制经典文这个过程一直重复8次,第8次豚位后.下一十8位再与以在皆存得的内容相榴异 直,这个过程与以上一样隶员8次,当斯存的软察信息处理完后,最后寄存器的内容即为 C耽码值* GCP1中晌数据发送,接收时低字节在前.计算CRC码的步骤为:, 购亚1b位奇存稀为八地制FF盯即全为I J二称比奇存器为LRL寄存器: 把第 个H位数据与16位嗣寄存料的醺僮和异或r杷站果放于时寄存格; 把寄存豁的内容&唐一栓(朝械也).川口填扑最

7、高位a检查聂桂世, 如果最衽位为5重良第3般f再次辨杆);加里最低位为卜Ct寄存舞与多场式4 001 (1010 0000 OODO (0Q1 ) ill行异氏; 重复士理3川L我到八岸总次.这打裳4 位数据全部辿行了处理, 甫包布辘2tli的骤进行下一个8付数据的处理L及IZJ划的C虬花存黠叩为LHC蚂n3 .功能明口3.睡取点和返回假:岗段来川曲曲一酊口通讯规约.利用通福金令, M吼进杼读取广丁 “保苗寄存牌) 或返回世(1卷人寄存器”的操作,紧仲用惭入寄存器郡是15慢12字甘J值.并”岛 便在前.这样用于仪表前没取点和返回值都是2字节.一次品塞可设睨寄存翳数髭前.由 下一建可墉程投制器不

8、用功腌码03.削以功能罔03破田作读取点和返目值,从机晌应的 命令格式是从机地址.功能丹.数据区及。咫冏,数帮区中的甯存耦数据都是用两个毕节 图字节在前.4 .而彼码口6,电告很乖下载可编辑复制经典文1机利汨这条命令把单点和据保存打仪表的斤他端从机也任这个功非需向主机送送 信息.二组程举程卜血皂一个川V。一写的MoMuy RF通讯的咧子(-),通讯口设置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养UTN7 etcraid racrc(BYTE errbuf)IBYTE i;ric=crc cicbul :for i_0;) “新建项目”,打开“新建项目”对话框:下载可编辑复制经典文请在“类别”中选择“常规”,再从“项目”中选择“Java应用程序”,然后点击“下一步”,进入“新建 Java应用程序”对话框:口彳?在这个对话框中需要设置项目的名称以及项目所在目录,我为自己的项目起名为JUnitTest , “项目位置”为 G:YPJCCKJUnitNetBeans ,此外,请将“创建主类”前的对 号去掉。项目创建好后,已经自带了 JUnit 3.8.1

11、。二.编写用于测试的 JavaBean用于测试的JavaBean很简单,名为Book,只有id和name两个属性,这两个属性将分别用 于两个用例当中。下面开始编写该JavaBean o请点击“文件”- “新建文件”,打开“新建文件”对话框:下载可编辑复制经典文确保“项目”选择的是 JUnitTest ,然后在“类别”中选中 Java类,在“文件类型”中选中Java类,点击“下一个,进入下一窗口:设置类名为Book,包为net.zheng.junit.test ,设置完成后点击完成,修改代码如下: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;下载可编辑复制经典文至此,用于测试的 JavaBean编写完成。三.编写测试用例这里只用了一个类进行测试,名为 BookTest,该类继承自junit.framework.Test

13、Case 类。BookTest类包含两个用例,分别对应该类的testId 和testName方法,即每个方法实现了一个测试用例。注意,在 JUnit中,junit.framework.TestCase的子类中每个用来实现测试用例的方法都必须以testXXX的格式来命名,这些方法在运行时会被执行。此外,BookTest还包括setUp和tearDown这两个方法,前者在每个测试方法开始之前执行,多用来做初始化;后者在每个测试方法完成之后执行,多用来清理资源。下面开始编写BookTest。请点击“文件”- “新建文件”,打开“新建文件”对话框:确保“项目”选择的是 JUnitTest ,然后在“类

14、别”中选中 JUnit类,在“文件类型”中选 中现有类的测试,点击“下一个”,进入下一窗口:选择要测试的类,点击“完成”,修改代码如下:下载可编辑复制经典文package net.zheng.junit.test;import junit.framework.TestCase;import junit.framework.Assert;public class BookTest extends TestCase Book book = null;/建议为测试类创建构造public BookTest(String name) super(name);protected void setUp()

15、throws Exception /调用超类的setUp(),以确保测试环境被初始化super.setUp();System.out.println( 测试开始!);book = new Book();System.out.println(book对象被初始化!);protected void tearDown() throws Exception System.out.println(book对象将被清理!);book = null;System.out.println( 测试结束!);/调用超类的tearDown(),以确保测试环境被清理super.tearDown();public vo

16、id testId() book.setId(001);/ 设置 id 属性的值为 001/使用Assert查看id属性的值是否为001Assert.assertEquals(001, book.getId();System.out.println(id属性被测试!);public void testName() book.setName(ASP); / 设置 name属性的值为 ASP/使用Assert查看name属性的值是否为JSP,这是个必 然出现错误的测试Assert.assertEquals(JSP, book.getName();System.out.println(name属性被

17、测试!);这里setUp和tearDown方法没什么好说的,就是执行了对 book对象的初始化和清理,不过testId 和testName需要说明一下。前者是在对book的id属性进行测试,首先赋值为001”, 然后使用Assert的assertEquals 方法查看id属性中存放的值是否是期待的值,由于我的 期待值也是“ 001”,所以执行后这个用例应该是成功的;后者则是对book的name属性进行测试,也是首先赋值为”ASP,然后使用Assert的assertEquals 方法查看其值是否是下载可编辑复制经典文期待的,由于我特意将期待值设定为根本不可能的JSP,因此这个用例执行后会出现一个

18、错误。但请注意,由于我是特意要让测试出现错误,所以将期待值设定成了不可能的值, 如果你是测试人员,请千万不要这么做,否则如果别的地方导致了错误,很容易给自己造成不必要的麻烦。下面简单介绍一下上边用到的静态类junit.framework.Assert。该类主要包含 8个方法:1. assertEquals() 方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的 equals()方法类似;2. assertFalse() 和assertTrue() 方法,用来查看变量是是否为false 或true ,如果assertFalse()查看的变量的值是 false则测试成功,如果是 tru

19、e则失败,assertTrue()与之相反;3. assertSame()和assertNotSame()方法,用来比较两个对象的引用是否相等和不相等, 类似于通过“=和“ != ”比较两个对象;4. assertNull() 和assertNotNull() 方法,用来查看对象是否为空和不为空;5. fail ()方法,意为失败,用来抛出错误。我个人认为有两个用途:首先是在测试驱动开发中,由于测试用例都是在被测试的类之前编写,而写成时又不清楚其正确与否,此时就可以使用fail方法抛出错误进行模拟;其次是抛出意外的错误,比如要测试的内容是从数据库中读取的数据是否正确,而导致错误的原因却是数据库

20、连接失败。四.运行BookTest编写好BookTest后,就可以运行了。请在“项目”栏中选中 BookTest,点击鼠标右键,选择“运行文件”,测试信息会从“输出”窗口输出:下载可编辑复制经典文当有多个测试类需要一次性进行测试时,可以使用测试套件来完成这项工作。在NetBeans中,点击“文件”- “新建文件”,打开“新建文件”对话框:确保“项目”选择的是 JUnitTest ,然后在“类别”中选中 JUnit类,在“文件类型”中选中测试套件,点击“下一个”,进入下一窗口:修改“类名”为 AllTests ,点击“完成”,然后修改代码如下: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;下载可编辑复制经典文)其中TestSuite 是用来组织测试类的, 通过其addTestSuite()方法将测试类添加到 ts对象 中,凡是添加到ts中的测试类都将在运行文件时被执行。此外,您也可以在定义

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论