motobus通信协议.docx
- 文档编号:24370001
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:13
- 大小:24.27KB
motobus通信协议.docx
《motobus通信协议.docx》由会员分享,可在线阅读,更多相关《motobus通信协议.docx(13页珍藏版)》请在冰豆网上搜索。
motobus通信协议
竭诚为您提供优质文档/双击可除
motobus通信协议
篇一:
modbus通讯协议-Rtu
modbus
通讯协议
(Rtu传输模式)
本说明仅做内部参考,详细请参阅英文版本。
第一章modbus协议简介
modbus协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用modbus协议发出。
在其它网络上,包含了modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。
首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。
协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在使它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。
1.1传输方式
传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限规则,以Rtu模式在modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,每个信息必须连续传输下面定义了与modebus协议–Rtu方式相兼容的传输方式。
代码系统
8位二进制,十六进制数0...9,a...F
消息中的每个8位域都是一个两个十六进制字符组成
每个字节的位
1个起始位
8个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个bit(无校验时)
错误检测域
cRc(循环冗长检测)
1
1.2协议
当信息帧到达终端设备时,它通过一个简单的“口”进入寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。
返回的响应数据中包含了以下内容:
终端从机地址(address)、被执行了的命令(Function)、执行命令生成的被请求数据(data)和一个校验码(check)。
发生任何错误都不会有成功的响应。
1.2.1信息帧
图1–1.信息帧格式特注:
modbus信息帧所允许的最大长度为256个字节,即n的范围是大于等于零且小于等于252(n{0,252})。
即,所有的数据一共256个,数据剩下253个。
1.2.2地址(address)域
信息帧地址域(信息地址)在帧的开始部分,由8位组成,有效的从机设备地址范围0-247(十进制),各从机设备的寻址范围为1-247。
主机把从机地址放入信息帧的地址区,并向从机寻址。
从机响应时,把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。
地址0为广播地址,所有从机均能识别。
当modbus协议用于高级网络时,则不允许广播或其它方式替代。
1.2.3功能(Function)域
信息帧功能域代码告诉了被寻址到的终端执行何种功能。
有效码范围1-225(十进制),有些代码是适用于所有控制器,有些适应于某种控制器,还有些保留以备后用。
有关功能代替码的全部内容见附录a。
当主机向从句发送信息时,功能代码向从机说明应执行的动作。
如读一组离散式线圈或输入信号的on/oFF状态,读一组寄存器的数据,读从机的诊断状态,写线圈(或寄存器),允许下截、记录、确认从机内的程序等。
当从机响应主机时,功能代码可说明从机正常响应或出现错误(即不正常响应),正常响应时,从句简单返回原始功能代码;不正常响应时,从机返回与原始代码相等效的一个码,并把最高有效位设定为“1”。
如,主机要求从机读一组保持寄存器时,则发送信息的功能码为:
00000011(十六进制03)
若从机正确接收请求的动作信息后,则返回相同的代码值作为正常响应。
发现错时,则返回一个不正常响信息:
10000011(十六进制83)
从机对功能代码作为了修改,此外,还把一个特殊码放入响应信息的数据区中,告诉主机出现的错误类型和不正常响应的原因,不正常响应见附录b。
主机设备的应用程序负责处理不正常响应,典型处理过程是主机把对信息的测试和诊断送给从机,并通知操作者。
表1–1列出了所有设备常用的功能码、它们的意义及它们的初始功能。
表1–1常用功能码
2
1.2.4数据域数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。
这些数据的内容可能是数值、参考地址或者极限值。
他由数据区有2个16进制的数据位(2的8次方256),数据范围为00-FF(16进制)。
例如:
功能域码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同能力而有所不同。
若无错误出现,从机向主机的响应信息中包含了请求数据,若有错误出现,则数据中有一个不正常代码,使主机能判断并作出下一步的动作。
数据区的长度可为“零”以表示某类信息。
1.2.5错误校验域
该域允许主机和终端检查传输过程中的错误。
有时,由于电噪声和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了16位循环冗余的方法,即cRc校验。
错误检测域包含一16bits值(用两个8位的字符来实现)。
错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。
cRc域附加在消息的最后,添加时先是低字节然后是高字节。
故cRc的高位字节是发送消息的最后一个字节。
1.2.6字符的连续传输
当消息在标准的modbus系列网络传输时,每个字符或字节按由左到右的次序方式发送:
最低有效位(lsb)...最高有效位(msb)。
位的序列是:
有奇偶校验
无奇偶校验
图1–2.位顺序(Rtu)
1.3错误检测
1、奇偶校验
用户可以配置控制器是奇或偶校验,或无校验。
这将决定了每个字符中的奇偶校验位是如何设置的。
3
如果指定了奇或偶校验,“1”的位数将算到每个字符的位数中(ascii模式7个数据位,Rtu中8个数据位)。
例如Rtu字符帧中包含以下8个数据位:
11000101
整个“1”的数目是4个。
如果便用了偶校验,帧的奇偶校验位将是0,便得整个“1”的个数仍是4个。
如果便用了奇校验,帧的奇偶校验位将是1,便得整个“1”的个数是5个。
如果没有指定奇偶校验位,传输时就没有校验位,也不进行校验检测。
代替一附加的停止位填充至要传输的字符帧中。
2、cRc检测
Rtu方式时,采用cRc方法计算错误校验码,cRc校验传送的全部数据。
它忽略信息中单个字符数据的奇偶校验方法。
循环冗余校验(cRc)域占用两个字节,包含了一个16位的二进制值。
cRc值由传送设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算cRc值,然后与接收到的cRc域中的值进行比较,如果这两个值不相等,就发生了错误。
cRc开始时先把寄存器的16位全部置成“1”,然后把相邻2个8位字节的数据放入当前寄存器中,只有每个字符的8位数据用作产生cRc,起始位,停止位和奇偶校验位不加到cRc中。
在生成cRc时,每个8位字节与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(lsb)移出并检测,如果是1,该寄存器就与一个预设的固定值进行一次异或运算,如果最低位为0,不作任何处理。
上述处理重复进行,知道执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器材的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是cRc值。
生成一个cRc的流程为:
1、预置一个16位寄存器为0FFFFh(全1),称之为cRc寄存器。
2、把数据帧中的第一个8位字节与cRc寄存器中的低字节进行异或运算,结果存回cRc
寄存器。
3、将cRc寄存器向右移一位,最高位填以0,最低位移出并检测。
4、如果最低位为0:
重复第3步(下一次移位)。
如果最低位为1:
将cRc寄存器与一个预设的固定值(0a001h)进行异或运算。
5、重复第3步和第4步直到8次移位。
这样处理完了一个完整的八位。
6、重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。
7、最终cRc寄存器得值就是cRc的值。
cRc值附加到信息时,低位在先,高位在后。
查阅附录c中的一个实例,它详细说明了cRc的校验。
第二章modbus数据和控制功能详解
modbus信息中的所有数据地址以零作为基准,各项数据的第一个数据地址的编号为0。
若无特殊说明在此节文中用+进制值表示,图中的数据区则用十六进制表示。
图2--1为一个例子,说明了modbus的查询信息,图2--2为正常响应的例子,这两例子中的数据均是16进制的,也表示了以Rtu方式构成数据帧的方法。
主机查询是读保持寄存器,被请求的从机地址是06,读取的数据来自地址40108保持4
篇二:
modbus_Rtu通讯协议
百特工控
福州福光百特自动化设备有限公司
modbus通讯协议
使用手册
1.Rtu方式通讯协议
1.1.硬件采用Rs-485,主从式半双工通讯,主机呼叫从机地址,从机应答方式通讯。
1.2.数据帧10位,1个起始位,8个数据位,1个停止位,无校验。
波特率:
9600;1920xx84001.3.功能码03h:
读寄存器值
主机发送:
第1字节adR:
从机地址码(=001~254)
第2字节03h:
读寄存器值功能码第3、4字节:
要读的寄存器开始地址要读Fcc下挂仪表,
第5、6字节:
要读的寄存器数量第7、8字节:
从字节1到6的cRc16校验和从机回送:
第1字节adR:
从机地址码(=001~254)
第2字节03h:
返回读功能码
第3字节:
从
4到m(包括4及m)的字节总数第4到m字节:
寄存器数据第m+1、m+2字节:
从字节1到m的cRc16校验和当从机接收错误时,从机回送:
第1字节adR:
从机地址码(=001~254)
第2字节83h:
读寄存器值出错
第3字节信息码:
见信息码表第4、5字节:
从字节1到3的cRc16校验和1.4.功能码06h:
写单个寄存器值
主机发送:
当从机接收正确时,从机回送:
当从机接收错误时,从机回送:
1.5.功能码10h:
连续写多个寄存器值
第1字节adR第2字节86h第3字节错误数息码第4、5
字节
:
从机地址码(=001~254):
写寄存器值出错功能码:
见信息码表
:
从字节1到3的cRc16校验和
当从机接收正确时,从机回送:
当从机接收错误时,从机回送:
第1字节adR第2字节90h第3字节(motobus通信协议)错误信息码第4、5字节
:
:
:
:
从机地址码(=001~254)写寄存器值出错见信息码表
从字节1到3的cRc16校验和
1.8寄存器定义表:
(注:
寄存器地址编码为16进制)
篇三:
modbusRtu通讯协议与modbus通讯协议有什么区别
modbusRtu常见问题汇总
20xx年04月22日10:
57
注:
本资料由网络搜索,答案仅供参考(持续更新中)
点击查看modbusRtu产品详情
1、modbusRtu通讯协议与modbus通讯协议有什么区别?
modbus协议是应用层报文传输协议(osi模型第7层),它定义了一个与通信层无关的协议数据单元(pdu),即pdu=功能码+数据域。
modbus协议能够应用在不同类型的总线或网络。
对应不同的总线或网络,modbus协议引入一些附加域映射成应用数据单元(adu),即adu=附加域+pdu。
目前,modbus有下列三种通信方式:
1.以太网,对应的通信模式是modbustcp。
2.异步串行传输(各种介质如有线Rs-232-/422/485/;光纤、无线等),对应的通信模式是mou或modbusascii。
3.高速令牌传递网络,对应的通信模式是modbusplus。
2、关于modbusRtu通讯协议的提问?
modbus主要由站地址(一个字节)+功能码(一个字节)+首地址(两个字节)+访问字数(两个字节)+校验码(cRc16或lRc两个字节)总共8个字节组成。
其实Vb中编程很简单从组建添加mscomm组建就行了,难的是校验,
3、modbus、rtu、modbusrtu分别是什么?
modbus协议是工控行业的标准协议,前身为莫迪康所写,现已被施奈德收购
而modbus分为两种协议:
即串口协议(modbusrtu)和网口协议(modbustcp)协议,一般的工控机只支持rs232或者Rs485的串口模式,这个时候工控机的协议栈里就只有协议,当他从串口接收到数据时,会直接根据报文中的数据进行控制,如果需要用modbustcp协议进行传输,则需要使用带有网口的plc
具体的帧格式如下
modbusRtu地址域功能码数据差错校验
modbustcp目的地址协议id长度单元号功能码数据
简单的说tcp是由Rtu加工而来的
而Rtu则是另外一种概念,不包含在modbus协议内
是工控行业对监控设备的简称。
4、关于modbus_Rtu协议主机发送的命令的一些问题
01读保持线圈状态(Readcoilstatus)
02读输入线圈状态(Readinputstatus)
03读保持寄存器(Readholdingregister)
04读输入寄存器(Readinputregister)
05写单个线圈(Forcesinglecoil)
06写单个寄存器(presetsingleregister)
15写多个线圈(Forcemultiplecoils)
16写多个寄存器(presetmultipleregisters)
这些都是什么意思
答:
01读取逻辑线圈组状态
02读取离散量线圈组状态
03读取一个或多个保持寄存器的二进制值
04读取一个或多个输入寄存器的二进制值
05改变逻辑线圈状态
06改变单个寄存器的二进制值
15改变多个寄存器的二进制值
16指定多个操持寄存器的二进制值
5、opc转modbusRtu方式我现在有一个opc服务器,里面很多tag,tag是ab里出来的,怎么将tag连到modbus?
profibus、Fielbus、modbus、cc-link等等是各中plc硬件支持的通讯协议,这个是各厂商的硬件属性一样.只是现在计算机组态软件都支持很多种协议的plc.你理解反了.
profibus、Fielbus、modbus、cc-link这些协议,是一种通讯协议,一般不需要你去编程,就好象你使用计算机,你不需要编写ip协议一样,只是要遵循它.
遵循的意思就是,你必须按照该厂家所支持的协议在plc或者dcs硬件组态的时候按照该通讯协议设置硬件.其实这个很简单.这里简单指的是,你学编程,重点是编写执行控制的动作的程序,硬件通讯协议不需要你自己动手写。
6、什么是modbusrtumaster?
就是选Rtu模式,因为modbus分为ascii模式和Rtu模式,maseR就是设置为主站,一般为plc端,变频器设为从站,还要注意主站和从站地址的设置。
7、modbusrtu为什么没有开始和结束标记?
由于modbusrtu帧的每个字节是16进制数,数值范围在00~FF,若像modbusascii那样用02、03表示开始和结束标记,则与数值2、3发生冲突,无法判断其是标记还是数值,无法数据解包。
8、modbustcp到rtu的转换?
请仔细查看帧格式,
modbusRtu地址域功能码数据差错校验
modbustcp目的地址协议id长度单元号功能码数据
写一个tcp转Rtu的程序放到设备里做modbus网桥即可
9、modbusRtu通讯线被烧?
用万用表量一下出来的通讯线,电压不超过5V应该没问题,一般不会烧东西,接的时候区分正和负。
很多产品b是正,量一下看看。
10、触摸屏modbusrtu怎么设置?
一般是通过宏指令自己编程实现,当然也有支持Rtu的,在通讯类型菜单
11、modbusRtu协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数?
浮点数保存的字节格式如下:
地址+0+1+2+3
内容seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm
这里
s代表符号位,1是负,0是正
e偏移127的幂,二进制阶码=(eeeeeeee)-127。
m24位的尾数保存在23位中,只存储23位,最高位固定为1。
此方法用最较少的位数实现了较高的有效位数,提高了精度。
零是一个特定值,幂是0尾数也是0。
浮点数-12.5作为一个十六进制数0xc1480000保存在存储区中,这个值如下:
地址+0+1+2+3
内容0xc10x480x000x00
浮点数和十六进制等效保存值之间的转换相当简单。
下面的例子说明上面的值-12.5如何转换。
浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表
所列的那样分开,例如:
地址+0+1+2+3
格式seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm
二进制11000001010010000000000000000000
十六进制c1480000
从这个例子可以得到下面的信息:
符号位是1表示一个负数幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。
尾数是后面的二进制数10010000000000000000000
在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数点到尾数的开头,得到尾数值如下:
1.10010000000000000000000
接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.因为指数是3,尾数调整如下:
1100.10000000000000000000
结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:
1100表示
(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。
小数点的右边也代表所处位置的2的幂,只是幂是负的。
例如:
.100...表示(1*2^(-1))+(0*2^(-2))+(0*2^(-2))...=0.5。
这些值的和是12.5。
因为设置的符号位表示这数是负的,因此十六进制值0xc1480000表示-12.5。
12、Rs-485的设备,遵守modbus-Rtu协议。
怎样用的电脑读取信息?
用电脑的串口,接个485转换器,接到设备的485接口,再找个串口软件,根据设备资料上的寄存器地
址发送modbus报文,modbus报文通过串口软件发送啊,报文格式:
010300000001840a读寄存器命令。
13、vbmodbus给modscan32rtu发送数据应该怎么写?
确定两个软件哪个是主,哪个是从。
然后再确定通讯协议是Rtu、ascii还是tcp。
如果是tcp,就用socket控件。
Rtu\ascii就用com控件。
然后给对应的口按照协议收发数并解析就可以了。
14、modbusRtu通讯协议与modbus通讯协议有什么区别?
modbus协议包括了modbusRtu
15、modbusrtu通讯协议如何判断超时?
设置一个标志量用来表示是否超时;再用一个定时器,定时时长为发送3.5个字符的时间(当然为了保险时间可以长一些);在定时器中置超时标志;在串口中断中每收到一个字节时定时器清零;主程序中根据超时标志做相应处理。
16、如何理解modbus协议Rtu模式中的1.5和3.5字符间隔?
发送两帧数据之间要有一定的时间间隔,以保证接收方uaRt能够区分。
这个时间间隔在模式中要求是1.5和3.5字符间隔,也即是传输1.5和3.5个字符的时间,它与设置的通信参数有关,计算为:
若串口通信参数设置为(注:
开始位固定为1):
数据位8,奇偶校验位1,停止位1,波特率9600bps,则传输一个字符(即1个字节)的时间为:
(1+8+1+1)/9600=0.00114583s=1.1454583ms
1.5字符间隔=1.5x1.1454583ms=1.71818745ms
3.5字符间隔=3.5x1.1454583ms=4.00910405ms
17、modbusRtu测试软件?
推荐:
modscan32
18、modbusRtu协议,上位机与仪表通信,读写数据都正确,为什么仪表掉电,写入的参数又丢失了?
怎么保存?
两种可能:
如果在仪表上设置参数掉电后都保存不了的话,基本可以确定是仪表问题;
有些仪表写入参数后还需要向固定的寄存器写入确认参数,为了保证写入参数真确,需要检查仪表通信部分说明书。
modbus结论总结
20xx年04月20日10:
22
modbus协议最初由modicon公司开发出来,现在modbus已经是工业领域全球最流行的协议。
支持传统的Rs-232、Rs-422、Rs-485和以太网设备。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
当在网络上通信时,modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成应答并使用modbus协议发送给询问方。
modbus协议包括ascii、Rtu、tcp等,并没有规定物理层。
协议定义了控制器能够
认识和使用的消息结构,而不管它们是经过何种网络进行通信的。
标准的modicon控制器使用Rs232c实现串行的modbus。
modbus的ascii、Rtu协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用maser/slave方式,master端发出数据请求消息,slave端接收到正确消息后就可以发送数据到master端以响应请求;master端也可以直接发消息修改slave端的数据,实现双向读写。
modbus协议需要对数据进行校验,另外,modbus采用主从方式定时收发数据,在实际使用中如果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- motobus 通信协议