通讯格式传输方式及MODBUS协议简介.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MODBUS 协议、通讯格式、传输方式 MODBUS介 MODBUS是一种单主站的主/从通信模式。MODBUS网络上只能有一个主 站存在,主站在MODBUS网络上没有地址,从站的地址范围为0 - 247,其中0 为广播地址,从站的实际地址范围为 1 - 247。 MODBUS通信标准协议可以通过各种传输方式传播,如 RS232C、RS485、 光纤、无线电等。 MODBUS具有两种串行传输模式,ASCII和RTU。它们定义了数据如何 打包、解码的不同方式。支持 MODBUS协议的设备一般都支持 RTU格式。 通信双方必须同时支持上述模式中的一种。 实际也就是发送与接收双方商量一下, 定好规则,发送方想要接收方做某件 事,就发送某种格式的信息给接收方, 接收方收到信息后,按照事先约定好的规 则分析信息,执行命令。 MODBU的通讯规范: 起始符+设备地址+功能代码+数据+校验和+结束符 通讯格式 通讯格式设置举例:9600, o, 8, 1即: 波特率为9600; 校验方式为奇校验; 数据位为八位; 停止位为一位; 1、波特率: 波特率是每秒钟传输的数据位数;什么是位数呢? 计算机处理的语言是0和1组合而成的信息,即机器语言! 一个0或是一个1就是一个位; 设置波特率的作用? 如果把波特率设为9600,即一秒钟之内能够传输9600个0或是1,它决定 了通讯的数据传输速度。 常用的波特率数值有:2400、4800、9600、19200、38400、57600、115200; 其值越大,通讯传输速度越高,那么是不是把波特率的数值设置的越大越 好呢? 当然不是,它要根据现场传输条件来决定,波特率设置的越大,要承担的通 讯失败风险越大。 2、数据位: 前面说过,计算机处理的语言是0和1组合而成的信息,即机器语言!,,,,A B C D E F 上面一组机器码分别代表的字符是 A,B, C, D, E,F; 如A:是示,共八个0或1,即数据位为八位; 数据位的含义:是一个字符可以用多少个位的组合来表示; 为什么要设置数据位呢? 其一,设置数据位后,我们就知道了数据长度,然后可以根据波特率(9600) 计算出传输一个字符A需要多少时间。 如果数据位设为8,则: 8/9600=0.00083 秒 即传输一个字符A,需要0.83毫秒的时间(这不是正确的计算,原因在停止 位的解释中再论述!) 其二,定义一个标准,方便通讯双方分析。 合法的数据位值:4、5、6、7、8 目前常用的数据位是8位与7位。 3、停止位: 设置了数据位,就可以正常通讯了吗?不是!接收方何时才知道一个字 符传输结束了呢? 这就需要一个停止位,有停止位当然还需要一个起始位来告诉接收方一个字 符的传输开始! 为什么要设置停止位呢? 上面解释过了,即,知道一个字符何时传输结束! 目前常用的停止位是一位与二位。 还有一个问题,为什么在通讯格式中不用设置起始位? 我所知道的是: 停止位是一个高电平(1),当接收方接收到连续的高电平时,表示一个字符 传输结束。 起始位是一个低电平(0),当接收方接收连续的低电平时,表示下一个字 符的传输开始。 如果停止位可靠(1位或是2位),那么干扰造成低电平起始位假象的可能性 就不大,所以不用设置起始位! 在数据位的解释中,我计算过传输一个数据位设为八位的字符 A的传输 时间,8/9600=0.00083秒,即0.83毫秒的时间传输一个字符 A,现在您应该知 道了,这个计算并不正确,因为没有加上起始位数和停止位数! 现在我们重新计算: 假如设置停止位为2,则一个起始位,两个停止位,8个数据位,总位数为 11。 11/9600=0.0011秒,即传输一个字符A需要1.1毫秒的时间(这还不是正 确的计算,原因在校验方式的解释中再论述!) 4、校验方式: 朋友们都知道,干扰是无处不在的,如果抗干扰处理的不理想,在通讯传输 过程中,0可能会变成1,或是将1干扰成0,造成传输错误? 干扰是消除不了的,提高抗干扰能力也只是提高而已,并不能完全防止干扰。 所以因为干扰造成的传输错误一定会发生。接收方如何知道接收到字符是否正确 呢? 解决方式就是加上一个校验,即在传输的数据中再加上一个校验位! 目前所用的校验方式为: 偶校验(even):简单表示为e 奇校验(odd):简单表示为o 无校验(none):简单表示为n 偶校验:如果一个字符中1的个数是奇数那么校验位就置为1; 如果一个字符中1的个数是偶数,那么校验位就置为0; 从而保证总的1的个数是偶数; 比如设置数据位为8位,字符A是:0100 0001 其1的个数是2个,为偶数。

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档