modbusrtu协议格式错误表.docx

上传人:b****2 文档编号:3185403 上传时间:2023-05-05 格式:DOCX 页数:9 大小:20.62KB
下载 相关 举报
modbusrtu协议格式错误表.docx_第1页
第1页 / 共9页
modbusrtu协议格式错误表.docx_第2页
第2页 / 共9页
modbusrtu协议格式错误表.docx_第3页
第3页 / 共9页
modbusrtu协议格式错误表.docx_第4页
第4页 / 共9页
modbusrtu协议格式错误表.docx_第5页
第5页 / 共9页
modbusrtu协议格式错误表.docx_第6页
第6页 / 共9页
modbusrtu协议格式错误表.docx_第7页
第7页 / 共9页
modbusrtu协议格式错误表.docx_第8页
第8页 / 共9页
modbusrtu协议格式错误表.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

modbusrtu协议格式错误表.docx

《modbusrtu协议格式错误表.docx》由会员分享,可在线阅读,更多相关《modbusrtu协议格式错误表.docx(9页珍藏版)》请在冰点文库上搜索。

modbusrtu协议格式错误表.docx

modbusrtu协议格式错误表

竭诚为您提供优质文档/双击可除

modbus,rtu协议格式,错误表

  篇一:

modbus协议(功能码及报文解析)

  modbus协议

  modbus是一种串行通信协议,是modicon于1979年,为使用可编程逻辑控制器(plc)而发表的。

事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。

modbus比其他通信协议使用的更广泛的主要原因有:

  公开发表并且无版税要求

  相对容易的工业网络部署

  对供应商来说,修改移动原生的位或字节没有很多限制

  modbus允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。

在数据采集与监视控制系统(scada)中,modbus通常用来连接监控计算机和remoteterminalunit(Rtu)。

  modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。

  大多数modbus设备通信通过串口eia-485物理层进行[1]。

对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。

modbusRtu是一种紧凑的,采用二进制表示数据的方式,modbusascii是一种人类可读的,冗长的表示方式。

这两个变种都使用串行通讯(serialcommunication)方式。

Rtu格式后续的命令/数据带有循环冗余校验的校验和,而ascii格式采用纵向冗余校验的校验和。

被配置为Rtu变种的节点不会和设置为ascii变种的节点通信,反之亦然。

  对于通过tcp/ip(例如以太网)的连接,存在多个modbus/tcp变种,这种方式不需要校验和的计算。

  对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。

  modbus有一个扩展版本modbusplus(modbus+或者mb+),不过此协定是modicon专有的,和modbus不同。

它需要一个专门的协处理器来处理类似hdlc的高速令牌旋转。

它使用1mbit/s的双绞线,并且每个节点都有转换隔离装置,是一种采用转换/边缘触发而不是电压/水平触发的装置。

连接modbusplus到计算机需要特别的接口,通常是支持isa(sa85),pci或者pcmcia总线的板卡。

  modbus协议是一个master/slave架构的协议。

有一个节点是master节点,其他使用modbus协议参与通信的节点是slave节点。

每一个slave设备都有一个唯一的地址。

在串行和mb+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个modbus命令,但是通常也只有一个主节点设备启动指令)。

  一个modbus命令包含了打算执行的设备的modbus地址。

所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会执行,不过不回应指令)。

所有的modbus命令包含了检查码,以确定到达的命令没有被破坏。

基本的modbus命令能指令一个Rtu改变

  篇二:

modbus_Rtu协议详解

  modbus_Rtu通讯规约

  modbus_Rtu通讯规约(本协议采用主从问答方式)

  pdm系列仪表/变送器:

pdm系列仪表/变送器采用全新的设计,革命性地改变了传统电表的概念;具有多功能、高精度、数字式、可编程、结构紧凑、多画面显示的特点,它可以满足电力工业未来对电表的需求。

  modbus通讯协议:

modbus通讯规约允许pdm系列仪表/变送器与施耐德、西门子、ab、ge等多个国际著名品牌的可编程顺序控制器(plc)、Rtu、scada系统、dcs或与第三方具有modbus兼容的监控系统之间进行信息交换和数据传送。

  pdm系列仪表/变送器只要简单地增加一套基于计算机(或工控机)的监控软件(如:

组态王、intouch、Fix、synall等)就可以构成一套电力监控系统。

  广泛的系统集成:

