modbus通讯标准协议.docx
《modbus通讯标准协议.docx》由会员分享,可在线阅读,更多相关《modbus通讯标准协议.docx(88页珍藏版)》请在冰点文库上搜索。
modbus通讯标准协议
优选文档
Modbus通讯协议
图片:
.
Modbus协议最初由Modicon公司开发出来,在1979年关该公司成为施耐德自动化
(SchneiderAutomation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。
好多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。
有了它,不同样厂商生产的控制设备能够连成工业网络,进行集中监控。
当在网络上通讯时,Modbus协议定定了每个控制器须要知道它们的设备地址,鉴别按地址发来的信息,决定要产生何种行动。
若是需要回应,控制器将生成应答并使用Modbus协议发送给咨询方。
Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。
此协议定义了控制器
能够认识和使用的信息结构,而无论它们是经过何种网络进行通讯的。
标准的
Modicon控制器使用RS232C实现串行的Modbus。
Modbus的ASCII、RTU协议规定
了信息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master
端发出数据央求信息,Slave端接收到正确信息后就可以发送数据到Master端以
响应央求;Master端也能够直接发信息更正Slave端的数据,实现双向读写。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用
LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,由于TCP
协议是一个面向连接的可靠协议。
其他,Modbus采用主从方式准时收发数据,在本质使用中若是某Slave站点断开后(如故障或关机),Master端能够诊断出来,
而当故障修复后,网络又可自动接通。
因此,Modbus协议的可靠性较好。
下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其
中TCP和RTU协议特别近似,我们只要把RTU协议的两个字节的校验码去掉,尔后在RTU协议的开始加上5个0和一个6并经过TCP/IP网络协议发送出去即可。
因此在这里我仅介绍一下Modbus的ASCII和RTU协议。
下表是ASCII协讲和RTU协议进行的比较:
经过比较能够看到,ASCII协讲和RTU协议对照拥有开始和结束标记,因此在进行
程序办理时能更加方便,而且由于传输的都是可见的ASCII字符,因此进行调试时
就更加的直观,其他它的LRC校验也比较简单。
但是由于它传输的都是可见的ASCII
字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比方RTU传输一
个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字
节,这样它的传输的效率就比较低。
因此一般来说,若是所需要传输的数据量较小
能够考虑使用ASCII协议,若是所需传输的数据量比较大,最好能使用RTU协议。
下面对两种协议的校验进行一下介绍。
1、LRC校验
LRC域是一个包括一个8位二进制值的字节。
LRC值由传输设备来计算并放到
信息帧中,接收设备在接收信息的过程受骗算LRC,并将它和接收到信息中
LRC域中的值比较,若是两值不等,说明有错误。
LRC校验比较简单,它在ASCII协议中使用,检测了信息域中除开始的冒号及
结束的回车换行号外的内容。
它可是是把每一个需要传输的数据按字节叠加
后取反加1即可。
下面是它的VC代码:
BYTEGetCheckCode(constchar*pSendBuf,intnEnd)//获得校验码
{
BYTEbyLrc=0;
charpBuf[4];
intnData=0;
for(i=1;i .优选文档 { //每两个需要发送的ASCII码转变为一个十六进制数 pBuf[0]=pSendBuf; pBuf[1]=pSendBuf[i+1]; pBuf[2]='\0'; sscanf(pBuf,"%x",&nData); byLrc+=nData; } byLrc=~byLrc; byLrc++; returnbyLrc; .优选文档 } 2、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增加到信息中时,低字节先加入,尔后高字节。下面是它的VC代码: WORDGetCheckCode(constchar*pSendBuf,intnEnd)//获得校验码 .优选文档 { WORDwCrc=WORD(0xFFFF); for(inti=0;i { wCrc^=WORD(BYTE(pSendBuf)); for(intj=0;j<8;j++) 2、{ if(wCrc&1) { 3、wCrc>>=1; wCrc^=0xA001; } .优选文档 else { wCrc>>=1; } } } returnwCrc; } 对于一条RTU协议的命令能够简单的经过以下的步骤转变为ASCII协议的命 令: 1、把命令的CRC校验去掉,而且计算出LRC校验代替。 .优选文档 2、把生成的命令串的每一个字节转变为对应的两个字节的ASCII码,比方 0x03转变为0x30,0x33(0的ASCII码和3的ASCII码)。 3、在命令的开头加上初步标记“:”,它的ASCII码为0x3A。 4、在命令的尾部加上结束标记CR,LF(0xD,0xA),此处的CR,LF表示回车 和换行的ASCII码。 因此以下我们仅介绍RTU协议即可,对应的ASCII协议能够使用以上的步骤来生成。 下表是Modbus支持的功能码: 在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。 1、读可读写数字量寄存器(线圈状态): 计算机发丧命令:[设备地址][命令号01][初步寄存器地址高8位][低8 位][读取的寄存器数高8位][低8位][CRC校验的低8位][CRC校验的高 8位] .优选文档 例:[11][01][00][13][00][25][CRC低][CRC高] 意义以下: <1>设备地址:在一个485总线上能够挂接多个设备,此处的设备地址表示想 和哪一个设备通讯。例子中为想和17号(十进制的17是十六进制的11)通讯。 <2>命令号01:读取数字量的命令号固定为01。 <3>初步地址高8位、低8位:表示想读取的开关量的初步地址(初步地址为 1)。比方例子中的初步地址为19。 <4>寄存器数高8位、低8位:表示从初步地址开始读多少个开关量。例子中为37个开关量。 <5>CRC校验:是从开头素来校验到此从前。在此协议的最后再作介绍。此处需要注意,CRC校验在命令中的高低字节的序次和其他的相反。 设备响应:[设备地址][命令号01][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][CRC校验的高8位] 例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高] .优选文档 意义以下: <1>设备地址和命令号和上面的同样。 <2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的 值。 <3>数据1...n:由于每一个数据是一个8位的数,因此每一个数据表示8个 开关量的值,每一位为0表示对应的开关断开,为1表示闭合。比方例子中, 表示20号(索引号为19)开关闭合,21号断开,22闭合,23闭合,24断开, 25断开,26闭合,27闭合...若是咨询的开关量不是8的整倍数,那么最后 一个字节的高位部分没心义,置为0。 <4>CRC校验同上。 2、读只可读数字量寄存器(输入状态): 和读取线圈状态近似,可是第二个字节的命令号不再是1而是2。 3、写数字量(线圈状态): .优选文档 计算机发丧命令:[设备地址][命令号05][需下置的寄存器地址高8位][低 8位][下置的数据高8位][低8位][CRC校验的低8位][CRC校验的高8 位] 例:[11][05][00][AC][FF][00][CRC低][CRC高] 意义以下: <1>设备地址和上面的同样。 <2>命令号:写数字量的命令号固定为05。 <3>需下置的寄存器地址高8位,低8位:表示了需要下置的开关的地址。 <4>下置的数据高8位,低8位:表示需要下置的开关量的状态。例子中为把 该开关闭合。注意,此处只能够是[FF][00]表示闭合[00][00]表示断开,其 他数值非法。 <5>注意此命令一条只能下置一个开关量的状态。 设备响应:若是成功把计算机发送的命令原样返回,否则不响应。 .优选文档 4、读可读写模拟量寄存器(保持寄存器): 计算机发丧命令:[设备地址][命令号03][初步寄存器地址高8位][低8 位][读取的寄存器数高8位][低8位][CRC校验的低8位][CRC校验的高 8位] 例:[11][03][00][6B][00][03][CRC低][CRC高] 意义以下: <1>设备地址和上面的同样。 <2>命令号:读模拟量的命令号固定为03。 <3>初步地址高8位、低8位:表示想读取的模拟量的初步地址(初步地址为 1)。比方例子中的初步地址为107。 <4>寄存器数高8位、低8位:表示从初步地址开始读多少个模拟量。例子中为3个模拟量。注意,在返回的信息中一个模拟量需要返回两个字节。 设备响应:[设备地址][命令号03][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][CRC校验的高8位] .优选文档 例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高] 意义以下: <1>设备地址和命令号和上面的同样。 <2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的 值。例子中返回了3个模拟量的数据,由于一个模拟量需要2个字节因此共6 个字节。 <3>数据1...n:其中[数据1][数据2]分别是第1个模拟量的高8位和低8 位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。例子中 返回的值分别是555,0,100。 <4>CRC校验同上。 5、读只可读模拟量寄存器(输入寄存器): 和读取保留寄存器近似,可是第二个字节的命令号不再是2而是4。 6、写单个模拟量寄存器(保持寄存器): .优选文档 计算机发丧命令:[设备地址][命令号06][需下置的寄存器地址高8位][低 8位][下置的数据高8位][低8位][CRC校验的低8位][CRC校验的高8 位] 例:[11][06][00][01][00][03][CRC低][CRC高] 意义以下: <1>设备地址和上面的同样。 <2>命令号:写模拟量的命令号固定为06。 <3>需下置的寄存器地址高8位,低8位:表示了需要下置的模拟量寄存器的地址。 <4>下置的数据高8位,低8位:表示需要下置的模拟量数据。比方例子中就 把1号寄存器的值设为3。 <5>注意此命令一条只能下置一个模拟量的状态。 设备响应:若是成功把计算机发送的命令原样返回,否则不响应。 .优选文档 Modbus通讯协议mymMODBUS通讯协议简介 工业控制已从单机控制走向集中监控、集散控制,现在已进入网级别:总版主络时代,工业控制器连网也为网络管理供应了方便。Modbus就精华:41是工业控制器的网络协议中的一种。发帖:3956 声威:9957点一、归纳金钱:9431Gold 贡献值:601点Modbus协议是应用于电子控制器上的一种通用语言。经过此协朋友圈:ifix技议,控制器相互之间、控制器经由网络(比方以太网)和其他设术群备之间能够通讯。它已经成为一通用工业标准。有了它,不同样厂在线时商生产的控制设备能够连成工业网络,进行集中监控。间:539(小时) 注册时此协议定义了一个控制器能认识使用的信息结构,而无论它们是间:2005-02-02经过何种网络进行通讯的。它描述了一控制器央求接见其他设备最后登的过程,若是回应来自其他设备的央求,以及怎样侦测错误并记录:2008-01-25录。它拟定了信息域格局和内容的公共格式。 .优选文档 当在一Modbus网络上通讯时,此协议定定了每个控制器须要知道它们的设备地址,鉴别按地址发来的信息,决定要产生何种行 动。若是需要回应,控制器将生成反响信息并用Modbus协议发出。在其他网络上,包括了Modbus协议的信息变换为在此网络上使用的帧或包结构。这种变换也扩展了依照详尽的网络解决节地址、路由路径及错误检测的方法。 1、在Modbus网络上转输 标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能 直接或经由Modem组网。控制器通讯使用主—从技术,即仅一设备(主设备)能初始化传输(盘问)。其他设备(从设备)依照 主设备盘问供应的数据作出相应反响。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。 主设备可单独和从设备通讯,也能以广播方式和全部从设备通讯。若是单独通讯,从设备返回一信息作为回应,若是是以广播方式盘问的,则不作任何回应。Modbus协议建立了主设备盘问的格式:设备(或广播)地址、功能代码、全部要发送的数据、一错误检测域。 从设备回应信息也由Modbus协议组成,包括确认要行动的域、任何要返回的数据、和一错误检测域。若是在信息接收过程中发 .优选文档 生一错误,或从设备不能够执行其命令,从设备将建立一错误信息并把它作为回应发送出去。 2、在其他种类网络上转输 在其他网络上,控制器使用同等技术通讯,故任何控制都能初始和其他控制器的通讯。这样在单独的通讯过程中,控制器既可作为主设备也可作为从设备。供应的多个内部通道可赞同同时发生的传输进度。 在信息位,Modbus协议仍供应了主—从原则,尽管网络通讯方法是“同等”。若是一控制器发送一信息,它可是作为主设备,并希望从从设备获得回应。同样,当控制器接收到一信息,它将建立一从设备回应格式并返回给发送的控制器。 Modbus是Modicon公司为其PLC与主机之间的通讯而发明的串 行通讯协议。其物理层采用RS232、485等异步串行标准。由于 其开放性而被大量的PLC及RTU厂家采用。 Modbus通讯方式采用主从方式的盘问-相应体系,只有主站发 出盘问时,从站才能给出响应,从站不能够主动发送数据。主站可 以向某一个从站发出盘问,也能够向全部从站广播信息。从站只 响应单独发给它的盘问,而不响应广播信息。 .优选文档 Modbus的串行口的通讯参数(如波特率、奇偶校验)可由用户 选择。 二、MODBUS协议传达方式 MODBUS通讯协议有两种传达方式:RTU方式和ASCII方式,两种方 式以下所示: 项目RTU方式ASCII方式 字节长度8BITS7BITS 奇偶校验1BITOR0BIT1BITOR0BIT 字节中止1BITOR2BITS1BITOR2BITS 开始标记不要:(冒号) 结束标记不要CR,LF 数据间隔<24BIT<1S 出错检验方式CRC-16LRC 控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在 标准的Modbus网络通讯。用户选择想要的模式,包括串口通讯参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的全部设备都必定选择同样的传输模式和串口 .优选文档 参数。 三、Modbus信息帧 两种传输模式中(ASCII或RTU),传输设备以将Modbus信息转为有起点和终点的帧,这就赞同接收的设备在信息初步处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给 全部设备),判知何时信息已完成。部分的信息也能侦测到而且错误能设置为返回结果。 1、ASCII帧 使用ASCII模式,信息以冒号(:)字符(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。 其他域能够使用的传输字符是十六进制的0...9,A...F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断可否发给自己的。 信息中字符间发送的时间间隔最长不能够高出1秒,否则接收的设 备将认为传输错误。 .优选文档 2、RTU帧 使用RTU模式,信息发送最少要以3.5个字符时间的逗留间分开 始。在网络波特率下多样的字符时间,这是最简单实现的(以以下图的T1-T2-T3-T4所示)。传输的第一个域是设备地址。能够使用的传输字符是十六进制的0...9,A...F。网络设备不断侦测网络总线,包括逗留间隔时间内。当第一个域(地址域)接收到, 每个设备都进行解码以判断可否发往自己的。在最后一个传输字符此后,一个最少3.5个字符时间的逗留标定了信息的结束。一个新的信息可在此逗留后开始。 整个信息帧必定作为一连续的流转输。若是在帧完成从前有高出 1.5个字符时间的停即刻间,接收设备将刷新不完满的信息并假 定下一字节是一个新信息的地址域。同样地,若是一个新信息在 小于3.5个字符时间内接着前个信息开始,接收的设备将认为它 是前一信息的连续。这将以致一个错误,由于在最后的CRC域的 值不能能是正确的。 3、地址域 信息帧的地址域包括两个字符(ASCII)或8Bit(RTU)。可能的从设备地址是0...247(十进制)。单个设备的地址范围是 .优选文档 1...247。主设备经过将要联系的从设备的地址放入信息中的地 址域来选通从设备。当从设备发送回应信息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 地址0是用作广播地址,以使全部的从设备都能认识。当Modbus协议用于更高水平的网络,广播可能不同样意或以其他方式代替。 4、怎样办理功能域 信息帧中的功能代码域包括了两个字符(ASCII)或8Bits(RTU)。可能的代码范围是十进制的1...255。自然,有些代码是适用于全部控制器,有此是应用于某种控制器,还有些保留以备后用。 当信息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为。比方去读取输入的开关状态,读一组寄存器的数据内容,读从设备的诊断状态,赞同调入、记录、校验在从设备中的程序等。 当从设备回应时,它使用功能代码域来指示是正常回应(无误)仍是有某种错误发生(称作异议回应)。对正常回应,从设
//每两个需要发送的ASCII码转变为一个十六进制数
pBuf[0]=pSendBuf;
pBuf[1]=pSendBuf[i+1];
pBuf[2]='\0';
sscanf(pBuf,"%x",&nData);
byLrc+=nData;
}
byLrc=~byLrc;
byLrc++;
returnbyLrc;
2、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增加到信息中时,低字节先加入,尔后高字节。
WORDGetCheckCode(constchar*pSendBuf,intnEnd)//获得校验码
WORDwCrc=WORD(0xFFFF);
for(inti=0;i { wCrc^=WORD(BYTE(pSendBuf)); for(intj=0;j<8;j++) 2、{ if(wCrc&1) { 3、wCrc>>=1; wCrc^=0xA001; } .优选文档 else { wCrc>>=1; } } } returnwCrc; } 对于一条RTU协议的命令能够简单的经过以下的步骤转变为ASCII协议的命 令: 1、把命令的CRC校验去掉,而且计算出LRC校验代替。 .优选文档 2、把生成的命令串的每一个字节转变为对应的两个字节的ASCII码,比方 0x03转变为0x30,0x33(0的ASCII码和3的ASCII码)。 3、在命令的开头加上初步标记“:”,它的ASCII码为0x3A。 4、在命令的尾部加上结束标记CR,LF(0xD,0xA),此处的CR,LF表示回车 和换行的ASCII码。 因此以下我们仅介绍RTU协议即可,对应的ASCII协议能够使用以上的步骤来生成。 下表是Modbus支持的功能码: 在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。 1、读可读写数字量寄存器(线圈状态): 计算机发丧命令:[设备地址][命令号01][初步寄存器地址高8位][低8 位][读取的寄存器数高8位][低8位][CRC校验的低8位][CRC校验的高 8位] .优选文档 例:[11][01][00][13][00][25][CRC低][CRC高] 意义以下: <1>设备地址:在一个485总线上能够挂接多个设备,此处的设备地址表示想 和哪一个设备通讯。例子中为想和17号(十进制的17是十六进制的11)通讯。 <2>命令号01:读取数字量的命令号固定为01。 <3>初步地址高8位、低8位:表示想读取的开关量的初步地址(初步地址为 1)。比方例子中的初步地址为19。 <4>寄存器数高8位、低8位:表示从初步地址开始读多少个开关量。例子中为37个开关量。 <5>CRC校验:是从开头素来校验到此从前。在此协议的最后再作介绍。此处需要注意,CRC校验在命令中的高低字节的序次和其他的相反。 设备响应:[设备地址][命令号01][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][CRC校验的高8位] 例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高] .优选文档 意义以下: <1>设备地址和命令号和上面的同样。 <2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的 值。 <3>数据1...n:由于每一个数据是一个8位的数,因此每一个数据表示8个 开关量的值,每一位为0表示对应的开关断开,为1表示闭合。比方例子中, 表示20号(索引号为19)开关闭合,21号断开,22闭合,23闭合,24断开, 25断开,26闭合,27闭合...若是咨询的开关量不是8的整倍数,那么最后 一个字节的高位部分没心义,置为0。 <4>CRC校验同上。 2、读只可读数字量寄存器(输入状态): 和读取线圈状态近似,可是第二个字节的命令号不再是1而是2。 3、写数字量(线圈状态): .优选文档 计算机发丧命令:[设备地址][命令号05][需下置的寄存器地址高8位][低 8位][下置的数据高8位][低8位][CRC校验的低8位][CRC校验的高8 位] 例:[11][05][00][AC][FF][00][CRC低][CRC高] 意义以下: <1>设备地址和上面的同样。 <2>命令号:写数字量的命令号固定为05。 <3>需下置的寄存器地址高8位,低8位:表示了需要下置的开关的地址。 <4>下置的数据高8位,低8位:表示需要下置的开关量的状态。例子中为把 该开关闭合。注意,此处只能够是[FF][00]表示闭合[00][00]表示断开,其 他数值非法。 <5>注意此命令一条只能下置一个开关量的状态。 设备响应:若是成功把计算机发送的命令原样返回,否则不响应。 .优选文档 4、读可读写模拟量寄存器(保持寄存器): 计算机发丧命令:[设备地址][命令号03][初步寄存器地址高8位][低8 位][读取的寄存器数高8位][低8位][CRC校验的低8位][CRC校验的高 8位] 例:[11][03][00][6B][00][03][CRC低][CRC高] 意义以下: <1>设备地址和上面的同样。 <2>命令号:读模拟量的命令号固定为03。 <3>初步地址高8位、低8位:表示想读取的模拟量的初步地址(初步地址为 1)。比方例子中的初步地址为107。 <4>寄存器数高8位、低8位:表示从初步地址开始读多少个模拟量。例子中为3个模拟量。注意,在返回的信息中一个模拟量需要返回两个字节。 设备响应:[设备地址][命令号03][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][CRC校验的高8位] .优选文档 例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高] 意义以下: <1>设备地址和命令号和上面的同样。 <2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的 值。例子中返回了3个模拟量的数据,由于一个模拟量需要2个字节因此共6 个字节。 <3>数据1...n:其中[数据1][数据2]分别是第1个模拟量的高8位和低8 位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。例子中 返回的值分别是555,0,100。 <4>CRC校验同上。 5、读只可读模拟量寄存器(输入寄存器): 和读取保留寄存器近似,可是第二个字节的命令号不再是2而是4。 6、写单个模拟量寄存器(保持寄存器): .优选文档 计算机发丧命令:[设备地址][命令号06][需下置的寄存器地址高8位][低 8位][下置的数据高8位][低8位][CRC校验的低8位][CRC校验的高8 位] 例:[11][06][00][01][00][03][CRC低][CRC高] 意义以下: <1>设备地址和上面的同样。 <2>命令号:写模拟量的命令号固定为06。 <3>需下置的寄存器地址高8位,低8位:表示了需要下置的模拟量寄存器的地址。 <4>下置的数据高8位,低8位:表示需要下置的模拟量数据。比方例子中就 把1号寄存器的值设为3。 <5>注意此命令一条只能下置一个模拟量的状态。 设备响应:若是成功把计算机发送的命令原样返回,否则不响应。 .优选文档 Modbus通讯协议mymMODBUS通讯协议简介 工业控制已从单机控制走向集中监控、集散控制,现在已进入网级别:总版主络时代,工业控制器连网也为网络管理供应了方便。Modbus就精华:41是工业控制器的网络协议中的一种。发帖:3956 声威:9957点一、归纳金钱:9431Gold 贡献值:601点Modbus协议是应用于电子控制器上的一种通用语言。经过此协朋友圈:ifix技议,控制器相互之间、控制器经由网络(比方以太网)和其他设术群备之间能够通讯。它已经成为一通用工业标准。有了它,不同样厂在线时商生产的控制设备能够连成工业网络,进行集中监控。间:539(小时) 注册时此协议定义了一个控制器能认识使用的信息结构,而无论它们是间:2005-02-02经过何种网络进行通讯的。它描述了一控制器央求接见其他设备最后登的过程,若是回应来自其他设备的央求,以及怎样侦测错误并记录:2008-01-25录。它拟定了信息域格局和内容的公共格式。 .优选文档 当在一Modbus网络上通讯时,此协议定定了每个控制器须要知道它们的设备地址,鉴别按地址发来的信息,决定要产生何种行 动。若是需要回应,控制器将生成反响信息并用Modbus协议发出。在其他网络上,包括了Modbus协议的信息变换为在此网络上使用的帧或包结构。这种变换也扩展了依照详尽的网络解决节地址、路由路径及错误检测的方法。 1、在Modbus网络上转输 标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能 直接或经由Modem组网。控制器通讯使用主—从技术,即仅一设备(主设备)能初始化传输(盘问)。其他设备(从设备)依照 主设备盘问供应的数据作出相应反响。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。 主设备可单独和从设备通讯,也能以广播方式和全部从设备通讯。若是单独通讯,从设备返回一信息作为回应,若是是以广播方式盘问的,则不作任何回应。Modbus协议建立了主设备盘问的格式:设备(或广播)地址、功能代码、全部要发送的数据、一错误检测域。 从设备回应信息也由Modbus协议组成,包括确认要行动的域、任何要返回的数据、和一错误检测域。若是在信息接收过程中发 .优选文档 生一错误,或从设备不能够执行其命令,从设备将建立一错误信息并把它作为回应发送出去。 2、在其他种类网络上转输 在其他网络上,控制器使用同等技术通讯,故任何控制都能初始和其他控制器的通讯。这样在单独的通讯过程中,控制器既可作为主设备也可作为从设备。供应的多个内部通道可赞同同时发生的传输进度。 在信息位,Modbus协议仍供应了主—从原则,尽管网络通讯方法是“同等”。若是一控制器发送一信息,它可是作为主设备,并希望从从设备获得回应。同样,当控制器接收到一信息,它将建立一从设备回应格式并返回给发送的控制器。 Modbus是Modicon公司为其PLC与主机之间的通讯而发明的串 行通讯协议。其物理层采用RS232、485等异步串行标准。由于 其开放性而被大量的PLC及RTU厂家采用。 Modbus通讯方式采用主从方式的盘问-相应体系,只有主站发 出盘问时,从站才能给出响应,从站不能够主动发送数据。主站可 以向某一个从站发出盘问,也能够向全部从站广播信息。从站只 响应单独发给它的盘问,而不响应广播信息。 .优选文档 Modbus的串行口的通讯参数(如波特率、奇偶校验)可由用户 选择。 二、MODBUS协议传达方式 MODBUS通讯协议有两种传达方式:RTU方式和ASCII方式,两种方 式以下所示: 项目RTU方式ASCII方式 字节长度8BITS7BITS 奇偶校验1BITOR0BIT1BITOR0BIT 字节中止1BITOR2BITS1BITOR2BITS 开始标记不要:(冒号) 结束标记不要CR,LF 数据间隔<24BIT<1S 出错检验方式CRC-16LRC 控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在 标准的Modbus网络通讯。用户选择想要的模式,包括串口通讯参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的全部设备都必定选择同样的传输模式和串口 .优选文档 参数。 三、Modbus信息帧 两种传输模式中(ASCII或RTU),传输设备以将Modbus信息转为有起点和终点的帧,这就赞同接收的设备在信息初步处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给 全部设备),判知何时信息已完成。部分的信息也能侦测到而且错误能设置为返回结果。 1、ASCII帧 使用ASCII模式,信息以冒号(:)字符(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。 其他域能够使用的传输字符是十六进制的0...9,A...F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断可否发给自己的。 信息中字符间发送的时间间隔最长不能够高出1秒,否则接收的设 备将认为传输错误。 .优选文档 2、RTU帧 使用RTU模式,信息发送最少要以3.5个字符时间的逗留间分开 始。在网络波特率下多样的字符时间,这是最简单实现的(以以下图的T1-T2-T3-T4所示)。传输的第一个域是设备地址。能够使用的传输字符是十六进制的0...9,A...F。网络设备不断侦测网络总线,包括逗留间隔时间内。当第一个域(地址域)接收到, 每个设备都进行解码以判断可否发往自己的。在最后一个传输字符此后,一个最少3.5个字符时间的逗留标定了信息的结束。一个新的信息可在此逗留后开始。 整个信息帧必定作为一连续的流转输。若是在帧完成从前有高出 1.5个字符时间的停即刻间,接收设备将刷新不完满的信息并假 定下一字节是一个新信息的地址域。同样地,若是一个新信息在 小于3.5个字符时间内接着前个信息开始,接收的设备将认为它 是前一信息的连续。这将以致一个错误,由于在最后的CRC域的 值不能能是正确的。 3、地址域 信息帧的地址域包括两个字符(ASCII)或8Bit(RTU)。可能的从设备地址是0...247(十进制)。单个设备的地址范围是 .优选文档 1...247。主设备经过将要联系的从设备的地址放入信息中的地 址域来选通从设备。当从设备发送回应信息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 地址0是用作广播地址,以使全部的从设备都能认识。当Modbus协议用于更高水平的网络,广播可能不同样意或以其他方式代替。 4、怎样办理功能域 信息帧中的功能代码域包括了两个字符(ASCII)或8Bits(RTU)。可能的代码范围是十进制的1...255。自然,有些代码是适用于全部控制器,有此是应用于某种控制器,还有些保留以备后用。 当信息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为。比方去读取输入的开关状态,读一组寄存器的数据内容,读从设备的诊断状态,赞同调入、记录、校验在从设备中的程序等。 当从设备回应时,它使用功能代码域来指示是正常回应(无误)仍是有某种错误发生(称作异议回应)。对正常回应,从设
wCrc^=WORD(BYTE(pSendBuf));
for(intj=0;j<8;j++)
2、{
if(wCrc&1)
3、wCrc>>=1;
wCrc^=0xA001;
else
wCrc>>=1;
returnwCrc;
对于一条RTU协议的命令能够简单的经过以下的步骤转变为ASCII协议的命
令:
1、把命令的CRC校验去掉,而且计算出LRC校验代替。
2、把生成的命令串的每一个字节转变为对应的两个字节的ASCII码,比方
0x03转变为0x30,0x33(0的ASCII码和3的ASCII码)。
3、在命令的开头加上初步标记“:
”,它的ASCII码为0x3A。
4、在命令的尾部加上结束标记CR,LF(0xD,0xA),此处的CR,LF表示回车
和换行的ASCII码。
因此以下我们仅介绍RTU协议即可,对应的ASCII协议能够使用以上的步骤来生成。
下表是Modbus支持的功能码:
在这些功能码中较长使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
1、读可读写数字量寄存器(线圈状态):
计算机发丧命令:
[设备地址][命令号01][初步寄存器地址高8位][低8
位][读取的寄存器数高8位][低8位][CRC校验的低8位][CRC校验的高
8位]
例:
[11][01][00][13][00][25][CRC低][CRC高]
意义以下:
<1>设备地址:
在一个485总线上能够挂接多个设备,此处的设备地址表示想
和哪一个设备通讯。
例子中为想和17号(十进制的17是十六进制的11)通讯。
<2>命令号01:
读取数字量的命令号固定为01。
<3>初步地址高8位、低8位:
表示想读取的开关量的初步地址(初步地址为
1)。
比方例子中的初步地址为19。
<4>寄存器数高8位、低8位:
表示从初步地址开始读多少个开关量。
例子中为37个开关量。
<5>CRC校验:
是从开头素来校验到此从前。
在此协议的最后再作介绍。
此处需要注意,CRC校验在命令中的高低字节的序次和其他的相反。
设备响应:
[设备地址][命令号01][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][CRC校验的高8位]
[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]
<1>设备地址和命令号和上面的同样。
<2>返回的字节个数:
表示数据的字节个数,也就是数据1,2...n中的n的
值。
<3>数据1...n:
由于每一个数据是一个8位的数,因此每一个数据表示8个
开关量的值,每一位为0表示对应的开关断开,为1表示闭合。
比方例子中,
表示20号(索引号为19)开关闭合,21号断开,22闭合,23闭合,24断开,
25断开,26闭合,27闭合...若是咨询的开关量不是8的整倍数,那么最后
一个字节的高位部分没心义,置为0。
<4>CRC校验同上。
2、读只可读数字量寄存器(输入状态):
和读取线圈状态近似,可是第二个字节的命令号不再是1而是2。
3、写数字量(线圈状态):
[设备地址][命令号05][需下置的寄存器地址高8位][低
8位][下置的数据高8位][低8位][CRC校验的低8位][CRC校验的高8
位]
[11][05][00][AC][FF][00][CRC低][CRC高]
<1>设备地址和上面的同样。
<2>命令号:
写数字量的命令号固定为05。
<3>需下置的寄存器地址高8位,低8位:
表示了需要下置的开关的地址。
<4>下置的数据高8位,低8位:
表示需要下置的开关量的状态。
例子中为把
该开关闭合。
注意,此处只能够是[FF][00]表示闭合[00][00]表示断开,其
他数值非法。
<5>注意此命令一条只能下置一个开关量的状态。
若是成功把计算机发送的命令原样返回,否则不响应。
4、读可读写模拟量寄存器(保持寄存器):
[设备地址][命令号03][初步寄存器地址高8位][低8
[11][03][00][6B][00][03][CRC低][CRC高]
读模拟量的命令号固定为03。
表示想读取的模拟量的初步地址(初步地址为
比方例子中的初步地址为107。
表示从初步地址开始读多少个模拟量。
例子中为3个模拟量。
注意,在返回的信息中一个模拟量需要返回两个字节。
[设备地址][命令号03][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][CRC校验的高8位]
[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]
例子中返回了3个模拟量的数据,由于一个模拟量需要2个字节因此共6
个字节。
其中[数据1][数据2]分别是第1个模拟量的高8位和低8
位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。
例子中
返回的值分别是555,0,100。
5、读只可读模拟量寄存器(输入寄存器):
和读取保留寄存器近似,可是第二个字节的命令号不再是2而是4。
6、写单个模拟量寄存器(保持寄存器):
[设备地址][命令号06][需下置的寄存器地址高8位][低
[11][06][00][01][00][03][CRC低][CRC高]
写模拟量的命令号固定为06。
表示了需要下置的模拟量寄存器的地址。
表示需要下置的模拟量数据。
比方例子中就
把1号寄存器的值设为3。
<5>注意此命令一条只能下置一个模拟量的状态。
mym
MODBUS通讯协议简介
工业控制已从单机控制走向集中监控、集散控制,现在已进入网
级别:
总版主
络时代,工业控制器连网也为网络管理供应了方便。
Modbus就
精华:
41
是工业控制器的网络协议中的一种。
发帖:
3956
声威:
9957点
一、归纳
金钱:
9431Gold
贡献值:
601点
Modbus协议是应用于电子控制器上的一种通用语言。
经过此协
朋友圈:
ifix技
议,控制器相互之间、控制器经由网络(比方以太网)和其他设
术群
备之间能够通讯。
它已经成为一通用工业标准。
有了它,不同样厂
在线时
商生产的控制设备能够连成工业网络,进行集中监控。
间:
539(小时)
注册时
此协议定义了一个控制器能认识使用的信息结构,而无论它们是
2005-02-02
经过何种网络进行通讯的。
它描述了一控制器央求接见其他设备
最后登
的过程,若是回应来自其他设备的央求,以及怎样侦测错误并记
录:
2008-01-25
录。
它拟定了信息域格局和内容的公共格式。
当在一Modbus网络上通讯时,此协议定定了每个控制器须要知道它们的设备地址,鉴别按地址发来的信息,决定要产生何种行
动。
若是需要回应,控制器将生成反响信息并用Modbus协议发出。
在其他网络上,包括了Modbus协议的信息变换为在此网络上使用的帧或包结构。
这种变换也扩展了依照详尽的网络解决节地址、路由路径及错误检测的方法。
1、在Modbus网络上转输
标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
控制器能
直接或经由Modem组网。
控制器通讯使用主—从技术,即仅一设备(主设备)能初始化传输(盘问)。
其他设备(从设备)依照
主设备盘问供应的数据作出相应反响。
典型的主设备:
主机和可编程仪表。
典型的从设备:
可编程控制器。
主设备可单独和从设备通讯,也能以广播方式和全部从设备通讯。
若是单独通讯,从设备返回一信息作为回应,若是是以广播方式盘问的,则不作任何回应。
Modbus协议建立了主设备盘问的格式:
设备(或广播)地址、功能代码、全部要发送的数据、一错误检测域。
从设备回应信息也由Modbus协议组成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
若是在信息接收过程中发
生一错误,或从设备不能够执行其命令,从设备将建立一错误信息并把它作为回应发送出去。
2、在其他种类网络上转输
在其他网络上,控制器使用同等技术通讯,故任何控制都能初始和其他控制器的通讯。
这样在单独的通讯过程中,控制器既可作为主设备也可作为从设备。
供应的多个内部通道可赞同同时发生的传输进度。
在信息位,Modbus协议仍供应了主—从原则,尽管网络通讯方法是“同等”。
若是一控制器发送一信息,它可是作为主设备,并希望从从设备获得回应。
同样,当控制器接收到一信息,它将建立一从设备回应格式并返回给发送的控制器。
Modbus是Modicon公司为其PLC与主机之间的通讯而发明的串
行通讯协议。
其物理层采用RS232、485等异步串行标准。
由于
其开放性而被大量的PLC及RTU厂家采用。
Modbus通讯方式采用主从方式的盘问-相应体系,只有主站发
出盘问时,从站才能给出响应,从站不能够主动发送数据。
主站可
以向某一个从站发出盘问,也能够向全部从站广播信息。
从站只
响应单独发给它的盘问,而不响应广播信息。
Modbus的串行口的通讯参数(如波特率、奇偶校验)可由用户
选择。
二、MODBUS协议传达方式
MODBUS通讯协议有两种传达方式:
RTU方式和ASCII方式,两种方
式以下所示:
项目RTU方式ASCII方式
字节长度8BITS7BITS
奇偶校验1BITOR0BIT1BITOR0BIT
字节中止1BITOR2BITS1BITOR2BITS
开始标记不要:
(冒号)
结束标记不要CR,LF
数据间隔<24BIT<1S
出错检验方式CRC-16LRC
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在
标准的Modbus网络通讯。
用户选择想要的模式,包括串口通讯参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的全部设备都必定选择同样的传输模式和串口
参数。
三、Modbus信息帧
两种传输模式中(ASCII或RTU),传输设备以将Modbus信息转为有起点和终点的帧,这就赞同接收的设备在信息初步处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给
全部设备),判知何时信息已完成。
部分的信息也能侦测到而且错误能设置为返回结果。
1、ASCII帧
使用ASCII模式,信息以冒号(:
)字符(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。
其他域能够使用的传输字符是十六进制的0...9,A...F。
网络上的设备不断侦测“:
”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断可否发给自己的。
信息中字符间发送的时间间隔最长不能够高出1秒,否则接收的设
备将认为传输错误。
2、RTU帧
使用RTU模式,信息发送最少要以3.5个字符时间的逗留间分开
始。
在网络波特率下多样的字符时间,这是最简单实现的(以以下图的T1-T2-T3-T4所示)。
传输的第一个域是设备地址。
能够使用的传输字符是十六进制的0...9,A...F。
网络设备不断侦测网络总线,包括逗留间隔时间内。
当第一个域(地址域)接收到,
每个设备都进行解码以判断可否发往自己的。
在最后一个传输字符此后,一个最少3.5个字符时间的逗留标定了信息的结束。
一个新的信息可在此逗留后开始。
整个信息帧必定作为一连续的流转输。
若是在帧完成从前有高出
1.5个字符时间的停即刻间,接收设备将刷新不完满的信息并假
定下一字节是一个新信息的地址域。
同样地,若是一个新信息在
小于3.5个字符时间内接着前个信息开始,接收的设备将认为它
是前一信息的连续。
这将以致一个错误,由于在最后的CRC域的
值不能能是正确的。
3、地址域
信息帧的地址域包括两个字符(ASCII)或8Bit(RTU)。
可能的从设备地址是0...247(十进制)。
单个设备的地址范围是
1...247。
主设备经过将要联系的从设备的地址放入信息中的地
址域来选通从设备。
当从设备发送回应信息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。
地址0是用作广播地址,以使全部的从设备都能认识。
当Modbus协议用于更高水平的网络,广播可能不同样意或以其他方式代替。
4、怎样办理功能域
信息帧中的功能代码域包括了两个字符(ASCII)或8Bits(RTU)。
可能的代码范围是十进制的1...255。
自然,有些代码是适用于全部控制器,有此是应用于某种控制器,还有些保留以备后用。
当信息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为。
比方去读取输入的开关状态,读一组寄存器的数据内容,读从设备的诊断状态,赞同调入、记录、校验在从设备中的程序等。
当从设备回应时,它使用功能代码域来指示是正常回应(无误)仍是有某种错误发生(称作异议回应)。
对正常回应,从设
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2