什么Modbus协议Word格式.docx
《什么Modbus协议Word格式.docx》由会员分享,可在线阅读,更多相关《什么Modbus协议Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:
设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
2、在其它类型网络上转输
在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。
如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。
同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。
3、查询—回应周期
(1)查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
例如功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必须包含要告之从设备的信息:
从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)回应
如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据:
象寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
二、两种传输方式
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
在其它网络上(象MAP和ModbusPlus)Modbus消息被转成与串行传输无关的帧。
1、ASCII模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。
这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统
·
十六进制,ASCII字符0...9,A...F
消息中的每个ASCII字符都是一个十六进制字符组成
每个字节的位
1个起始位
7个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
CRC域是两个字节,包含一16位的二进制值。
它由传输设备计算后加入到消息中。
接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。
仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。
LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。
整个过程要重复8次。
在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。
最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
CRC添加到消息中时,低字节先加入,然后高字节。
CRC简单函数如下:
unsignedshortCRC16(puchMsg,usDataLen)
unsignedchar*puchMsg;
/*要进行CRC校验的消息*/
unsignedshortusDataLen;
/*消息中字节数*/
{
unsignedcharuchCRCHi=0xFF;
/*高CRC字节初始化*/
unsignedcharuchCRCLo=0xFF;
/*低CRC字节初始化*/
unsigneduIndex;
/*CRC循环中的索引*/
while(usDataLen--)/*传输消息缓冲区*/
uIndex=uchCRCHi^*puchMsgg++;
/*计算CRC*/
uchCRCHi=uchCRCLo^auchCRCHi[uIndex};
uchCRCLo=auchCRCLo[uIndex];
}
return(uchCRCHi<
<
8uchCRCLo);
/*CRC高位字节值表*/
staticunsignedcharauchCRCHi[]={
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,
0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40
};
/*CRC低位字节值表*/
staticcharauchCRCLo[]={
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,
0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,
0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,
0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,
0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,
0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,
0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,
0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,
0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,
0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,
0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,
0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,
0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,
0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,
0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,
0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,
0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,
0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,
0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,
0x43,0x83,0x41,0x81,0x80,0x40
ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表1是ModBus的功能码定义。
表1ModBus功能码
01READCOILSTATUS
02READINPUTSTATUS
03READHOLDINGREGISTER
04READINPUTREGISTER
05WRITESINGLECOIL
06WRITESINGLEREGISTER
15WRITEMULTIPLECOIL
16WRITEMULTIPLEREGISTER
ModBus网络只是一个主机,所有通信都由他发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。
采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
(1)ModBus的传输方式
在ModBus系统中有2种传输模式可选择。
这2种传输模式与从机PC通信的能力是同等的。
选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。
一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)这两种模式的定义见表3
表3ASCII和RTU传输模式的特性
ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortan)编程的主计算机及主PC很适宜。
RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。
如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。
用以构成报文的ASCII字符都是十六进制字符。
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。
(2)ModBus的数据校验方式
CRC-16(循环冗余错误校验)
CRC-16错误校验程序如下:
报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。
报文先与X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示为二进制数11000000000000101。
整数商位忽略不记,16位余数加入该报文(MSB先发送),成为2个CRC校验字节。
余数中的1全部初始化,以免所有的零成为一条报文被接收。
经上述处理而含有CRC字节的报文,若无错误,到接收设备后再被同一多项式(X↑16+X↑15+X↑2+1)除,会得到一个零余数(接收设备核验这个CRC字节,并将其与被传送的CRC比较)。
全部运算以2为模(无进位)。
习惯于成串发送数据的设备会首选送出字符的最右位(LSB-最低有效位)。
而在生成CRC情况下,发送首位应是被除数的最高有效位MSB。
由于在运算中不用进位,为便于操作起见,计算CRC时设MSB在最右位。
生成多项式的位序也必须反过来,以保持一致。
多项式的MSB略去不记,因其只对商有影响而不影响余数。
生成CRC-16校验字节的步骤如下:
①装如一个16位寄存器,所有数位均为1。
②该16位寄存器的高位字节与开始8位字节进行“异或”运算。
运算结果放入这个16位寄存器。
③把这个16寄存器向右移一位。
④若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行“异或”运算;
若向右移出的数位是0,则返回③。
⑤重复③和④,直至移出8位。
⑥另外8位与该十六位寄存器进行“异或”运算。
⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。
另外,在某些非ModBus通信协议中也经常使用CRC16作为校验手段,而且产生了一些CRC16的变种,他们是使用CRC16多项式X↑16+X↑15+X↑2+1,单首次装入的16位寄存器为0000;
使用CRC16的反序X↑16+X↑14+X↑1+1,首次装入寄存器值为0000或FFFFH。
LRC(纵向冗余错误校验)
LRC错误校验用于ASCII模式。
这个错误校验是一个8位二进制数,可作为2个ASCII十六进制字节传送。
把十六进制字符转换成二进制,加上无循环进位的二进制字符和二进制补码结果生成LRC错误校验(参见图)。
这个LRC在接收设备进行核验,并与被传送的LRC进行比较,冒号(:
)、回车符号(CR)、换行字符(LF)和置入的其他任何非ASCII十六进制字符在运算时忽略不计。
回答者:
wxzbd-助理二级3-1816:
21
何谓Modbus协议?
Modbus是MODICON公司于1979年开发的一种通讯协议。
它是一种在工业领域被广为应用的真正开放、标准的网络通讯协议。
SCADA和HMI通过Modbus协议可以很容易将带串行通讯口的设备集成在一起。
什么是Modbus/TCP协议?
Modbus/TCP协议是不同于Modbus的另一种协议,产生于1999年。
它允许因特网接入以太网设备。
什么软件支持Modbus和Modbus/TCP协议?
大部分SCADA(SupervisorControlAndDataAcuisition)和HMI软件支持Modbus协议。
例如:
组态王、MCGS、Citect、ICONICS、iFIX、InduSoft、Intouch、EntivityStudio、EntivityLive、EntivityVLC、TraceMode、Wizcon、Wonderware...等
为何使用Modbus和Modbus/TCP协议?
1.公开的协议,免收许可费用
2.被SCADA和HMI软件广为支持
3.简单易用
4.易于集成不同的设备
5.开发成本低
6.广泛的知识资源支持
参考资料:
我爱吃揪面-经理四级3-1817:
03
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列