pdm系列仪表/变送器提供了标准的Rs-485/422通讯接口及modbus通讯协议,这个通讯协议已广泛被国内外电力行业及工控行业作为系统集成的标准。

  通讯数据的类型及格式:

信息传输为异步方式,并以字节为单位。

在主站和从站之间传递的通讯信息是11位的字格式:

  字格式(串行数据)11位二进制

  起始位1位

  数据位8位

  奇偶校验位1位:

有奇偶校验位/无:

无奇偶校验位

  停止位1位:

有奇偶校验位/2位:

无奇偶校验位

  ●通讯数据(信息帧)格式

  数据格式:

地址码功能码数据区错误校检

  数据长度:

1字节1字节n字节16位cRc码(冗余循环码)★注:

1、1个字节由8位二进制数组成(既8bit)。

  2、modbus是modicon公司的注册商标。

  3、“从机”在本文件中既为pdm。

  一、通讯信息传输过程:

  当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果cRc校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。

返回的信息中包括地址码、功能码、执行后的数据以及cRc校验码。

如果cRc校验出错就不返回任何信息。

  1.1地址码:

  地址码是每次通讯信息帧的第一字节(8位),从0到255。

这个字节表明由用户设置地址的从机将接收由主机发送来的信息。

每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。

当从机回送信息时,回送数据均以各自的地址码开始。

主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。

相应的地址码表明该信息来自于何处。

  1.2功能码:

  是每次通讯信息帧传送的第二个字节。

modbus通讯规约可定义的功能码为1到127。

pdm系列仪表/变送器仅用到其中的一部分功能码。

作为主机请求发送,通过功能码告诉从机应执行什么动作。

作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。

  表8.1modbus部分功能码

  功能码定义操作(二进制)

  02读开关量输入读取一路或多路开关量状态输入数据

  01读开关量输出读取一路或多路开关量输出状态数据

  03读寄存器数据读取一个或多个寄存器的数据

  05写开关量输出控制一路继电器“合/分”输出

  06写单路寄存器把一组二进制数据写入单个寄存器

  10写多路寄存器把多组二进制数据写入多个寄存器

  1.3数据区:

  数据区包括需要由从机返送何种信息或执行什么动作。

