Modbus协议样本模板.docx
《Modbus协议样本模板.docx》由会员分享,可在线阅读,更多相关《Modbus协议样本模板.docx(28页珍藏版)》请在冰豆网上搜索。
Modbus协议样本模板
摘要
工业控制已从单机控制走向集中监控、集散控制,现在已进入网络时代,工业控制器连网也为网络管理提供了方便。
Modbus就是工业控制器网络协议中一个。
Modbus协议是应用于电子控制器上一个通用语言。
经过此协议,控制器相互之间、控制器经由网络(比如以太网)和其它设备之间能够通信。
它已经成为一通用工业标准。
有了它,不一样厂商生产控制设备能够连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用消息结构,而不管它们是经过何种网络进行通信。
它描述了一控制器请求访问其它设备过程,假如回应来自其它设备请求,以及怎样侦测错误并统计。
它制订了消息域格局和内容公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们设备地址,识别按地址发来消息,决定要产生何种行动。
假如需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议消息转换为在此网络上使用帧或包结构。
这种转换也扩展了依据具体网络处理节地址、路由路径及错误检测方法。
Modbus通信协议作为全部Mdicon可编程控制器普遍采取工业通信协议,含有标准开放、价格低廉优点。
现在,该协议已经作为现场总线一个,成为智能仪表、总线控制等领域实际上行业标准之一。
关键词:
Modbus协议;串行通信;LRC校验;CRC校验
第1章概论
Modbus协议是应用于电子控制器上一个通用语言。
它是Modicon企业于1978年发明一个用于电子控制器进行控制和通讯通讯协议。
经过此协议,控制器之间、控制器经由网络(比如以太网)和其它设备之间能够通信。
在进入网络时代今天,工业控制器连网也为网络管理提供了方便。
它开放性、可扩充性和标准化使它成为一个通用工业标准。
有了它,不一样厂商生产控制设备能够简单可靠地连成工业网络,进行系统集中监控,从而使它成为最流行协议之一。
ModBus能够应用在支持ModBus协议PLC和PLC之间、PLC和个人计算机之间、计算机和计算机之间、Modbus可编程控制器之间可相互通讯,也可与不一样网络上其她设备进行通讯,支撑网络有ModiconModbus和Modbus+工业网络。
网络信息存取可由控制器内置端口,网络适配器以及Modicon提供模块选件和网关等设备实现,对OEM(机械设备制造商)来说,Modicon可为合作伙伴提供现有程序,可使Modbus+网络紧密地集成到她们产品设计中去。
Modicon多种控制器使用公共语言被称为Modbus协议,该协议定义了控制器能识别和使用信息结构。
当在Modbus网络上进行通讯时,协议能使每一台控制器知道它本身设备地址,并识别对它寻址数据,决定应起作用类型,取出包含在信息中数据和资料等,控制器也可组织回复信息,并使用Modbus协议将此信息传送出去。
在其她网络上使用时,数据包和数据帧中也包含着Modbus协议。
如,Modbus+或MAP网络控制器中有对应应用程序库和驱动程序,实现嵌入式Modbus协议信息与此网络中用子节点设备间通讯特殊信息帧数据转换。
该转换也可扩展,处理节点地址,路由,和每一个特殊网络错误检验方法。
如包含在Modbus协议中设备地址,在信息发送前就转换成节点地址,错误检验区也用于数据包,与每个网络协议一致,最终一点是需用Modbus协议,写入嵌入信息,定义应处理动作。
图1说明了采取不一样通讯技术多层网络中设备互连方法。
在信息交换中,嵌入到每个网络数据包中Modbus协议,提供了设备间能够交换数据公共语言。
4个Modus设备或网络
编程器
编程器
图1:
Modbus协议应用示意图
Modbus上数据传输
Modicon控制器上标准Modbus端口是使用一个RS-232兼容串行接口,定义了连接器,接线电缆,信号等级,传输波特率,和奇偶校验,控制器可直接或经过调制解调器(以后简称Modems)接入总线(网络)。
控制器通讯使用主从技术,即主机能起动数据传输,称查询。
而其它设备(从机)应返回对查询作出响应,或处理查询所要求动作。
典应主机设备应包含主处理器和编程器。
典应从机包含可编程控制器。
主机可对各从机寻址,发出广播信息,从机返回信息作为对查询响应。
从机对于主机广播查询,无响应返回Modbus协议报据设备地址,请求功效代码,发送数据,错误校验码,建立了主机查询格式,从机响应信息也用Modbus协议组织,它包含确定动作代码,返回数据和错误校验码。
若在接收信息时出现一个错误或从机不能实施要求动作时,从机会组织一个错误信息。
并向主机发送作为响应。
在其它总线上传输数据。
除标准Modbus功效外,有些Modcon控制器内置端口或总线适配器,在Modbus+总线上实现通讯或使用网络适配器,在MAP网络上通讯。
在这些总线上,控制器间采取对等技术进行通讯,即任意一个控制器可向其它控制器开启数据传送。
所以,一台控制器既可作为从机,也可作为主机,常提供多重内部通道,许可并列处理主机和从机传输数据,在信息级,尽管网络通讯方法是对等,但Modbus协议仍采取主从方法,若一台控制器作为主机设备发送一个信息,则可从一台从机设备返回一个响应,类似,当一台控制器接收信息时,它就组织一个从机设备响应信息,并返回至原发送信息控制器。
8位
数据字节
8位
数据字节
错误校验
功效代码
设备地址
功效代码
设备地址
主机查询信息
查询响应周期:
错误校验
从机响应信息
图2:
主从查询响应周期
查询中功效代码为被寻址从机设备应实施动作类型。
数据字节中包含从机须实施功效各附加信息,如功效代码03将查询从机,并读保持寄存器。
并用寄存器内容作响应。
该数据区必需含有告之从机读取寄存器起始地址及数量,错误校验区部分信息,为从机提供一个校验方法,以确保信息内容完整性。
从机正常响应时,响应功效码是查询功效码应答,数据字节包含从机采集数据,如寄存器值或状态。
如出现错误,则修改功效码,指明为错误响应。
并在数据字节中含有一个代码,来说明错误,错误检验区许可主机确定有效信息内容。
第2章Modbus协议两种传输模式
2.1ASCII与RTU模式
控制器可使用ASCII或RTU通讯模式,在标准Modbus上通讯。
在配置每台控制器时,用户须选择通讯模式以及串行口通讯参数。
(波特率,奇偶校验等),在Modbus总线上全部设备应含有相同通讯模式和串行通讯参数。
选择ASCII或RTU模式用于标准Modbus总线。
它定义了总线上串行传输信息区“位”含义,决定信息打包及解码方法。
如在MAP和Modbus+总线上时,Modbus信息以帧方法出现,并与串行传输无关,如请求读保持寄存器能够在Modbus+上两个控制器之间处理,而与使用控制器Modbus端口无关。
2.1.1ASCII模式
当控制器以ASCII模式在Modbus总线上进行通讯时,一个信息中每8位字节作为2个ASCII字符传输,这种模式关键优点是许可字符之间时间间隔长达IS,也不会出现错误。
ASCII码每一个字节格式:
编码系统:
16进制,ASCII字符0-9,A-F数据位:
1起始位7位数据,低位先送奇/偶校验时1位;无奇偶校验时0位
(LRC)1位带校验1停止位;无校验2止位
错误校验区:
纵向冗余校验
2.1.2ASCIIRTU模式
控制器以RTU模式在Modbus总线上进行通讯时,信息中每8位字节分成2个4位16进制字符,该模式关键优点是在相同波特率下其传输字符密度高于ASCII模式,每个信息必需连续传输。
RTU模式中每个字节格式:
编码系统:
8位二进制,十六进制0-9,A-F
数据位:
1起始位8位数据,低位先送奇/偶校验时1位;无奇偶校验时0位停止位1位(带校验);停止位2位(无校验)
带校验时1位停止位;无校验时2位停止位
错误校验区:
循环冗余校验(CRC)2.2Modbus信息帧
何论是ASCII模式还是RTU模式,Modbus信息以帧方法传输,每帧有确定起始点和结束点,使接收设备在信息起点开始读地址,并确定要寻址设备(广播时对全部设备),以及信息传输结束时间。
可检测部分信息,错误可作为一个结果设定。
对MAP或Modbus+协议可对信息帧起始和结束点标识进行处理,也可管剪发送至目地信息,此时,信息传输中Modbus数据帧内目地址已无关紧要,因为Modbus+地址已由发送者或它网络适配器把它转换成网络节点地址和路由。
2.2.1ASCII帧
在ASCII模式中,以(:
)号(ASCII3AH)表示信息开始,以回撤一换行键(CRLF)(ASCIIOD和OAH)表示信息结束。
对其它区,许可发送字符为16进制字符0-9,A-F。
网络中设备连续检测并接收一个冒号(:
)时,每台设备对地址区解码,找出要寻址设备。
字符之间最大间隔为1S,若大于1S,则接收设备认为出现了一个错误。
经典信息帧见下表
开始
地址
功效
数据
纵向冗余检验
结束
1字符
:
2字符
2字符
n字符
2字符
2字符
图3ASCII信息帧例外:
对于584和984A/B/X控制器,一个ASCII信息可在LRC区后正常终止,而不需发送CRLF字符,此时出现>IS时间间隔,控制器也将认为是正常中止。
2.2.2RTU帧
RTU模式中,信息开始最少需要有3.5个字符静止时间,依据使用波特率,很轻易计算这个静止时间(以下图中T1-T2-T3-T4)。
接着,第一个区数据为设备地址。
各个区许可发送字符均为16进制0-9,A-F。
网络上设备连续监测网络上信息,包含静止时间。
当接收第一个地址数据时,每台设备立刻对它解码,以决定是否是自己地址。
发送完最终一个字符号后,也有一个3.5个字符静止时间,然后才能发送一个新信息。
整个信息必需连续发送。
假如在发送帧信息期间,出现大于1.5个字符静止时间时,则接收设备刷新不完整信息,并假设下一个地址数据。
一样一个信息后,立刻发送一个新信息,(若无3。
5个字符静止时间)这将会产生一个错误。
是因为合并信息CRC校验码无效而产生错误。
开始
地址
功效
数据
校验
终止
T1-T2-T3-T4
8B位S
8B位S
N×8B位S
16B位S
T1-T2-T3T-4
图4RTU信息帧
2.3Modbus信息帧设置
2.3.1地址设置
信息地址包含2个字符(ASCII)或8位(RTU),有效从机设备地址范围0-247,(十进制),各从机设备寻址范围为1-247。
主机把从机地址放入信息帧地址区,并向从机寻址。
从机响应时,把自己地址放入响应信息地址区,让主机识别已作出响应从机地址。
地址0为于广播地址,全部从机均能识别。
当Modbus协议用于高级网络时,则不许可广播或其它方法替换。
如Modbus+使用令牌循环,自动更新共享数据库。
2.3.2功效码设置
信息帧功效代码包含字符(ASCII)或8位(RTU)。
有效码范围1-225(十进制),其中有些代码适用全部型号Modicon控制器,而有些代码仅适适用于一些型号控制器。
还有部分代码留作未来使用,相关功效替换码设置将在第2章说明。
当主机向从句发送信息时,功效代码向从机说明应实施动作。
如读一组离散式线圈或输入信号ON/OFF状态,读一组寄存器数据,读从机诊疗状态,写线圈(或寄存器),许可下截、统计、确定从机内程序等。
当从机响应主机时,功效代码可说明从机正常响应或出现错误(即不正常响应),正常响应时,从句简单返回原始功效代码;不正常响应时,从机返回与原始代码相等效一个码,并把最高有效位设定为“1”。
如,主机要求从机读一组保持寄存器时,则发送信息功效码为:
00000011(十六进制03)
若从机正确接收请求动作信息后,则返回相同代码值作为正常响应。
发觉错时,则返回一个不正常响信息:
10000011(十六进制83)
从机对功效代码作为了修改,另外,还把一个特殊码放入响应信息数据区中,告诉主机出现错误类型和不正常响应原因。
主机设备应用程序负责处理不正常响应,经典处理过程是主机把对信息测试和诊疗送给从机,并通知操作者。
数据区内容
数据区有2个16进制数据位,数据范围为00-FF(16进制),依据网络串行传输方法,数据区可由一对ASCII字符组成或由一个RTU字符组成。
主机向从机设备发送信息数据中包含了从机实施主机功效代码中要求请求动作,如离散量寄存器地址,处理对象数目,以及实际数据字节数等。
举例说明,若主机请求从机读一组寄存器(功效代码03),该数据要求了寄存器起始地址,以及寄存器数量。
又如,主机要在一从机中写一组寄存器,(则功效代码为10H)。
该数据区要求了要写入寄存区起始地址,寄存器数量,数据字节数,以及要写入到寄存器数据。
若无错误出现,从机向主机响应信息中包含了请求数据,若有错误出现,则数据中有一个不正常代码,使主机能判定并作出下一步动作。
数据区长度可为“零”以表示某类信息,如,主机要求-从机响应它通讯事件统计(功效代码OBH)。
此时,从机不需要其她附加信息,功效代码只要求了该动作。
2.3.3串行传送信息
在标准Modbus上传送信息中,每个字符或字节,按由左向右次序传送:
最低有效位:
(LSB)最高有效位:
(MSB)ASCII数据帧位序:
带奇偶校验
无奇偶校验
图5ASCII位序2.3.4错误校验方法
标准Modbus串行通讯网络采取两种错误校验方法,奇偶校验(奇或偶)可用于校验每一个字符,信息帧校验(LRC或CRC)适用整个信息校验,字符校验和信息帧校验均由主机设备产生,并在传送前加到信息中去。
从机设备在接收信息过程中校验每个字符和整个信息。
主机可由用户设置一个预定时间间隔,确定是否放弃传送信息。
该间隔应有足够时间来满足从机正常响应。
若主机检测到传输错误时,则传输信息无效。
从机不再向主机返回响应信息。
此时,主机会产生一个超时信息,并许可主机程序处理该错误信号。
注意:
主机向实际并未存在从机发送信息时也会引发超时犯错信号。
在MAP或Modbus+等其它网骆上使用时,采取比Modbus更高一级数据帧校验方法。
在这些网络中,不再利用Modbus中LRC或CRC校验方法。
当出现发送错误时,网络中通讯协议通知发送设备有错误出现,并许可依据设置情况,重试或放弃信息发送。
若信息已发送,但从机设备未作响应,则主机经过程序检验后发出一个超时错误。
a.奇偶校验
用户可设置奇偶校验或无校验,以此决定每个字符发送时奇偶校验位状态。
何论是奇或偶校验,它均会计算每个字符数据中值为“1”位数,ASCII方法为位数据;RTU方法为8位数据。
并依据“1”位数值(奇数或偶数)来设定为“0”或“1”
如一个RTU数据帧中8位数据位为:
11000101
在该帧中,值为“1”总位数为4,即偶数。
如采取奇校验方法时,则“1”总位数为奇数,即5。
发送信息时,计算奇偶位,并加到数据帧中,接收设备统计位值为“1”数量,若与该设备要求不一致时产生一个错误。
在Modbus总线上全部设备必需采取相同奇偶校验方法。
注意:
奇偶校验只能检测到数据帧在传输过程中丢失奇数“位”时才产生错误。
如采取奇数校验方法时,一个包含3个“1”位数据丢失2个“1”位时,其结果仍然是奇数。
若无奇偶校验方法时,传输中不作实际校验,应附加一个停止位。
b.LRC校验
ASCII方法时,数据中包含错误校验码,采取LRC校验方法时,LRC校验信息以冒号“:
”开始,以CRLF字符作为结束。
它忽略了单个字符数据奇偶校验方法。
LRC校验码为1个字节,8位二进制值,由发送设备计算LRC值。
接收设备在接收信息时计算LRC校验码。
并与收到LRC实际值进行比较,若二者不一致,亦产生一个错误。
在梯形图中,CKSM函数可计算数据信息中LRC校验。
用于主计算机时请查阅附录C中一个实例,它具体说明LRC校验过程。
错误校验方法c.CRC校验
RTU方法时,采取CRC方法计算错误校验码,CRC校验传送全部数据。
它忽略信息中单个字符数据奇偶校验方法。
CRC码为2个字节,16位二进制值。
由发送设备计算CRC值,并把它附到信息中去。
接收设备在接收信息过程中再次计算CRC值并与CRC实际值进行比较,若二者不一致,亦产生一个错误,校验开始时,把16位寄存器各位都置为“1”,然后把信息中相邻2个8位字节数据放到目前寄存器中处理,只有每个字符8位数据用于CRC处理。
起始位,停止位和校验位不参与CRC计算。
CRC校验时,每个8位数据与该寄存器内容进行异或运算,然后向最低有效位(LSB)方向移位,用零填入最高有效位(MSB)后,再对LSB检验,若LSB=1,则寄存器与预置固定值异或,若LSB=0,不作异或运算。
反复上述处理过程,直至移位8次,最终一次(第8次)移位后,下一个8位字节数据与寄存器目前值异或,再反复上述过程。
全部处理完信息中数据字节后,最终得到寄存器值为CRC值。
CRC值附加到信息时,低位在先,高位在后。
在梯形图中,CKSM函数计算信息中CRC值。
用于主计算机时,可查阅附录C中一个实例,它具体说明了CRC校验。
第3章ModBus协议消息帧
两种传输模式中(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点帧,这就许可接收设备在消息起始处开始工作,读地址分配信息,判定哪一个设备被选中(广播方法则传给全部设备),判知何时信息已完成。
部分消息也能侦测到而且错误能设置为返回结果。
3.1ASCII模式帧
当控制器设为在ModBus网络上以ASCII模式通信,在消息中每个8Bit字节都作为两个ASCII字符发送。
这种方法关键优点是字符发送时间间隔可达成1秒而不产生错误。
表3-1
信息帧结构:
地址功效代码数据数量数据1...数据nLRC高字节LRC低字节回车换行。
如表3-1所表示,使用ASCII模式,消息以冒号(:
)字符(ASCII码3AH)作为起始位,以回车换行符(ASCII码0DH,0AH)作为结束符。
传输过程中,网络上设备不停侦测“:
”字符,当有一个冒号接收到时,每个设备就解码下个位地址域,来判定是否发给自己。
与地址域一致设备继续接收其它域,直至接收到回车换行符。
除起始位和结束符外,其它地址域能够使用传输字符是十六进制0…9,A…F,当然也要用ASCII码表示字符。
3.2RTU模式消息帧
当控制器设为RTU模式时,消息帧中每个8Bit字节包含两个4Bit十六进制字符。
这种模式与ASCII模式相比在一样波特率下,可比ASCII模式传送更多数据。
表3-2RTU模式消息帧
地址功效代码数据数量数据1...数据nCRC高字节CRC低字节
表3-2RTU模式消息帧
该模式下消息发送最少要以3.5个字符时间停顿间隔开始。
传输过程中,网络设备不停侦测网络总线,包含停顿间隔时间内。
当第一个域(地址域)接收到,对应设备就对接下来传输字符进行解码,一旦有最少3.5个字符时间停顿就表示该消息结束。
在RTU模式中整个消息帧必需作为一连续流转输,假如在帧完成之前有超出1.5个字符时间停顿时间,接收设备将刷新不完整消息并假定下一字节是一个新消息地址域。
一样地,假如一个新消息在小于3.5个字符时间内接着前个消息开始,接收设备将认为它是前一消息延续。
假如在传输过程中有以上两种情况发生话,肯定会造成CRC校验产生一个错误消息,反馈给发送方设备。
在其它网络上(象MAP和ModbusPlus)Modbus消息被转成与串行传输无关帧。
3.3地址域
消息帧地址域包含两个字符(ASCII)或8Bit(RTU)。
可能从设备地址是0...247(十进制)。
单个设备地址范围是1...247。
主设备经过将要联络从设备地址放入消息中地址域来选通从设备。
当从设备发送回应消息时,它把自己地址放入回应地址域中,方便主设备知道是哪一个设备作出回应。
地址0是用作广播地址,以使全部从设备都能认识。
当Modbus协议用于更高水准网络,广播可能不许可或以其它方法替换。
消息帧中功效代码域包含了两个字符(ASCII)或8Bits(RTU)。
可能代码范围是十进制1...255。
当然,有些代码是适适用于全部控制器,有此是应用于某种控制器,还有些保留以备后用。
当消息从主设备发往从设备时,功效代码域将告之从设备需要实施哪些行为。
比如去读取输入开关状态,读一组寄存器数据内容,读从设备诊疗状态,许可调入、统计、校验在从设备中程序等。
当从设备回应时,它使用功效代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应)。
对正常回应,从设备仅回应对应功效代码。
对异议回应,从设备返回一等同于正常代码代码,但最关键位置为逻辑1。
比如:
一从主设备发往从设备消息要求读一组保持寄存器,将产生以下功效代码:
00000011(十六进制03H)
对正常回应,从设备仅回应一样功效代码。
对异议回应,它返回:
10000011(十六进制83H)
除功效代码因异议错误作了修改外,从设备将一独特代码放到回应消息数据域中,这能告诉主设备发生了什么错误。
主设备应用程序得到异议回应后,经典处理过程是重发消息,或者诊疗发给从设备消息并汇报给操作员。
3.5数据域
数据域是由两个十六进制数集合组成,范围00...FF。
依据网络传输模式,这能够是由一对ASCII字符组成或由一RTU字符组成。
从主设备发给从设备消息数据域包含附加信息:
从设备必需用于进行实施由功效代码所定义所为。
这包含了象不连续寄存器地址,要处理项数目,域中实际数据字节数。
比如,假如主设备需要从设备读取一组保持寄存器(功效代码03),数据域指定了起始寄存器以及要读寄存器数量。
假如主设备写一组从设备寄存器(功效代码10十六进制),数据域则指明了要写起始寄存器以及要写寄存器数量,数据域数据字节数,要写入寄存器数据。
假如没有错误发生,从从设备返回数据域包含请求数据。
假如有错误发生,此域包含一异议代码,主设备应用程序能够用来判定采取下一步行动。
在某种消息中数据域能够是不存在(0长度)。
比如,主设备要求从设备回应通信事件统计(功效代码0B十六进制),从设备不需任何附加信息。
3.6错误检测域
标准Modbus网络有两种错误检测方法。
错误检测域内容视所选检测方法而定。
ASCII检测方法:
当选择ASCII模式作字符帧,错误检测域包含两个ASCII字符。
这是使用LRC(纵向冗长检测)方法对消息内容计算得出,不包含开始冒号符及回车换行符。
LRC字符附加在回车换行符前面。
RTU检测方法:
当选择RTU模式作字符帧,错误检测域包含一16Bits值(用两个8位字符来实现)。
错误检测域内容是经过对消息内容进行循环冗长检测方法得