Modbus资料Word文件下载.docx
《Modbus资料Word文件下载.docx》由会员分享,可在线阅读,更多相关《Modbus资料Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。
注释
01
ReadCoilStatus
(线圈状态0x)(读PLC的输出状态)
bit读位,与5对应,可读可写DO
02
ReadInputStatus
(输入状态1x)(读PLC的输入状态)
bit读位,只读DI
03
ReadHoldingRegister
(保持寄存器4x HR)(读模出状态)
读整形、状态字、浮点型、字符型,与16对应
04
ReadInputRegister
(输入寄存器3x AR)(读PLC模入状态)
读整形、状态字、浮点型 只读AI
05
WriteSingleCoil
(强制单路输出,给PLC写数据)
写单个位可读可写DO
06
WriteSingleRegister
(强制单路模出,给PLC写数据)
写单个整形、状态字、浮点型、字符型,写HR4x的地址区
15
WriteMultipleCoil
(强制多路输出,给PLC写数据)
写多个位
16(0x10H)
WriteMultipleRegister
(强制多路模出,给PLC写数据)
写多个整形、状态字、浮点型、字符型
15和16可能是用于一次写一串数据的,不允许单个写。
如时刻的世纪、年、月、日、时、分、秒要一次写下去
设备和Modbus地址范围对应表
设备地址
Modbus地址
描述
功能
R/W
1...10000*
address-1
Coils(outputs)
Read/Write
10001...20000*
address-10001
DiscreteInputs
Read
40001...50000*
address-40001
HoldingRegisters
30001...40000*
address-30001
InputRegisters
*最大值与设备相关
注:
设备地址是从1开始的,所以Modbus写入地址要在设备地址上减1。
协议格式
功能码:
01 (线圈状态0x)(读输出状态)
例:
从4站读10…22(Coil11…23),从A开始,共D(13)个数据
主站
从站地址
H 地址
L 地址
HCoils
LCoils
CRC
00
0A
0D
DD
98
从站
字节数
Coils7..10
Coils27..20
04
11
50
B3
02 (输入状态1x)(读输入状态)
从4站读10…22(Input10011…10023),从A开始,共D(13)个数据
HInput
LInput
99
Input7..10
Input27..20
14
03 (维持寄放器4x HR)(读模出状态)
从1站读0…1(寄放器40001…40002),共2个数据
H 数据
L 数据
C4
0B
H数据
L数据
01
DA
31
04 (输入寄放器3x AR)(读模入状态)
从1站读0…1(寄放器30001…30002),共2个数据
71
CB
DB
86
05 强制单路输出,给PLC写数据
给17站173单线圈写ON
AC
FF
4E
8B
写0xFF00表示ON,写0x0000表示OFF
11
返回帧与主站相同
06 强制单路模出,给PLC写数据
给17站40002变量写0x0003H。
帧的地址是0x0001H
9A
9B
11
返回帧与主站相同
15 强制多路输出,给PLC写数据
给17站从20号线圈开始的10个单线圈写ON,MB地址:
20-1=19=0x13H
数据:
帧中位
1
1
0
1
1
位置
7
6
5
4
3
2
13
12
10
9
8
本例位置
起始位为20
27
26
25
24
23
22
21
20
-
29
28
主站
H线圈数量
L线圈数量
0F
CD
BF
变量写的从站反馈没有数据
16 强制多路模出到维持寄放器,给PLC写数据,每一个寄放器的数据为2个字节。
例:
给17站从40002HR开始的2个寄放器,数据为000A和0102,MB地址:
40002-1=40001=MB1
主站
H地址
L地址
H模入数量
L模入数量
H
L
数据2
C6
F0
Modbus的从站反馈数据没有数据帧的编号(不像TCP协议那样),所以不会显示那个反馈数据是主站的哪次请求的。
若主站一次发送N个数据,从站而没有及时反馈,如此就乱了,主站就不明白从站发过来的数据是哪次命令的。
单变量与多变量:
读能够读单读多,命令不分读几个。
可是写要区分写一个仍是写多个,所以写命令有写单线圈和写多线圈。
Modbus所有功能码
作用
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)
读取输入状态
取得一组开关输入的当前状态(ON/OFF)
读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值
强置单线圈
强置一个逻辑线圈的通断状态
预置单寄存器
把具体二进值装入一个保持寄存器
07
读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态
08
回送诊断校验
把诊断校验报文送从机,以对通信处理进行评鉴
09
编程(只用于484)
使主机模拟编程器作用,修改PC从机逻辑
控询(只用于484)
可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成操作任务,仅在含有功能码9的报文发送后,本功能码才发送
读取事件计数
可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
读取通信事件记录
可是主机检索每台从机的ModBus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误
编程(184/384484584)
可使主机模拟编程器功能修改PC从机逻辑
探询(184/384484584)
可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送
强置多线圈
强置一串连续逻辑线圈的通断
16
预置多寄存器
把具体的二进制值装入一串连续的保持寄存器
17
报告从机标识
可使主机判断编址从机的类型及该从机运行指示灯的状态
18
(884和MICRO84)
可使主机模拟编程功能,修改PC状态逻辑
19
重置通信链路
发生非可修改错误后,是从机复位于已知状态,可重置顺序字节
读取通用参数(584L)
显示扩展存储器文件中的数据信息
写入通用参数(584L)
把通用参数写入扩展存储文件,或修改之
22~64
保留作扩展功能备用
65~72
保留以备用户功能所用
留作用户功能的扩展编码
73~119
非法功能
120~127
保留
留作内部作用
128~255
用于异常应答
ModBus功能码与数据类型对应表
代码
数据类型
读
位
整型、字符型、状态字、浮点型
整型、状态字、浮点型
写
N/A
重复“回路反馈”信息
字符型
Modbus变量地址
映射地址
功能
地址类型
存取方式
描述
0xxxx
01,05,15
Coil
读写
1xxxx
02
离散输入
只读
2xxxx
03,04,06,16
浮点寄存器
两个连续16位寄存器表示一个浮点数(ieee754格式32位)
3xxxx
04
输入寄存器
每个寄存器表示一个16位无符号整数(0~65535)同上
4xxxx
03,06,16
保持寄存器
5xxxx
ascii字符
每个寄存器表示两个ascii字符
FAQ0:
ABB组态软件有功能块读线圈-1,读线圈-8,读寄放器-1,读寄放器-8的原因是什么?
因为Modbus功能码的读操作能够指定数据长度。
若是从站的地址持续,则能够用一次读八个变量的操作。
若是不持续,能够一次读一个。
读八个的效率要高一些。
FAQ1 :
MB地址的问题:
MB经常常利用30001,40001如此的地址,WHY?
给个理由。
ANS1 :
地址以3开头,如IFIX的mb1中地址用3000一、300一、300001表示的是功能码4的操作,即读输入寄放器。
同理,地址以4开头表示的是功能码3的操作,即对指的是对输出寄放器/内部寄放器进行的操作。
虽然Modbus有两个字节表示地址0xFFFF,共64K,可是一般用不了那么多的。
高安屯垃圾电厂DCSModbus通信点表
DCS-TAG_№
DESCRIPTION
Type
Data
Addr.
XA0FG10-1
ACTIVATEDCARBONSTORAGESILOVENTINGFILTERFANFAULT
DI
BOOL
00407
HC#RC10-O
No.#INLETDAMPERFORNIDSYSTEMAINSERVICECOMMAND
DO
10001
ATO#FG03-S
No.#SETPOINTSO2EMISSION
AO
INT
30002
AI#RC01
No.#REACTORINLETGASSO2ANALYZER
AI
40001
地址以2开头表示浮点数,以0,1,3,4开头表示整数。
FAQ2:
Modbus功能码的名称来源是什么?
ANS2:
因为Modbus主要用于与PLC通信,所以Modbus的地址空间命名也服从PLC的方式。
功能码
名称
注释
01
ReadCoilStatus
读PLC的输出状态,可能是内部量
可读可写
ReadInputStatus
读PLC的输入DI点状态
只读DI,通道来
03
ReadHoldingRegister
读PLC内部模拟量
ReadInputRegister
读PLC的模入AI状态
只读AI,通道来
05
WriteSingleCoil
给PLC写开关量数据
写单个位
06
WriteSingleRegister
给PLC写模拟量数据
写模拟量
15
WriteMultipleCoil
给PLC写多个开关量数据
写多个位
16(0x10H)
WriteMultipleRegister
给PLC写多个模拟量数据
写多个模拟量
列出PLC的线圈与寄放器的分派如下,以三菱FX2n介绍:
辅助继电器
(M线圈)
一般
500点
M0到M499
锁定
2572点
M384至M3071
特殊
256点
M8000至8255
状态继电器
(S线圈)
490点
S0至S499
400点
S500至S899
初始
10点
S0至S9
信号报警器
100点
S900至S999
数据寄存器(D)
200点
D0至D199
类型:
32位元件的16位数据存储寄存器
7800点
D200至D7999
文件寄存器
7000点
D1000至D7999通过14块500程式步的参数设置类型:
16位数据存储寄存器
从D8000至D8255
变址
16点
V0至V7和Z0至Z7
松下FP1—C40寄放器I/O配置表
符号
编号(地址)
功能说明
外部
输入/
输出
继电
器
X(位)
X0~X12F
(主机X0~X17)
输入继电器
总点数208点,主机24点,用来存储外部输入信号
WX(字)
WX0~WX12(13个字)
Y(位)
Y0~Y12F(主机Y0~YF)
输出继电器
总点数208点,主机16点,用来存储程序运行结果并输出
WY(字)
WY0~WY12(13个字)
内
部
继
电
R(位)
R0~R62F
通用内部继电器
只能在PLC内部供用户编程使用,不能用于输出
WR(字)
WR0~WR62
R9000~R903F
特殊内部继电器
每个继电器均具有特殊用途,用
户只能使用其接点,不能用程序
控制其状态,不能用于输出
数据
寄存器
DT(字)
DT0~DT1659(1,660字)
通用数据寄存器
用来存储PLC内处理的数据
DT9000~DT9069(70字)
特殊数据寄存器
具有特殊用途的数据寄存器,不能存储用户数据