这些信息可以是数据(如:

开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。

例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。

对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。

  pdm系列仪表/变送器采用modbus通讯规约,主机(plc、Rtu、pc机、dcs等)利用通讯命令(功能码03),可以任意读取其数据寄存器(其数据信息表详见附录)。

pdm系列仪表/变送器的数据寄存器存储的电量多达几百个(如:

电流、电压、功率、0~31次谐波分量等),并且都是16位(2字节)的二进制数据,并且高位在前;一次最多可读取寄存器数(既各种电量的数量)是50个。

  pdm响应的命令格式是从机地址、功能码、数据区及cRc码。

数据区的数据都是两个字节,并且高位在前(电能量除外)。

  注:

1、pdm-820ac/acm/acR、pdm-800ac/acm具有“03”、“06”、“10”功能码;

  2、如果pdm采用modbus  

ascii通讯协议,其通讯数据格式为;7个数据位,1个停止位,偶校验。

  二、modbus功能码简介

  2.1功能码“02”:

读1路或多路开关量状态输入

  例如:

主机要读取地址为01,开关量di1—di4的输入状态。

  从机(pdm)数据寄存器的地址和数据为:

  起始位地址di寄存器数据(16进制)备注00000bdi1/di2/di4状态为“1”,di3状态为“0”

  主机发送的报文格式:

  主机发送字节数发送的信息备注

  从机地址101发送至地址为01的从机

  功能码102读开关量输入状态

  起始bit位20000起始bit位地址为0000

  读数据长度20004读取4路开关量输入状态位

  cRc码279c9由主机计算得到cRc码

  从机(pdm)响应返回的报文格式:

  从机响应字节数返回的信息备注

  从机地址101来自从机01

  功能码102读开关量输入状态

  数据长度1011个字节(8个bit位)

  di状态数据10bdi寄存器内容

  cRc码2e04F由从机计算得到cRc码

  2.2功能码“01”:

读1路或多路开关量输出状态

  例如:

主机要读取地址为01,开关量do1,do2的输出状态。

  从机(pdm)数据寄存器的地址和数据为:

  起始位地址do寄存器数据(16进制)备注

  000002do2输出状态为“1”,do1输出状态为“0”主机发送的报文格式:

  主机发送字节数发送的信息备注

  从机地址101发送至地址为01的从机

  功能码101读开关量输出状态

  起始bit位20000起始bit位地址为0000

  读数据长度20002读取2路继电器输出状态位

  cRc码2bdcb由主机计算得到cRc码

  从机(pdm)响应返回的报文格式:

  从机响应字节数返回的信息备注

  从机地址101来自从机01

  功能码101读开关量输出状态

  数据长度1011个字节(8个bit位)

  do状态数据102do寄存器内容

  cRc码2d049由从机计算得到cRc码

  2.3功能码“03”:

读多路寄存器输入

  例如:

主机要读取地址为01,起始地址为0116的3个从机寄存器数据。

从机(pdm)数据寄存器的地址和数据为:

  寄存器地址寄存器数据(16进制)对应pdm电量

  01161784ua

  01171780ub

  0118178auc

  主机发送的报文格式:

  主机发送字节数发送的信息备注

  从机地址101发送至地址为01的从机

  功能码103读取寄存器

  起始地址20xx6起始地址为0116

  数据长度30003读取3个寄存器(共6个字节)

  cRc码2e5F3由主机计算得到cRc码

  从机(pdm)响应返回的报文格式:

  从机响应字节数返回的信息备注

  从机地址101来自从机01

  功能码103读取寄存器

  读取字1063个寄存器共6个字节

  寄存器数据121784地址为0116内存的内容

  寄存器数据221780地址为0117内存的内容

  寄存器数据32178a地址为0118内存的内容

  cRc码25847由从机计算得到cRc码

  2.4功能码“05”:

写1路开关量输出(“遥控”)

  例1:

开关量输出点do1,其当前状态为“分”,主机要控制该路继电器“合”。

控制命令为:

  “FF00”为控制继电器“合”;

  “0000”为控制继电器“分”;

  主机发送的报文格式:

  主机发送字节数发送的信息备注

  从机地址101发送至地址为01的从机

  功能码105写开关量输出状态

  输出bit位20000对应输出继电器bit位(do1)

  控制命令2FF00控制该路继电器输出为“合”状态位

  cRc码28c3a由主机计算得到cRc码

  从机(pdm)响应返回的报文格式:

  与主机发送的报文格式及数据内容完全相同。

  例2:

开关量输出点do2,其当前状态为“合”,主机要控制该路继电器“分”。

主机发送的报文格式

  主机发送字节数发送的信息备注

  从机地址101发送至地址为01的从机

  功能码105写开关量输出状态

  篇三:

modbusRtu通讯协议

  要实现modbusRtu通信,

  一、需要step7-micro/win32V3.2以上版本的编程软件,而且须安装step7-micro/win32V3.2instructionlibrary(指令库)。

modbusRtu功能是通过指令库中预先编好的程序功能块实现的。

modbusRtu从站指令库只支持cpu上的通信0口(port0)基本步骤:

  1.检查micro/win的软件版本,应当是step7-micro/winV3.2以上版本。

  2.检查micro/win的指令树中是否存在modbusRtu从站指令库(图1),库中应当

  包括mbus_init和mbus_slaVe两个子程序。

  如果没有,须安装micro/win32V3.2的instructionlibrary(指令库)软件包;1.时使用sm0.1调用子程序mbus_init进行初始化,使用sm0.0调用

  mbus_slaVe,并指定相应参数。

  关于参数的详细说明,可在子程序的局部变量表中找到;调用modbusRtu通信指令库图中参数意义如下:

  a.模式选择:

启动/停止modbus,1=启动;0=停止

  b.从站地址:

modbus从站地址,取值1~247

  c.波特率:

可选1200,2400,4800,9600,19200,38400,57600,115200

  d.奇偶校验:

0=无校验;1=奇校验;2=偶校验

  e.延时:

附加字符间延时,缺省值为0

  f.最大i/q位:

参与通信的最大i/o点数,s7-200的i/o映像区为128/128,

  缺省值为128

  g.最大ai字数:

参与通信的最大ai通道数,可为16或32

  h.最大保持寄存器区:

参与通信的V存储区字(Vw)

  i.保持寄存器区起始地址:

以&Vbx指定(间接寻址方式)

  j.初始化完成标志:

成功初始化后置1

  k.初始化错误代码

  l.modbus执行:

通信中时置1,无modbus通信活动时为0。

  m.错误代码:

0=无错误

  2.在cpu的V数据区中分配库指令数据区(librarymemory);

  3.如有必要,使用主站软件测试。

  注意:

由子程序参数holdstart和maxhold指定的保持寄存器区,是在s7-200cpu的V数据存储区中分配,

  此数据区不能和库指令数据区有任何重叠,否则在运行时会产生错误,不能正常通信。

  注意modbus中的保持寄存器区按“字”寻址,即maxhold规定的是Vw而不是Vb的个数。

  在图2的例子中,规定了modbus保持寄存器区从Vb0开始(holdstart=Vb0),并且保持寄存器为1000个字(maxhold=1000),

  因保持寄存器以字(两个字节)为单位,实际上这个通信缓冲区占用了Vb0~Vb1999共2000个字节。

  因此分配库指令保留数据区时至少要从Vb2000开始。

当然保持区不一定要从Vb0开始。

  注意:

你选用的cpu的V存储区大小!

cpu型号不同V数据存储区大小不同。

应根据需要选择modbus保持寄存器区域的大小。

  包含modbusRtu从站指令库的编译、下载到cpu中后,在编程计算机(pg/pc)上运行一些modbus

  测试软件可以检验s7-200的modbusRtu通信是否正常,这对查找故障点很有用。

  测试软件通过计算机串口(Rs-232)和pc/ppi电缆连接cpu。

如果必要,须将pc/ppi电缆设置在自由口通信方式。

  可到一些软件下载网站寻找类似软件,如modscan32等。

  二、pc机上mscomm控件的串行通信

  要完成Vb与

  plc等设备的串行通信要用到

  mscomm控件,

  在此有必要对该控件作较详细的说明。

mscomm是一个非标准控件,需要要手动添加许多项目,其步骤如下。

1)选择菜单的【工程】2)选择【部件】#p#分页标题#e#3)在弹出的对话框中做如图7的选择。

  图7对话框界面

  4)如图8所示,在部件选项卡就会出现mscomm控件。

  图8mscomm控件

  5)基本属性

  三、modbusascii(16进制码都要转换成ascii才能发送)

  modbus分为ascii和Rtu两种,ascii采用的格式和校验相对简单,本文采用ascii格式,并仅对使用的功能码进行说明,更多的信息,请参看协议的详细说明。

  1)通信格式

  lRc算法:

