版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文档MODHI苫通讯协议及编程Ms出值辿讯拙议分为RTL协议和ASCI【协议,我公司的多抻仪表都乘用Mmlftus RTC 通讯梆谈.如:YD加M河能电力就利仪、巡检表.数显表、光柱数显表等,下面就丽d前 s RTf协设酌处介怕如Ft一,通讯协议-) . iffi也传送方式:通讯特送分为独立的信息头,和发送的编档数据以卜的通讯传送方式定义也与峋 DBUS R1T逋玳规妁相敬容:编码E便二-进制起蜡位1位数据位8位奇偶校哙庐1慌t偶校赛位)停止位 R错误校检CRC (冗余的环码)I始址造据切地用政结构-4字节的时间 码=1字节码-I字节区=X学 科限校检=15位CRC码端期站杓=#4字节
2、曲&南地址码:地址再为通讯楼送的第一个字这个地带兼翡由用户设定地址“物从机个 接收由主机发送来的信息.并且每个队机都有具宥唯一的地址图,并且响应回送均以各自时他讨码开始主机发送的地M码表明将发送到的队机岫址,而从机发送的地址码表明回 送的从机地址口功能码:通讯传送的第二个字节.此:市面占通讯规约定义功能号为)到127本仪表只 利用用中的一部分功能码*作为主机请求发携.通时功能为告诉从机发行什么劫柞.作为 从机响应,从机发送的功能码与从主机发送来的功能码一样,井表明从机己响应主机进行 操作.如果从机发送的功陡码的值高也为I (比如功能码大叮此同时127),则表明从机没 口啊也世,”发送出情数据区
3、;数据区是根据不同的功能码而不同.数据区可以是实际数值、设置点、主机 发送给从机或从用发送给t机的他*.CRC码:二字节的错误检溯耨n(二),通讯般的土当通讯命令发送至仪踹时,符合相应地址刊的设需接通讯却令,井除去地址码,读 双:.息,如果没有骷铅,则执行相麻的任务:然后把执行片果返送给发送已,返送的储思中包括地址内,执行动作的功能用、执行动作后姑果的数据以及秘误校麴码.如果出错就 不爰送任何信息.1 .信息帧结构地址码功修周数据区错误校验例8RB位N X 81位164地址码:地址档是信息帧的第一字节由位32551这个字节表明由用户设置地址的值机将榛收由主机发送来的信思.诲个战机都必地作唯一的
4、地址码*并且只有符会 地址码的从机才能响府回送,,从机回送1口用.相当的地址码才明该值回来自何处.功能玛:主机发送的功能码告诉认机执行什么任务B表1T列出的功能码都有具体 的畲文及提HZ代珥含义操作。3读取教据点取当前寄存器内一个或多个二进制也06事置单一寄存器把收置的二进制值写入单一寄存需数据区:数堀区包含需要从机执行什么动作我由从凡采集的返送精息;这些信息可以 是敌也.叁号他川箸莓,可如,功能码告诉从机读取寄存器的值,则初据区必需包含要读 取寄存得的起始地址及读取长度,对于不同的从#L地址和教第情息都不相同.错误校爨码:主机或从机可用校脸玛遂行判别接收信息是否出错.有时,由于电子喔 小威虹
5、它一些T-扰,廛在传输过耀中叁量生在总的空租,粒腺科保正了生机或从机 同在传送过程中出错的信息不起作用,这样增加系统的安全和效率=错误检验采用CRC 76校验方法。注:信息帧的格式都基本相同:地址码、功能码.数据区和错设校险码二2 .错误校骁冗余循环码fCRC)也含2个字节.一16位二进刷.CRC码由汲送设鲁计算放置于 量送信息的尾部 接收信息的设招再垂新计算接收到信息的R匚吗,比较计算常到的匚明 码址古内楂收到的相符.如果两行不相符,期表明出霜.C近码的计算方法是,先前置16位寄存器全为U再逐相把每X位数据信息进行处理, 在进行CftC科计算时只用8位数据恸.起蛤口及*ll付.如力办理校侬伊
6、的话也包括奇鸭 校验位,都不毒与CRC码计羿n在计第CRC码时. E位数据与寄存罂的数据相异或*得到的结果向低位移一字节.用 口地扑晟蔚位.种检较员怅位.卸果最低也为I,把寄存部的内容耳械置数相计成.如架 铝%捋为。一不避行导成运时_文案大全这个过程 直事复&近:第8次移位后.下一个B位再与现在寄存器的内容相相异 或.这个过附与以上一样而复8次,当所有晌数据倍息处理完后,最后寄存H1的内容IW为 orc码惘CR匚码中的数据能送、揍收时抵字节在前.1算CRC-的步骤为上 饱n】5位.寄存器为入逆制即叩(即全为I,称此寄存器为匚耽寄存梆t 把第一个西位数据与IB位C同寄存器的低位相异或.把结果放于
7、CR匚寄存器: 把寄存器的内容右移一位(朝低位.削。填补最高位.检查最低位; 如果最隹位为由卓宜第3步Wi次移位);如果最低的为1:。吃寄存器与多项式A001 ( 1010 0000 0000 OflOD 迎打元或* 重史少彝3和九 直型)右移后次.这样整个X位数据全部迸行了处理: 重复步鞋2到步嘿I进行下一个8位数据的处理; 最后鞫到的CRC需存耦即为CRC至h3,功能码03.述取点和返回值:仪表果用Modbus RTU通讯规例,利用通讯命令,可以进h法取点f “保持寄存器R ) 或返回值(*犍入寄存器 )的操作n保持和橇入寄存器都是16位小季节,值,并且高 口在用这样nn仪表的泳取点和返回
8、值都是a字节。一次最篓可读取寄存耨数是6九由 丁5r如目拧制解不用功能码03,视IL力能码03被用作致收点和返回ft从机晌应的 命令格式处从机地址,功地竹.放州岫及丽玛.数WK中的寄存斯敝蝌都足用四个字小 高字节在前.4.功能码06,单点快存由林利用这条命令把单点数据保存线仪表的存脐器从机也用这个功能码向十机运送 信息*:*编程小网F面是一个用YC编写的瓦加U5 RTT通讯的例子(-)、通讯口设置DCB deb;hCom=Crt eFile *COM 1 GENFR1C_READ GFFRC_IRrTE.0,Mil.OFEX EXI5T1XG,0,、um ;1 f (hCo=IN ALID_H
9、ANmJ_VALU0(MessdgcRaxri Ie meum,”);ROOl. Lf r:n Itunroititii fhCoin, 102 I, 1 i .i i- * ! ei j or)McssafteBcxr sctupcoum err。/);el T01 GeiCuniniSuiti (hCtHib HrMb. .if (terror)MensarcBok ( _EguaifftHt* err oi F);deb. R3ULRiir!-2 LQQ;deb.ByteSize=8;deb. Pat i t y=EVENPART TY : /NOPAR T TY;ih:b. SLjpB
10、its=ONESTOPBIT;eiior=Sc iCommSla N (hCoiih ftdeb);(二)、CRC校骗码计算vitrr orcvoid calccrc(BYTE errbuf) (BYTE i:C1C=CLC efebuf;for(i=0;il;i ic=ci c&0x7fft ;j|- (TT=1)crc=cic OMaOOl;cic=crcfi0xffff;)=).数据发送门期疝二】:读取地址为的巡检表数据 zxwlQ:/读瞰I力通诙的数据wr i t ebuf2,0 =工)caddr;vritehuf2l=3;wri icbul122=0;wri tebuf2L3=0;i
11、ichur24=O;wt itbunBJ=zxnum;crC=Oxffff;ck I cc J i- fwri 1aT vv i lebuf2, 8.虹口胤口口叫 Nl LL);(四),数据谟取Re&dFi u (htCoii wr i tbuf, $+inui+2,良曲im. NULL);慢取 KKhum 个遗道数榭 叫增加带囊处理程序,如地切码狷现,C8C码带程判小麻福率处理等.tIUDHUS透武力谀荷介一、精述Modtn曲过是应用于电子控制器上的 种面用油.起过此油说.控RHM0五之间.号制器线由网热(例 如以太网J粗M立没都之间可以端值.它口位成为 端阳1班标准.布了它.不同厂商生产的
12、捽制设普可变 在通I业网片.时吁中曲拧.此协谡定更丁一个拄制器能认识使用的捐Jafi构JI不管它f超S过河叶冏培述行述情的它横述了一控制器 请求访问其它役署的过程,M里回度来自其它设备的请求,品及息择也翻错律并记录.它制定了消息域梅局etBeans使用教程入门篇.创建项目 卜面打开NetBeans,然后点击菜单“文件”- “新建项目”,打开“新建项目”对话框:请在“类别”中选择“常规”,再从“项目”中选择“Java应用程序”,然后点击“下一步”,进入“新建 Java应用程序”对话框:在这个对话框中需要设置项目的名称以及项目所在目录,我为自己的项目起名为JUnitTest , “项目位置”为 G
13、:YPJCCKJUnitNetBeans ,此外,请将“创建主类”前的对 号去掉。项目创建好后,已经自带了 JUnit 3.8.1。2 .编写用于测试的 JavaBean用于测试的JavaBean很简单,名为Book,只有id和name两个属性,这两个属性将分别用 于两个用例当中。下面开始编写该JavaBean。请点击“文件”- “新建文件”,打开“新建文件”对话框:确保“项目”选择的是 JUnitTest ,然后在“类别”中选中 Java类,在“文件类型”中选中Java类,点击“下一个,进入下一窗口:设置类名为Book,包为net.zheng.junit.test ,设置完成后点击完成,修改
14、代码如下:package net.zheng.junit.test;public class Book private 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编写完成。3 .编写测试用例这里只用
15、了一个类进行测试,名为 BookTest,该类继承自junit.framework.TestCase 类。BookTest类包含两个用例,分别对应该类的testId 和testName方法,即每个方法实现了一个测试用例。注意,在 JUnit中,junit.framework.TestCase的子类中每个用来实现测试用例的方法都必须以testXXX的格式来命名,这些方法在运行时会被执行。此外,BookTest还包括setUp和tearDown这两个方法,前者在每个测试方法开始之前执行,多用来做初始化;后者在每个测试方法完成之后执行,多用来清理资源。下面开始编写BookTest。请点击“文件”-
16、“新建文件”,打开“新建文件”对话框:确保“项目”选择的是 JUnitTest ,然后在“类别”中选中 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
17、) super(name);protected void setUp() 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()
18、,以确保测试环境被清理super.tearDown();public void 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
19、.getName();System.out.println(name属性被测试!);这里setUp和tearDown方法没什么好说的,就是执行了对book对象的初始化和清理,不过testId 和testName需要说明一下。前者是在对book的id属性进行测试,首先赋值为001”, 然后使用Assert的assertEquals 方法查看id属性中存放的值是否是期待的值,由于我的 期待值也是“ 001”,所以执行后这个用例应该是成功的;后者则是对book的name属性进行测试,也是首先赋值为”ASP,然后使用Assert的assertEquals 方法查看其值是否是期待的,由于我特意将期待值设
20、定为根本不可能的JSP,因此这个用例执行后会出现一个错误。但请注意,由于我是特意要让测试出现错误,所以将期待值设定成了不可能的值, 如果你是测试人员,请千万不要这么做,否则如果别的地方导致了错误,很容易给自己造成不必要的麻烦。下面简单介绍一下上边用到的静态类junit.framework.Assert。该类主要包含 8个方法:1. assertEquals() 方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的 equals()方法类似;2. assertFalse() 和assertTrue() 方法,用来查看变量是是否为false 或true ,如果assertFalse()查
21、看的变量的值是 false则测试成功,如果是 true则失败,assertTrue()与之相反;3. assertSame()和assertNotSame()方法,用来比较两个对象的引用是否相等和不相等, 类似于通过“=和“ != ”比较两个对象;4. assertNull() 和assertNotNull() 方法,用来查看对象是否为空和不为空;5. fail ()方法,意为失败,用来抛出错误。我个人认为有两个用途:首先是在测试驱动开发中,由于测试用例都是在被测试的类之前编写,而写成时又不清楚其正确与否,此时就可以使用fail方法抛出错误进行模拟;其次是抛出意外的错误,比如要测试的内容是从数
22、据 库中读取的数据是否正确,而导致错误的原因却是数据库连接失败。四.运行BookTest编写好BookTest后,就可以运行了。请在“项目”栏中选中 BookTest,点击鼠标右键,选择“运行文件”,测试信息会从“输出”窗口输出:五.测试套件当有多个测试类需要一次性进行测试时,可以使用测试套件来完成这项工作。在NetBeans中,点击“文件”- “新建文件”,打开“新建文件”对话框:中选确保“项目”选择的是 JUnitTest ,然后在“类别”中选中 JUnit类,在“文件类型”中测试套件,点击“下一个”,进入下一窗口:修改“类名”为 AllTests ,点击“完成”,然后修改代码如下:package net.zheng.junit.test;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 是用来组织测试类的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 叩开孩子的心门课件
- 2024年度二手笔记本电脑买卖合同3篇
- 石材干挂施工合同范本
- 2024年度音乐版权许可使用合同3篇
- 认识图形课件
- 招商引资框架协议书范本标准版 3篇
- 2024年度工程咨询及项目管理合同
- 教育课件下载
- 二零二四年度电力工程车辆租赁合同3篇
- 2024版软件开发许可协议3篇
- 2024年刑法知识考试题库附参考答案【满分必刷】
- 国开作业《公共关系学》实训项目1:公关三要素分析(六选一)参考552
- 肺功能进修总结汇报
- 中国航天发展历史
- 《燃烧性能测试》课件-第二节 氧指数测试
- DB32/T 4446-2023 公共机构能源托管规程
- 初中英语名词单复数专项训练题目
- 2.贵州省地方标准项目申报书
- “读思达”教学法在整本书阅读教学中的实践
- 盐酸右美托咪定鼻喷雾剂-临床用药解读
- HSK 2标准教程(完整版)
评论
0/150
提交评论