MODBUSTCPIP协议.docx
《MODBUSTCPIP协议.docx》由会员分享,可在线阅读,更多相关《MODBUSTCPIP协议.docx(19页珍藏版)》请在冰豆网上搜索。
MODBUSTCPIP协议
MODBUSTCPip协议
【网络架构】
RS-485
以太网帧格式
历史上以太网帧格式有五种:
「EthernetV1:
这是最原始的一种格式,是由XeroxPARC提出的3MbpsCS
MA/CD以太网标准的封装格式,后来在1980年由DEC,Intel和Xerox标准化形成EthernetV1标准.
2.EthernetV2(ARPA):
由DEC,Intel和Xerox在1982年公布其标准,主要更
改了EthernetV1的电气特性和物理接口,在帧格式上并无变化;EthernetV2出现
后迅速取代EthernetV1成为以太网事实标准;EthernetV2帧头结构为6bytes的
源地址+6bytes的目标地址+2Bytes的协议类型字段+数据。
3.RAW802.3:
这是1983年Novell发布其划时代的Netware/86网络套件时采
用的私有以太网帧格式,该格式以当时尚未正式发布的802.3标准为基础;但是当两
年以后IEEE正式发布802.3标准时情况发生了变化—IEEE在802.3帧头中又加入了
802.2LLC(LogicalLinkControl)头,这使得Novell的RAW802.3格式跟正式的I
EEE802.3标准互不兼容.
4.802.3/802.2LLC:
这是IEEE正式的802.3标准,它由EthernetV2发展而来。
它将EthernetV2帧头的协议类型字段替换为帧长度字段(取值为0000-05dc;十
进制的1500);并加入802.2LLC头用以标志上层协议,LLC头中包含DSAP,SS
AP以及Crontrol字段.
5.802.3/802.2SNAP:
这是IEEE为保证在802.2LLC上支持更多的上层协议同时更好的支持IP协议而发布的标准,与802.3/802.2LLC一样802.3/802.2SNA
P也带有LLC头,但是扩展了LLC属性,新添加了一个2Bytes的协议类型域(同时
将SAP的值置为AA),从而使其可以标识更多的上层协议类型;另外添加了一个3B
ytes的0UI字段用于代表不同的组织,RFC1042定义了IP报文在802.2网络中的
封装方法和ARP协议在802.2SANP中的实现.
802.3以太网帧格式备注:
前导码(7字节)、帧起始定界符(1字节)、目的MAC地址(6字节)、源MAC地址(6字节)、类型/长度(2字节)、数据(46~1500字节)、帧校验序列(4字节)[MAC地址可以用2—6字节来表示,原则上是这样,实际都是6字节]
以太网帧格式总结
MAC地址厂商的查询的网址:
全部厂商列表:
[url]http:
〃standards.ieee.org/regauth/oui/oui.txt[/url]
网页查询地址:
[url]http:
//standards.ieee.org/regauth/oui/index.shtml[/url]
在SearchthepublicOUIlisting...输入网卡MAC地址前三位即可,如00-0D-65
==>Start:
目前,有四种不同格式的以太网帧在使用,它们分别是:
•EthernetII即DIX2.0:
Xerox与DEC、Intel在1982年制定的以太网标准帧格式。
Cisco名称为:
ARPA。
•Ethernet
802.3
raw:
Novell
在1983
年公布的专用以太网标准帧格式。
Cisco名称
为:
Novell-Ether
o
•
Ethernet
802.3
SAP:
IEEE
在1985
年公布的Ethernet
802.3的SAP版本以太
网帧格式。
Cisco
名称为:
SAPo
•
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用于读取线圈的状态。
例:
ModbusTCP通讯模式下,读取站号为2的从站Y0〜Y5的状态
装置名称
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
状态
—
■
Master—Slave的数据『000000000006020105000006』
数据
说明
0018
2310
0005
目标MAC地址,
00:
18:
23表示台达
厂商代码
网卡的硬件地址。
设备编号
亠4
6字节
EthernetII
W■
00■■0D■■88—4
7--58--2C
*>
Ethernet地址
001A
A039
7E4E
源MAC地址,网
00:
1A:
A0表示D
厂商代码
卡的硬件地址。
ELL
设备编号
6字节
00■■0D■■88—4
J58--2C
Ethernet地址
0800
协议类型:
IP协议
2字节
45
Bit7Bit6Bit5Bit4
Bit3
Bit2Bit1Bit0
Internet
Protocol(IP)
4位首部长度,普通IP数据包字段的值是5
4位版本
00
服务类型(TOS)
0034
TotolLength(IP数据包的长度)
07C6
Identification
4000
Fragmentoffset
80
TimetoLive(一个圭寸包在网络上可以存活的时间)
06
协议类型:
TCP
6EE0
CRC校验码
C0
192
SourceID:
Transmission
A8
168
192.168.1.105
Control
01
1
Protocol
69
105
(TCP)
C0
192
DestinationID:
A8
168
192.168.1.100
01
1
64
100
044D
Sourceport:
pt2-discover(1101)
01F6
Destinationport:
asa-ppl-proto(502)
3705
D6C0
0053
F3CB
50
18
FDD6
windowsize
AACF
校验码
71CC
0000
TransactionIdenfifier。
2字节
Modbus/TCP
0000
ProtocolIdenfifier。
用来确疋应用层
协议是否为Modbus协议
2字节
协议
0006
数据长度,从【Slave的通讯地址】开始计算。
2字节
02
UnitIdenfifier,Slave的通讯地址。
1字节
01
功能码。
1字节
Modbus协议
0500
欲读取的位装置起始地址。
最大字节数为
0006
欲读取的位装置的个数(bits)。
148
Slave—Master的数据『00000000000406010135』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0004
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
01
功能码。
01
欲读取的位装置的数目(bytes),8bits为1byte。
当读取位装置的数目不足1byte时,以1byte计算。
35数据内容(Y5…Y0的状态)
装置名称
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
状态
ri
数值内容
3
51
功能码02
功能码02用于读取输入装置的状态。
例:
ModbusTCP通讯模式下,读取站号为2的从站X2〜X34的状态
装置名称
X7
X6
X5
X4
X3
X2
X1
X0
状态
LL
数值内容
3
5
装置名称
X17
X16
X15
X14
X13
X12
X11
状态
数值内容
9
7
装置名称
X27
X26
X25
X24
X23
X22
X21
X20
状态
r
zn
数值内容
F
5
装置名称
X37
X36
X35
X34
X33
X32
X31
X30
二
状态
数值内容
1
1
Master—Slave的数据『00000000000602020400001B』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
02
功能码。
0400
欲读取的位装置起始地址。
001B
欲读取的位装置的个数(bits)。
Slave—Master的数据『000000000007020204CD657D04』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0007
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
02
功能码。
欲读取的位装置的数目(bytes),8bits为Ibyte。
当读取位装置的数目不足Ibyte时,以Ibyte计算。
CD65
7D04
装置名称
X11
X10
X7
X6
X5
X4
X3
X2
状态
数值内容
C
D
装置名称
X21
X20
X17
X16
X15
X14
X13
X12
状态
数值内容
6
5
装置名称
X31
X30
X27
X26
X25
X24
X23
X22
状态
数值内容
7
D
装置名称
X35
X34
X33
X32
状态
数值内容
4
数据内容(X34…X2的状态)。
功能码03
功能码03用于读取保持寄存器(字装置)内容。
PLCD0的MODBUS位址H1000
例:
ModbusTCP通讯模式下,读取站号为2的从站地址H'000~H'0005的内容。
装置地址
内容值
H'0000
0031H
H'0001
0006H
H'0002
0808H
H'0003
0002H
H'0004
0300H
H'0005
0000H
Master—Slave的数据『000000000006020300000006』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
03
功能码。
0000
欲读取的字装置起始地址。
0006
欲读取的子装置的个数(words)。
Slave—Master的数据『00000000000F02030C003100060808000203000000』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
000F
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
03
功能码。
0C
欲读取的子装置的数目(bytes),1word为2bytes。
0031
H'000的数据内容。
0006
H'001的数据内容。
0808
H'002的数据内容。
0002
H'003的数据内容。
0300
H'004的数据内容。
0000
H'005的数据内容。
功能码05
功能码05用于对位装置进行写单笔操作。
例1:
ModbusTCP通讯模式下,设置站号为2的从站Y2=ON
Master—Slave的数据『00000000000602050502FF00』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
05
功能码。
0502
欲写入的地址。
FF00
写入的控制数据为H'FF00。
Slave—Master的数据『00000000000602050502FF00』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
05
功能码。
0502
欲写入的地址。
FF00
写入的控制数据为H'FF00。
例2:
ModbusTCP通讯模式下,设置站号为2的从站Y2=OFF
Master—Slave的数据『000000000006020505020000』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
05
功能码。
0502
欲写入的地址。
0000
写入的控制数据为H'0000。
Slave—Master的数据『000000000006020505020000』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
05
功能码。
0502
欲写入的地址。
0000
写入的控制数据为H'FF00。
功能码06
功能码06用于对寄存器(字装置)进行写单笔操作。
例1:
ModbusTCP通讯模式下,设置站号为2的从站地址H'601的内容为K4
Master—Slave的数据『000000000006020616010004』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
06
功能码。
1601
欲写入的地址。
0004
写入的控制数据为H'0004。
Slave—Master的数据『000000000006020616010004』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
06
功能码。
1601
欲写入的地址。
0004
写入的控制数据为H'004。
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0009
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
0F
功能码。
0500
000A
欲写入的位装置的起始地址。
欲写入的位装置个数(bits)。
02
CD01
装置
Y11
Y10
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
状态
•
■
•
■
数值
1
C
D
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
0F
功能码。
0500
欲写入的位装置的起始地址。
000A
欲写入的位装置个数(bits)。
数据
说明
Master—Slave的数据『000000000009020F000A02CD01』
欲写入位装置的数目(bytes),8bits为1byte。
当写入位装置的数目不足1byte时,以1byte计算。
欲写入的数据内容(Y11…Y0的状态)。
Slave—Master的数据『000000000006020F0500000A』
功能码16
功能码16用于对字装置进行写多笔操作。
例1:
ModbusTCP通讯模式下,设置站号为2的从站地址H'1618=K500(01F4H);
H'1619=K1000(03E8H);H'161A=K2000(07D0H)。
装置地址
内容值
H'1618
01F4H
H'1619
03E8H
H'161A
07D0H
Master—Slave的数据『00000000000B0210161800030601F403E807D0』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
000B
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
10
功能码。
1618
欲与入的字装置起始地址。
0003
欲与入的字装置个数(words)。
06
欲与入字装置的数目(bytes),1word为2bytes。
01F4
写入的第一笔控制数据为H'1F4。
03E8
写入的第二笔控制数据为H'3E8。
07D0
写入的第二笔控制数据为H'7D0。
Slave—Master的数据『000000000006020F0500000A』
数据
说明
0000
TransactionIdenfifier。
0000
ProtocolIdenfifier。
0006
数据长度,从【Slave的通讯地址】开始计算。
02
Slave的通讯地址。
10
功能码。
1618
欲与入的字装置起始地址。
0003
欲与入的字装置个数(words)。