MODBUS规约中文说明书Word文档下载推荐.docx
《MODBUS规约中文说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《MODBUS规约中文说明书Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。
典型的从设备:
可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:
设备(或广播)地址、功能代码、所有要发送的数据、错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和错误检测域。
如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将建立错误消息并把它作为回应发送出去。
在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。
如果控制器发送消息,它只是作为主设备,并期望从从设备得到回应。
同样,当控制器接收到消息,它将建立一从设备回应格式并返回给发送的控制器。
.主设备查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
例如功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必须包含要告之从设备的信息:
从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
.从设备回应
如果从设备产生正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据:
像寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
每个MODBUS帧都包括地址域功能域数据域错误检测域
RTU方式
地址
功能代码
数据数量
数据1
...
数据n
CRC高字节
CRC低字节
地址域功能域数据域错误检测域
帧定界:
MODBUSRTU方式下,每两个字符之间发送或者接收的时间间隔不能超过1.5倍字符传输时间。
如果两个字符时间间隔超过了3.5倍的字符传输时间,规约就认为一帧数据已经接收,新的一帧数据传输开始。
ASCII方式
ASCII模式
:
LRC高字节
LRC低字节
回车
换行
帧定界:
“:
”帧起始“CRLF”帧结束
ASCII方式用两个ASCII字符表示一个8位数据,比如16进制的3A用字符“3”和字符“A”表示。
MODBUSTCP
MODBUSTCP模式下,由于模块的地址由IP地址确定,所以不再有地址域内容,考虑到TCP网络是可靠的数据传输网络,故不再有校验数据。
但是考虑到在IP网上数据到达的顺序可能与我们预期的数据不一致,故增加了一个数据序号,考虑到在MODBUSTCP协议上承载MODBUS协议,还在头部数据中增加了一个地址域。
MODBUSTCP/MODBUS桥
STC-511可以用于MODBUSTCP到MODBUS的桥设备使用,作为MODBUS桥设备时,需要在地址域上加上地址,另外对应的串口需要设置为MODBUS主设备。
由于存在两个串口设备,地址域的最高位MSB=1则访问串口2,MSB=0则访问串口1。
地址域广播地址是把低7位全部置为1,在发送到MODBUS总线时,地址修改为0。
地址域为0表示不访问MODBUS串口设备。
支持命令
我们目前所支持的功能码非常有限,主要包括:
01READCOILSTATUS
02READINPUTSTATUS
03READHOLDINGREGISTERS
04READINPUTREGISTERS
05FORCESINGLECOIL
06PRESETSINGLEREGISTER
15FORCEMULTIPLECOILS
16FORCEMULTIPLEREGISTERS
20READFILERECORD
21WRITEFILERECORD
24READFIFOQUEUE
读继电器状态
功能码:
01
数据起始地址:
00001~00008
数据长度:
不大于08(因为只有8个输出继电器)
读取输出继电器的状态。
数据说明:
描述
说明
00001
第1个输出继电器
=1吸合=0断开
00002
第2个输出继电器
00003
第3个输出继电器
00004
第4个输出继电器
00005
第5个输出继电器
00006
第6个输出继电器
00007
第7个输出继电器
00008
第8个输出继电器
00009
第9个输出继电器(虚拟)
00010
第10个输出继电器(虚拟)
00011
第11个输出继电器(虚拟)
00012
第12个输出继电器(虚拟)
00013
第13个输出继电器(虚拟)
00014
第14个输出继电器(虚拟)
00015
第15个输出继电器(虚拟)
00016
第16个输出继电器(虚拟)
MODBUS请求
功能码
1BYTE
0X01
起始地址
2BYTE
0X0000TO0XFFFF
读取数量
1TO2000(0X7D0)
MODBUS响应
字节计数
N
线圈状态
nBYTE
n=NorN+1
N=读取数量/8如果余数不为0则N=N+1
错误响应
0X01+0X80
错误代码
0x1or0x2or0x3or0x4
举例
请求
响应
域名称
数据(hex)
01
起始地址高(字节)
00
03
起始地址低(字节)
13
27(h)~20状态
CD
读取数量高(字节)
35(h)~28状态
6B
读取数量低(字节)
38(h)~36状态
05
读开关量输入
02
100001~1000016
不大于16(因为只有16路输入)
读取输入开关量的状态。
输入的量改变状态需要经过0.1S滤波抗干扰后才会变化。
如果用户想知道改变的时刻,需要读取系统的FIFO中的SOE事件记录或者读取文件中的SOE记录。
输入量的每次改变都会累积到该路对应的32位计数器上,对于计数,输入的最高频率可以是1KHz。
100001
第1路开关量状态
=0没有通电=1接通电源
100002
第2路开关量状态
100003
第3路开关量状态
100004
第4路开关量状态
100005
第5路开关量状态
100006
第6路开关量状态
100007
第7路开关量状态
100008
第8路开关量状态
100009
第9路开关量状态
100010
第10路开关量状态
100011
第11路开关量状态
100012
第12路开关量状态
100013
第13路开关量状态
100014
第14路开关量状态
100015
第15路开关量状态
100016
第16路开关量状态
0X02
输入状态
0X02+0X80
02
C4
204(h)~197状态
AC
212(h)~205状态
DB
16
218(h)~213状态
35
读保持寄存器
03
400001-400128
不大于125(因为通信缓冲区的限制)
读取保持寄存器的值。
读取的是16位整数或者无符合整数。
地