adRh+cmdh+datah,然后取2的补码。

  4.2Vb与plc通信的实现

  以下举例说明现场设备与plc通信的实现。

  1)控制要求:

控制plc的起动、停止,并显示运行状态(绿色为运行,红色为停止);能够用交替型按钮控制y0,y1,并用指示灯显示y0,y1状态(绿色为运行,红色为停止);能够对d256,d512两个寄存器进行数值写入的操作。

  2)实现思路:

plc起动停止的标志位为m1072,查dVp协议,知道地址为h0c30,按功能码01操作;同样y0,y1的地址分别为h0500,h0501。

写入FF00为on,0000为oFF,按功能码05操作;d256,d512地址分别为h1100,h1200,按功能码06操作即可。

3)Vb接口的设计如图10所示。

  图10监控程序界面

  用按钮控制plc的起动停止,y0、y1的on/oFF及d256、d512写完数据的发送;用shape组件做指示灯,表示plc的运行状态和y的状态;用timer组件不停的读取m1072的状态,以判断plc的运行情况;用mscomm控件实现pc与plc的通信。

  4)编程实现的代码构成

(1)lRc算法校验的实现

  publicFunctionlRc(strasstring)asstringc=0

  l=len(str)Forc=c+1tol

  c_data=mid$(str,c,2)

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2