MODBUS通讯plc编程方法.docx
- 文档编号:29835966
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:40
- 大小:85.05KB
MODBUS通讯plc编程方法.docx
《MODBUS通讯plc编程方法.docx》由会员分享,可在线阅读,更多相关《MODBUS通讯plc编程方法.docx(40页珍藏版)》请在冰豆网上搜索。
MODBUS通讯plc编程方法
MODBUS通信协议及编程【一】
一、Modbus协议简介
Modbus协议是应用于电子控制器上的一种通用语言。
经过此协议,控制器相互之间、控制器经由网络(比方以太网)和其他设备之间能够通信。
它已经
成为一通用工业标准。
有了它,不同样厂商生产的控制设备能够连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的信息结构,而无论它们是经过何种网络进行通信的。
它描述了一控制器央求接见其他设备的过程,若是回应来自其他设备的央求,以及怎样侦测错误并记录。
它拟定了信息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议定定了每个控制器须要知道它们的
设备地址,鉴识按地址发来的信息,决定要产生何种行动。
若是需要回应,控制
器将生成反响信息并用Modbus协议发出。
在其他网络上,包括了Modbus协
议的信息变换为在此网络上使用的帧或包结构。
这种变换也扩展了依照详尽的网
络解决节地址、路由路径及错误检测的方法。
1、在Modbus网络上转输
标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针
脚、电缆、信号位、传输波特率、奇偶校验。
控制器能直接或经由Modem组网。
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(盘问)。
其他设备(从设备)依照主设备盘问供应的数据作出相应反响。
典型的主设备:
主机和可编程仪表。
典型的从设备:
可编程控制器。
主设备可单独和从设备通信,也能以广播方式和全部从设备通信。
若是单
独通信,从设备返回一信息作为回应,若是是以广播方式盘问的,则不作任何回应。
Modbus协议建立了主设备盘问的格式:
设备(或广播)地址、功能代码、全部要发送的数据、一错误检测域。
从设备回应信息也由Modbus协议组成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
若是在信息接收过程中发生一错误,或从设备不能够执行其命令,从设备将建立一错误信息并把它作为回应发送出去。
2、在其他种类网络上转输
在其他网络上,控制器使用同等技术通信,故任何控制都能初始和其他控
制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
供应的多个内部通道可赞同同时发生的传输进度。
在信息位,Modbus协议仍供应了主—从原则,尽管网络通信方法是“同等”。
若是一控制器发送一信息,它可是作为主设备,并希望从从设备获取回应。
同样,当控制器接收到一信息,它将建立一从设备回应格式并返回给发送的控制器。
3、盘问—回应周期
(1)盘问
盘问信息中的功能代码告之被选中的从设备要执行何种功能。
数据段包括了从设备要执行功能的任何附加信息。
比方功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必定包括要告之从设备的信息:
从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备供应了一种考据信息内容可否正确的方法。
(2)回应
若是从设备产生一正常的回应,在回应信息中的功能代码是在盘问信息中的功能代码的回应。
数据段包括了从设备收集的数据:
象寄存器值或状态。
倘如有错误发生,功能代码将被更正以用于指出回应信息是错误的,同时数据段包括了描述此错误信息的代码。
错误检测域赞同主设备确认信息内容可否可用。
二、两种传输方式
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的全部设备都必定选择同样的传输模式和串口参数。
ASCII模式
:
地
功能
数据
数据
...
数
LRC高字LRC低字
回车
换行
址
代码
数量
1
据n节
节
RTU模式
地址
功能
数据
数据1...
数据n
CRC低CRC高
代码
数量
字节
字节
所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的信息段的每一位,以及决定怎样将信息打包成信息域和怎样解码。
在其他网络上(象MAP和ModbusPlus)Modbus信息被转成与串行传输没关的帧。
1、ASCII模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在信息中的每个8Bit字节都作为两个ASCII字符发送。
这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统
十六进制,ASCII字符0...9,A...F
信息中的每个ASCII字符都是一个十六进制字符组成
每个字节的位
1个初步位
7个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
错误检测域
LRC(纵向冗长检测)
2、RTU模式
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在信息中的每个8Bit字节包括两个4Bit的十六进制字符。
这种方式的主要优点是:
在同样的波特率下,可比ASCII方式传达更多的数据。
代码系统
8位二进制,十六进制数0...9,A...F
信息中的每个8位域都是一个两个十六进制字符组成每个字节的位
1个初步位
8个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
错误检测域
CRC(循环冗长检测)
三、Modbus信息帧
两种传输模式中(ASCII或RTU),传输设备以将Modbus信息转为有起点和终点的帧,这就赞同接收的设备在信息初步处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给全部设备),判知何时信息已完成。
部分的信息也能侦测到并且错误能设置为返回结果。
1、ASCII帧
使用ASCII模式,信息以冒号(:
)字符(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。
其他域能够使用的传输字符是十六进制的0...9,A...F。
网络上的设备不断侦
测“:
字”符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断可否发给自己的。
信息中字符间发送的时间间隔最长不能够高出传输错误。
一个典型信息帧以下所示:
1秒,否则接收的设备将认为
初步
设备
功能代
数据
LRC校
结束符
位
地址
码
验
1个字
2个字
2个字
n个字
2个字
2个字
符
符
符
符
符
符
图2ASCII信息帧
2、RTU帧
使用RTU模式,信息发送最少要以个字符时间的逗留间分开始。
在网络
波特率下多样的字符时间,这是最简单实现的(以以下图的T1-T2-T3-T4所示)。
传输的第一个域是设备地址。
能够使用的传输字符是十六进制的0...9,A...F。
网络设
备不断侦测网络总线,包括逗留间隔时间内。
当第一个域(地址域)接收到,每个设备都进行解码以判断可否发往自己的。
在最后一个传输字符此后,一个至
少个字符时间的逗留标定了信息的结束。
一个新的信息可在此逗留后开始。
整个信息帧必定作为一连续的流转输。
若是在帧完成从前有高出个字符时间的停即刻间,接收设备将刷新不完满的信息并假定下一字节是一个新信息的地址域。
同样地,若是一个新信息在小于个字符时间内接着前个信息开始,接收
的设备将认为它是前一信息的连续。
这将以致一个错误,由于在最后的CRC域的值不能能是正确的。
一典型的信息帧以下所示:
初步位
设备地
功能代
数据
CRC校验结束符
址
码
T1-T2-T3-T48Bit
8Bitn个8Bit
16BitT1-T2-T3-T4
图3RTU信息帧
3、地址域
信息帧的地址域包括两个字符(ASCII)或8Bit(RTU)。
可能的从设备地址是0...247(十进制)。
单个设备的地址范围是1...247。
主设备经过将要联系的从设备的地址放入信息中的地址域来选通从设备。
当从设备发送回应信息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。
地址0是用作广播地址,以使全部的从设备都能认识。
当Modbus协议用于更高水平的网络,广播可能不同样意或以其他方式代替。
4、怎样办理功能域
信息帧中的功能代码域包括了两个字符(ASCII)或8Bits(RTU)。
可能的代码范围是十进制的1...255。
自然,有些代码是适用于全部控制器,有此是应用于某种控制器,还有些保留以备后用。
当信息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行
为。
比方去读取输入的开关状态,读一组寄存器的数据内容,读从设备的诊断状
态,赞同调入、记录、校验在从设备中的程序等。
当从设备回应时,它使用功能代码域来指示是正常回应(无误)仍是有某种错误发生(称作异议回应)。
对正常回应,从设备仅回应相应的功能代码。
对异议
回应,从设备返回一等同于正常代码的代码,但最重要的地址为逻辑1。
比方:
一从主设备发往从设备的信息要求读一组保持寄存器,将产生以下功能代码:
00000011(十六进制03H)
对正常回应,从设备仅回应同样的功能代码。
对异议回应,它返回:
10000011(十六进制83H)
除功能代码因异议错误作了更正外,从设备将一独到的代码放到回应信息的数据域中,这能告诉主设备发生了什么错误。
主设备应用程序获取异议的回应后,典型的办理过程是重发信息,也许诊断发给从设备的信息并报告给操作员。
5、数据域
数据域是由两个十六进制数会集组成的,范围00...FF。
依照网络传输模式,这能够是由一对ASCII字符组成或由一RTU字符组成。
从主设备发给从设备信息的数据域包括附加的信息:
从设备必定用于进行
执行由功能代码所定义的所为。
这包括了象不连续的寄存器地址,要办理项的数量,域中本质数据字节数。
比方,若是主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了初步寄存器以及要读的寄存器数量。
若是主设备写一组从设备的寄存器(功能代码10十六进制),数据域则指了然要写的初步寄存器以及要写的寄存器数量,数据域的数据字节数,要写入寄存器的数据。
若是没有错误发生,从从设备返回的数据域包括央求的数据。
倘如有错误发生,此域包括一异议代码,主设备应用程序能够用来判断采用下一步行动。
在某种信息中数据域能够是不存在的(0长度)。
比方,主设备要求从设备回应通信事件记录(功能代码0B十六进制),从设备不需任何附加的信息。
6、错误检测域
标准的Modbus网络有两种错误检测方法。
错误检测域的内容视所选的检测方法而定。
ASCII
入采用ASCII模式作字符帧,错误检测域包括两个ASCII字符。
这是使用LRC(纵向冗长检测)方法抵信息内容计算得出的,不包括开始的冒号符及回车换行符。
LRC字符附加在回车换行符前面。
RTU
入采用RTU模式作字符帧,错误检测域包括一16Bits值(用两个8位的字符来实现)。
错误检测域的内容是经过抵信息内容进行循环冗长检测方法得出的。
CRC域附加在信息的最后,增加时先是低字节尔后是高字节。
故CRC的高位字节是发送信息的最后一个字节。
7、字符的连续传输
当信息在标准的Modbus系列网络传输时,每个字符或字节以以下方式发送(从左到右):
最低有效位...最高有效位
使用ASCII字符帧时,位的序列是:
有奇偶校验
启始
12
34567
奇偶停止
位
位
位
无奇偶校验
启始
停止停止
位
1234567位
位
图4.位序次(ASCII)
使用RTU字符帧时,位的序列是:
有奇偶校验
启始
1
2
3
4
5
6
7
8
奇偶
停止位
位
位
无奇偶校验
启始
停止停止
位
123
4567
8位
位
图4.位序次(RTU)
四、错误检测方法
标准的Modbus串行网络采用两种错误检测方法。
奇偶校验对每个字符都可用,帧检测(LRC或CRC)应用于整个信息。
它们都是在信息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个信息帧。
用户要给主设备配置一起初定义的超时时间间隔,这个时间间隔要足够长,以使任何从设备都能作为正常反响。
若是从设备测到一传输错误,信息将不会接收,也不会向主设备作出回应。
这样超时局件将触发主设备来办理错误。
发往不存在的从设备的地址也会产生超时。
1、奇偶校验
用户能够配置控制器是奇或偶校验,或无校验。
这将决定了每个字符中的奇偶校验位是怎样设置的。
若是指定了奇或偶校验,“1的”位数将算到每个字符的位数中(ASCII模式7个数据位,RTU中8个数据位)。
比方RTU字符帧中包括以下8个数据位:
11000101
整个“1的”数量是4个。
若是便用了偶校验,帧的奇偶校验位将是整个“1的”个数仍是4个。
若是便用了奇校验,帧的奇偶校验位将是个“1的”个数是5个。
0,便得
1,便得整
若是没有指定奇偶校验位,传输时就没有校验位,也不进行校验检测。
代替一附加的停止位填充至要传输的字符帧中。
2、LRC检测
使用ASCII模式,信息包括了一基于LRC方法的错误检测域。
LRC域检测了信息域中除开始的冒号及结束的回车换行号外的内容。
LRC域是一个包括一个8位二进制值的字节。
LRC值由传输设备来计算并放到信息帧中,接收设备在接收信息的过程受骗算LRC,并将它和接收到信息中LRC域中的值比较,若是两值不等,说明有错误。
LRC方法是将信息中的8Bit的字节连续累加,扔掉了进位。
LRC简单函数以下:
staticunsignedcharLRC(auchMsg,usDataLen)unsignedchar*auchMsg;/*要进行计算的信息*/unsignedshortusDataLen;/*LRC要办理的字节的数量*/{unsignedcharuchLRC=0;/*LRC字节初始化*/while(usDataLen--)/*传达信息*/
uchLRC+=*auchMsg++;/*累加*/
return((unsignedchar)(-((char_uchLRC)));
}
3、CRC检测
使用RTU模式,信息包括了一基于CRC方法的错误检测域。
CRC域检测了整个信息的内容。
CRC域是两个字节,包括一16位的二进制值。
它由传输设备计算后加入到信息中。
接收设备重新计算收到信息的CRC,并与接收到的CRC域中的值比较,若是两值不同样,则有误。
CRC是先调入一值是全“1的”16位寄存器,尔后调用一过程将信息中连续
的8位字节各当前寄存器中的值进行办理。
仅每个字符中的8Bit数据对CRC有效,初步位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向搬动,最高有效位以0填充。
LSB被提取出来检测,若是LSB
为1,寄存器单独和预置的值或一下,若是LSB为0,则不进行。
整个过程要重复8次。
在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前
值相或。
最后寄存器中的值,是信息中全部的字节都执行此后的CRC值。
CRC增加到信息中时,低字节先加入,尔后高字节。
MODBUS通信协议及编程【二】
ModBus通信协议分为RTU协讲和ASCII协议,我公司的多种仪表都采用ModBusRTU通信协议,如:
CH2000智能电力监测仪、CH2000M电力参数收集模块、巡检表、数显表、光柱数显表等。
下面就ModBusRTU协议简要介绍以下:
一、通信协议
(一)、通信传达方式:
通信传达分为独立的信息头,和发送的编码数据。
以下的通信传达方式定义也与MODBUSRTU通信规约相兼容:
编码
8位二进制
初步位
1位
数据位
8位
奇偶校验
1位(偶校验位)
位
停止位
1位
错误校检
CRC(冗余循环码)
初始结构=≥4字节的时间
地址码=1字节
功能码=1字节
数据区=N字节
错误校检=16位CRC码
结束结构=≥4字节的时间
地址码:
地址码为通信传达的第一个字节。
这个字节表示由用户设定地址码的从机将接收由主机发送来的信息。
并且每个从机都有拥有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表示将发送到的从机地址,而从机发送的地址码表示回送的从机地址。
功能码:
通信传达的第二个字节。
ModBus通信规约定义功能号为1到127。
本仪表只利用其中的一部分功能码。
作为主机央求发送,经过功能码告诉从机执
行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码同样,并表示从机已响应主机进行操作。
若是从机发送的功能码的最高位为1(比方功能码大与此同时127),则表示从机没有响应操作或发送出错。
数据区:
数据区是依照不同样的功能码而不同样。
数据区能够是本质数值、设置点、主机发送给从机或从机发送给主机的地址。
CRC码:
二字节的错误检测码。
(二)、通信规约:
当通信命令发送至仪器时,吻合相应地址码的设备接通信命令,并除去地址码,读守信息,若是没有出错,则执行相应的任务;尔后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。
若是出错就不发送任何信息。
1.信息帧结构
地址码功能码数据区错误校验码
8位8位N×8位16位
地址码:
地址码是信息帧的第一字节(8位),从0到255。
这个字节表示由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必定有唯一的地址码,并且只有吻合地址码的从机才能响应回送。
当从机回送信息时,相当的地址码表示该信息来自于哪处。
功能码:
主机发送的功能码告诉从机执行什么任务。
表1-1列出的功能码都有详尽的含义及操作。
代
操作
含义
码
03读取数据
读取当前寄存器内一个或多
个二进制值
06
重置单一寄存
把设置的二进制值写入单一
器
寄存器
数据区:
数据区包括需要从机执行什么动作或由从机收集的返送信息。
这些信息能够是数值、参照地址等等。
比方,功能码告诉从机读取寄存器的值,则数
据区必需包括要读取寄存器的初步地址及读取长度。
对于不同样的从机,地址和数据信息都不同样。
错误校验码:
主机或从机可用校验码进行鉴识接收信息可否出错。
有时,由于电子噪声或其他一些搅乱,信息在传输过程中会发生细微的变化,错误校验码保证了主机或从机对在传达过程中出错的信息不起作用。
这样增加了系统的安全和效率。
错误校验采用CRC-16校验方法。
注:
信息帧的格式都基真同样:
地址码、功能码、数据区和错误校验码。
2.错误校验
冗余循环码(CRC)包括2个字节,即16位二进制。
CRC码由发送设备计算,放置于发送信息的尾部。
接收信息的设备再重新计算接收到信息的CRC码,比较计算获取的CRC码可否与接收到的吻合,若是两者不吻合,则表示出错。
CRC码的计算方法是,先预置16位寄存器全为1。
再渐渐把每8位数据信息进行办理。
在进行CRC码计算时只用8位数据位,初步位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参加CRC码计算。
在计算CRC码时,8位数据与寄存器的数据相异或,获取的结果向低位移一字节,用0填充最高位。
再检查最低位,若是最低位为1,把寄存器的内容与预置数相异或,若是最低位为0,不进行异或运算。
这个过程素来重复8次。
第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上同样重复8次。
当全部的数据信息办理完后,最后寄存器的内容即为CRC码值。
CRC码中的数据发送、接收时低字节在前。
计算CRC码的步骤为:
预置16位寄存器为十六进制FFFF(即全为1)。
称此寄存器为CRC寄存器;
把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;
把寄存器的内容右移一位(朝低位),用0填充最高位,检查最低位;
若是最低位为0:
重复第3步(再次移位);若是最低位为1:
CRC寄存器与多项式A001(1010000000000001)进行异或;
重复步骤3和4,直到右移8次,这样整个8位数据全部进行了办理;重复步骤2到步骤5,进行下一个8位数据的办理;
最后获取的CRC寄存器即为CRC码。
3.功能码03,读取点和返回值:
仪表采用ModbusRTU通信规约,利用通信命令,能够进行读取点(“保持寄
存器”)或返回值(“输入寄存器”的)操作。
保持和输入寄存器都是16位(2字节)
值,并且高位在前。
这样用于仪表的读取点和返回值都是2字节。
一次最多可读
取寄存器数是60。
由于一些可编程控制器不用功能码03,所以功能码03被用
作读取点和返回值。
从机响应的命令格式是从机地址、功能码、数据区及CRC
码。
数据区中的寄存器数据都是每两个字节高字节在前。
4.功能码06,单点保留
主机利用这条命令把单点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MODBUS 通讯 plc 编程 方法