1、MODBUS TCP ip协议【网络架构】以太网帧格式历史上以太网帧格式有五种: 1.Ethernet V1:这是最原始的一种格式,是由Xerox PARC提出的3Mbps CSMA/CD以太网标准的封装格式,后来在1980年由DEC,Intel和Xerox标准化形成Ethernet V1标准. 2.Ethernet V2(ARPA):由DEC,Intel和Xerox在1982年公布其标准,主要更改了Ethernet V1的电气特性和物理接口,在帧格式上并无变化;Ethernet V2出现后迅速取代Ethernet V1成为以太网事实标准;Ethernet V2帧头结构为6bytes的源地址+
2、6bytes的目标地址+2Bytes的协议类型字段+数据。 3.RAW 802.3:这是1983年Novell发布其划时代的Netware/86网络套件时采用的私有以太网帧格式,该格式以当时尚未正式发布的802.3标准为基础;但是当两年以后IEEE正式发布802.3标准时情况发生了变化IEEE在802.3帧头中又加入了802.2 LLC(Logical Link Control)头,这使得Novell的RAW 802.3格式跟正式的IEEE 802.3标准互不兼容. 4.802.3/802.2 LLC:这是IEEE 正式的802.3标准,它由Ethernet V2发展而来。它将Ethernet
3、 V2帧头的协议类型字段替换为帧长度字段(取值为0000-05dc;十进制的1500);并加入802.2 LLC头用以标志上层协议,LLC头中包含DSAP,SSAP以及Crontrol字段. 5.802.3/802.2 SNAP:这是IEEE为保证在802.2 LLC上支持更多的上层协议同时更好的支持IP协议而发布的标准,与802.3/802.2 LLC一样802.3/802.2 SNAP也带有LLC头,但是扩展了LLC属性,新添加了一个2Bytes的协议类型域(同时将SAP的值置为AA),从而使其可以标识更多的上层协议类型;另外添加了一个3Bytes的OUI字段用于代表不同的组织,RFC 1
4、042定义了IP报文在802.2网络中的封装方法和ARP协议在802.2 SANP中的实现.802.3以太网帧格式备注:前导码(7字节)、帧起始定界符(1字节)、目的MAC地址(6字节)、源MAC地址(6字节)、类型/长度(2字节)、数据(461500字节)、帧校验序列(4字节)MAC地址可以用26字节来表示,原则上是这样,实际都是6字节以太网帧格式总结MAC地址厂商的查询的网址:全部厂商列表:urlhttp:/standards.ieee.org/regauth/oui/oui.txt/url 网页查询地址:urlhttp:/standards.ieee.org/regauth/oui/in
5、dex.shtml/url 在Search the public OUI listing . . .输入网卡MAC地址前三位即可,如00-0D-65=Start:目前,有四种不同格式的以太网帧在使用,它们分别是: Ethernet II即DIX 2.0:Xerox与DEC、Intel在1982年制定的以太网标准帧格式。Cisco名称为:ARPA。 Ethernet 802.3 raw:Novell在1983年公布的专用以太网标准帧格式。Cisco名称为:Novell-Ether。 Ethernet 802.3 SAP:IEEE在1985年公布的Ethernet 802.3的SAP版本以太网帧格
6、式。Cisco名称为:SAP。 Ethernet 802.3 SNAP:IEEE在1985年公布的Ethernet 802.3的SNAP版本以太网帧格式。Cisco名称为:SNAP。 在每种格式的以太网帧的开始处都有64比特(8字节)的前导字符,如图3所示。其中,前7个字节称为前同步码(Preamble),内容是16进制数0xAA,最后1字节为帧起始标志符0xAB,它标识着以太网帧的开始。前导字符的作用是使接收节点进行同步并做好接收数据帧的准备。图一:说明:所有范例中Send & Receive的数据都是通过ModbusTCP.exe软件发送与接收。功能码 01功能码01用于读取线圈的状态。例
7、:Modbus TCP通讯模式下,读取站号为2的从站Y0Y5的状态。MasterSlave的数据0000 0000 0006 02 01 0500 0006数据说明00 18 23 1000 05目标MAC地址,网卡的硬件地址。00:18:23表示台达6字节Ethernet II00 1A A0 397E 4E源MAC地址,网卡的硬件地址。00:1A:A0表示DELL6字节08 00协议类型:IP协议2字节45Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0Internet Protocol(IP)4位首部长度,普通IP数据包字段的值是54位版本00服务类型(TOS)00 34
8、Totol Length(IP数据包的长度)07 C6Identification40 00Fragment offset80Time to Live(一个封包在网络上可以存活的时间)06协议类型:TCP6E E0CRC校验码C0192Source ID:192.168.1.105Transmission Control Protocol (TCP)A816801169105C0192Destination ID:192.168.1.100A81680116410004 4DSource port:pt2-discover(1101)01 F6Destination port:asa-ppl-
9、proto(502)37 05 D6 C000 53F3 CB5018FD D6window sizeAA CF校验码71CC00 00Transaction Idenfifier。2字节Modbus/TCP协议00 00Protocol Idenfifier。用来确定应用层协议是否为Modbus协议2字节00 06数据长度,从【Slave的通讯地址】开始计算。2字节02Unit Idenfifier ,Slave的通讯地址。1字节01功能码。1字节Modbus协议05 00欲读取的位装置起始地址。最大字节数为14800 06欲读取的位装置的个数(bits)。SlaveMaster的数据000
10、0 0000 0004 06 01 01 35数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0004数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。01功能码。01欲读取的位装置的数目(bytes),8bits为1byte。当读取位装置的数目不足1byte时,以1byte计算。35数据内容(Y5Y0的状态)。功能码 02功能码02用于读取输入装置的状态。例:Modbus TCP通讯模式下,读取站号为2的从站X2X34的状态。MasterSlave的数据0000 0000 0006 02 02 0400 00
11、1B数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。02功能码。0400欲读取的位装置起始地址。001B欲读取的位装置的个数(bits)。SlaveMaster的数据0000 0000 0007 02 02 04 CD65 7D04数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0007数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。02功能码。04欲读取的位装置的数目
12、(bytes),8bits为1byte。当读取位装置的数目不足1byte时,以1byte计算。CD65 7D04数据内容(X34X2的状态)。 功能码 03功能码03用于读取保持寄存器(字装置)内容。PLC D0的MODBUS位址 H1000例:Modbus TCP通讯模式下,读取站号为2的从站地址H0000H0005的内容。MasterSlave的数据0000 0000 0006 02 03 0000 0006数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯
13、地址。03功能码。0000欲读取的字装置起始地址。0006欲读取的字装置的个数(words)。SlaveMaster的数据0000 00 00 000F 02 03 0C 0031 0006 0808 0002 0300 0000数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。000F数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。03功能码。0C欲读取的字装置的数目(bytes),1word为2bytes。0031H0000的数据内容。0006H0001的数据内容。0808H0002的数据内容。0002H0
14、003的数据内容。0300H0004的数据内容。0000H0005的数据内容。功能码 05功能码05用于对位装置进行写单笔操作。例1:Modbus TCP通讯模式下,设置站号为2的从站Y2=ON。MasterSlave的数据0000 0000 0006 02 05 0502 FF00数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。05功能码。0502欲写入的地址。FF00写入的控制数据为HFF00。SlaveMaster的数据0000 0000 0006
15、 02 05 0502 FF00数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。05功能码。0502欲写入的地址。FF00写入的控制数据为HFF00。例2:Modbus TCP通讯模式下,设置站号为2的从站Y2=OFF。MasterSlave的数据0000 0000 0006 02 05 0502 0000数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。00 06数据长度,从【Slave的通讯
16、地址】开始计算。02Slave的通讯地址。05功能码。05 02欲写入的地址。0000写入的控制数据为H0000。SlaveMaster的数据0000 0000 0006 02 05 0502 0000数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。05功能码。0502欲写入的地址。0000写入的控制数据为HFF00。功能码 06功能码06用于对寄存器(字装置)进行写单笔操作。例1:Modbus TCP通讯模式下,设置站号为2的从站地址H1601的内容为
17、K4。MasterSlave的数据0000 0000 0006 02 06 1601 0004数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。06功能码。1601欲写入的地址。0004写入的控制数据为H0004。SlaveMaster的数据0000 0000 0006 02 06 1601 0004数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始
18、计算。02Slave的通讯地址。06功能码。1601欲写入的地址。0004写入的控制数据为H0004。功能码 15功能码15用于对位装置进行写多笔操作。例1:Modbus TCP通讯模式下,设置站号为2的从站Y0Y17的状态如下表所示。MasterSlave的数据0000 0000 0009 02 0F 000A 02 CD01数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0009数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。0F功能码。0500欲写入的位装置的起始地址。000A欲写入的位装置个数(bit
19、s)。02欲写入位装置的数目(bytes),8bits为1byte。当写入位装置的数目不足1byte时,以1byte计算。CD01欲写入的数据内容(Y11Y0的状态)。SlaveMaster的数据0000 0000 0006 02 0F 0500 000A数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。0F功能码。0500欲写入的位装置的起始地址。000A欲写入的位装置个数(bits)。功能码 16功能码16用于对字装置进行写多笔操作。例1:Modbus
20、 TCP通讯模式下,设置站号为2的从站地址H1618=K500(01F4H);H1619=K1000(03E8H);H161A=K2000(07D0H)。MasterSlave的数据0000 0000 000B 02 10 1618 0003 06 01F4 03E8 07D0数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。000B数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。10功能码。1618欲写入的字装置起始地址。0003欲写入的字装置个数(words)。06欲写入字装置的数目(bytes),1word为2bytes。01F4写入的第一笔控制数据为H01F4。03E8写入的第二笔控制数据为H03E8。07D0写入的第二笔控制数据为H07D0。SlaveMaster的数据0000 0000 0006 02 0F 0500 000A数据说明0000Transaction Idenfifier。0000Protocol Idenfifier。0006数据长度,从【Slave的通讯地址】开始计算。02Slave的通讯地址。10功能码。1618欲写入的字装置起始地址。0003欲写入的字装置个数(words)。