看完这篇,就知道学习MODBUS TCP

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的源地址+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 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 1042定义了IP报文在802.2网络中的封装方法和ARP协议在802.2 SANP中的实现.

  802.3以太网帧格式备注:

  前导码(7字节)、帧起始定界符(1字节)、目的MAC地址(6字节)、源MAC地址(6字节)、类型/长度(2字节)、数据(46~1500字节)、帧校验序列(4字节)[MAC地址可以用2-6字节来表示,原则上是这样,实际都是6字节]

以太网帧格式总结

MAC地址厂商的查询的网址:全部厂商列表:

网页查询地址: 在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版本以太网帧格式。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用于读取线圈的状态。

例:Modbus TCP通讯模式下,读取站号为2的从站Y0~Y5的状态。


Master→Slave的数据『0000 0000 0006 02 01 0500 0006』

Slave→Master的数据『0000 0000 0004 06 01 01 35』

功能码 02

功能码02用于读取输入装置的状态。

例:Modbus TCP通讯模式下,读取站号为2的从站X2~X34的状态。


Master→Slave的数据『0000 0000 0006 02 02 0400 001B』

Slave→Master的数据『0000 0000 0007 02 02 04 CD65 7D04』

功能码 03

功能码03用于读取保持寄存器(字装置)内容。

PLC D0的MODBUS位址 H1000

例:Modbus TCP通讯模式下,读取站号为2的从站地址H'0000~H'0005的内容。


Master→Slave的数据『0000 0000 0006 02 03 0000 0006』

Slave→Master的数据『0000 00 00 000F 02 03 0C 0031 0006 0808 0002 0300 0000』

功能码 05

功能码05用于对位装置进行写单笔操作。

例1:Modbus TCP通讯模式下,设置站号为2的从站Y2=ON。

Master→Slave的数据『0000 0000 0006 02 05 0502 FF00』

Slave→Master的数据『0000 0000 0006 02 05 0502 FF00』

例2:Modbus TCP通讯模式下,设置站号为2的从站Y2=OFF。

Master→Slave的数据『0000 0000 0006 02 05 0502 0000』

Slave→Master的数据『0000 0000 0006 02 05 0502 0000』

功能码 06

功能码06用于对寄存器(字装置)进行写单笔操作。

例1:Modbus TCP通讯模式下,设置站号为2的从站地址H'1601的内容为K4。

Master→Slave的数据『0000 0000 0006 02 06 1601 0004』

Slave→Master的数据『0000 0000 0006 02 06 1601 0004』

功能码 15

功能码15用于对位装置进行写多笔操作。

例1:Modbus TCP通讯模式下,设置站号为2的从站Y0~Y17的状态如下表所示。


Master→Slave的数据『0000 0000 0009 02 0F 000A 02 CD01』

Slave→Master的数据『0000 0000 0006 02 0F 0500 000A』

功能码 16

功能码16用于对字装置进行写多笔操作。

例1:Modbus TCP通讯模式下,设置站号为2的从站地址H'1618=K500(01F4H);H'1619=K1000(03E8H);H'161A=K2000(07D0H)。


Master→Slave的数据『0000 0000 000B 02 10 1618 0003 06 01F4 03E8 07D0』

Slave→Master的数据『0000 0000 0006 02 0F 0500 000A』