《Modbus通讯》word版.docx_第1页
《Modbus通讯》word版.docx_第2页
《Modbus通讯》word版.docx_第3页
《Modbus通讯》word版.docx_第4页
《Modbus通讯》word版.docx_第5页
全文预览已结束

下载本文档

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

文档简介

Modbus通讯在坛子中看到很多弟兄们在做Modbus通讯时遇到很多问题,包括Modbus的请求或响应的基本知识,包括编程等等,现将我的一点拙见写出来,供大家参考和批评指正。Modbus协议最早有施耐德旗下的Modicon公司与1978年提出,目前已经称为国际标准和国家、行业标准。该协议是典型的串行通讯协议,支持CRC或LRC校验。通讯速率支持2.4kbps115.2kbps,更快也可以,但是误码率较高。支持RTU或ASCII通讯凡是,支持奇/偶/无校验。RTU通讯时标准通讯参数为支持8个数据位、1个停止位、偶校验;ASCII通讯时标准通讯参数为支持7个数据位、1个停止位、偶校验;Modbus总线理论上支持的从站个数可达248个(单条总线、不加中继时连接的设备个数与通讯端口和连接的设备有关,有的可连接16个设备,最大连接32个设备),不加中继双绞线距离可达1200米。Modbus通讯时最常用的是RTU通讯方式:1.通讯时读请求格式如下:从站地址(1个字节)、功能代码(1个字节)、从站数据起始地址(2个字节)、读数据长度(2个字节)、CRC校验(2个字节)。2.读响应格式如下:从站地址(1个字节)、功能代码(1个字节)、读数据长度(1个字节)、数据(长度与数据长度中的字节数相同)、CRC校验(2个字节)。3. 写请求格式:从站地址(1个字节)、功能代码(1个字节)、从站数据起始地址(2个字节)、写出数据长度(1个字节)、写出数据(长度与数据长度字节相同)、CRC校验(2个字节)。4. 写响应格式:从站地址(1个字节)、功能代码(1个字节)、从站数据起始地址(2个字节)、写数据长度(2个字节)、CRC校验(2个字节)。如果为RTU通讯,校验方式为CRC校验;ASCII通讯时,校验方式为LRC校验方式。功能代码有很多:01:读单个线圈(0*地址)数据02:读输入信号(1*地址)数据03:读连续多个寄存器地址(4*)04:读连续多个输入模拟量地址(3*)05:写单个线圈(0*地址)数据06:写单个寄存器数据(4*)07:读以外状态信息08:诊断:15:写多个连续线圈(0*地址)数据16:写多个连续寄存器(4*)数据17:返回从站ID:20:读参考信息(文件记录)21:写参考信息(文件记录)23:读写FIFO队列不同的Modbus设备支持的功能代码也有区别,总的来说Modbus设备可分为三类:1. 基本型:支持03和16功能码2. 标准型:支持03和16、01、02、08、15功能码3. 扩展型:支持除标准型的功能码外,还支持20、21、23功能码。Modbus读寄存器时最大可连续读取125个字的数据,写100个子的数据。读位时可读2000个位信息,写1600个位信息。(位的数据与字的数据是16倍的关系)很多人认为做Modbus读写位操作时,所有数据应该保存在位地址中。其实不是,在做Modbus通讯时,由于所有数据都是按照字节方式打包的,因此,所有位数据都是存储到字节中发送或读取的(这就是个别通讯一直疑问为什么做位读写时数据还要存储到字地址中的原因)。最后,由于Modbus通讯同时支持字读写和位读写(在施耐德所有PLC中,所有地址都是按照“字”地址和“位”地址定义的,字地址和位地址没有任何关系,可以任意调用,而西门子所有PLC地址都是按照“字节”方式定义的。)在存储数据时,西门子PLC中的数据是按照“低字节、高字节”顺序存储的,如果读取浮点数数据,顺序为:低字低字节、低字高字节、高字低字节、高字高字节。而施耐德所有PLC由于按照“字”地址和“位”地址定义的,所有数据存储时与西门子PLC完全相反,即如果读取浮点数数据,顺序为:低字高字节、低字低字节、高字高字节、高字低字节的顺序。这就是为什么有些数据上传到西门子PLC或HMI时,所有数据都不正确的原因,是因为高低字节顺序反了。如果出现上述问题,只需将高低字节编程做个转换即可。刚开始应用MODBUS通讯的时候,犯过错,拿出来分享下。功能码 03 16 对应的 4*x(寄存器) 应用最多。一般起始地址对应的40001。 例如仪表的地址是0x1F0 。容易对应成40496 。实际是40497.采用Modbus通讯读写数据时,数据内容中并不包含数据的地址,数据地址包含在Modbus读写的请求中。如下所示:通讯时读请求格式如下:从站地址(1个字节)、功能代码(1个字节)、从站数据起始地址(2个字节)、读数据长度(2个字节)、CRC校验(2个字节)。因此,需要注意如下内容:1. 从Modbus地址编码来说,最小地址为1,如1*、0*、3*、4*地址中最小地址都为1,如10001,00001,30001,40001等。但是很多厂家的设备在编码时都是按照最小地址为0来编码的,所以,写设备的数据区地址时必须加1,这就是“瘦锅”提到的问题;2. 另外有的SCADA软件读取Modbus设备数据时,有的要求地址长度必须为6位(如ifix,所有地址必须为6位),而有的要求为5为(如intouch软件,读施耐德Quantum PLC时为6位,其它中端PLC为5位)。其实,从Modbus响应来说,所有数据中不包含地址,因此,在显示时输入6位或5位地址没有任何区别。ifix或intouch软件中要求的6位或5位只是各自厂家按照自己的习惯来要求的。常见的测试Modbus通讯的软件除了常见的串口调试工具以外,最常用的是Modscan,可以测试Modbus和Modbus TCP/IP。我做过MODBUS RTU

温馨提示

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

评论

0/150

提交评论