modbus协议Word格式文档下载.docx
- 文档编号:6492624
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:23
- 大小:63.78KB
modbus协议Word格式文档下载.docx
《modbus协议Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《modbus协议Word格式文档下载.docx(23页珍藏版)》请在冰点文库上搜索。
数据段包括了从设备收集的数据:
象寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
二、两种传输方式
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
ASCII模式
:
地址
功能代码
数据数量
数据1
...
数据n
LRC高字节
LRC低字节
回车
换行
RTU模式
CRC高字节
CRC低字节
所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
在其它网络上(象MAP和ModbusPlus)Modbus消息被转成与串行传输无关的帧。
1、ASCII模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。
这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统
·
十六进制,ASCII字符0...9,A...F
消息中的每个ASCII字符都是一个十六进制字符组成
每个字节的位
1个起始位
7个数据位,最小的有效位先发送;
;
//只有7个数据位
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
错误检测域
LRC(纵向冗长检测)
2、RTU模式
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。
这种方式的主要优点是:
在同样的波特率下,可比ASCII方式传送更多的数据。
8位二进制,十六进制数0...9,A...F
消息中的每个8位域都是一个两个十六进制字符组成
8个数据位,最小的有效位先发送
1个停止位(有校验时),2个Bit(无校验时),,,/////为了凑够11位
CRC(循环冗长检测)
三、Modbus消息帧
两种传输模式中(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。
部分的消息也能侦测到并且错误能设置为返回结果。
1、ASCII帧
使用ASCII模式,消息以冒号(:
)字符(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。
其它域可以使用的传输字符是十六进制的0...9,A...F。
网络上的设备不断侦测“:
”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。
消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。
一个典型消息帧如下所示:
起始位
设备地址
数据
LRC校验
结束符
1个字符
2个字符
n个字符
3AH0DH,0AH
图2ASCII消息帧
2、RTU帧
使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。
在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4所示)。
传输的第一个域是设备地址。
可以使用的传输字符是十六进制的0...9,A...F。
网络设备不断侦测网络总线,包括停顿间隔时间内。
当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。
在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。
一个新的消息可在此停顿后开始。
整个消息帧必须作为一连续的流转输。
如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。
同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。
这将导致一个错误,因为在最后的CRC域的值不可能是正确的。
一典型的消息帧如下所示:
CRC校验
T1-T2-T3-T4
8Bit
n个8Bit
16Bit
图3RTU消息帧
3、地址域
消息帧的地址域包含两个字符(ASCII)或8Bit(RTU)。
可能的从设备地址是0...247(十进制)。
单个设备的地址范围是1...247。
主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。
当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。
地址0是用作广播地址,以使所有的从设备都能认识。
当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。
4、如何处理功能域
消息帧中的功能代码域包含了两个字符(ASCII)或8Bits(RTU)。
可能的代码范围是十进制的1...255。
当然,有些代码是适用于所有控制器,有此是应用于某种控制器,还有些保留以备后用。
当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为。
例如去读取输入的开关状态,读一组寄存器的数据内容,
2楼:
>
参与讨论
作者:
兴隆于2005-10-2410:
45:
00发布:
顶住.
3楼:
chunyang于2005-10-2412:
02:
实用资料——Modbus通信协议2
ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表1是ModBus的功能码定义。
表1ModBus功能码
功能码
名称
作用
01
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)
02
读取输入状态
取得一组开关输入的当前状态(ON/OFF)
03
读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值
04
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值
05
强置单线圈
强置一个逻辑线圈的通断状态
06
预置单寄存器
把具体二进值装入一个保持寄存器
07
读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态
08
回送诊断校验
把诊断校验报文送从机,以对通信处理进行评鉴
09
编程(只用于484)
使主机模拟编程器作用,修改PC从机逻辑
10
控询(只用于484)
可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
11
读取事件计数
可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12
读取通信事件记录
可是主机检索每台从机的ModBus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误
13
编程(184/384484584)
可使主机模拟编程器功能修改PC从机逻辑
14
探询(184/384484584)
可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送
15
强置多线圈
强置一串连续逻辑线圈的通断
16
预置多寄存器
把具体的二进制值装入一串连续的保持寄存器
17
报告从机标识
可使主机判断编址从机的类型及该从机运行指示灯的状态
18
(884和MICRO84)
可使主机模拟编程功能,修改PC状态逻辑
19
重置通信链路
发生非可修改错误后,是从机复位于已知状态,可重置顺序字节
20
读取通用参数(584L)
显示扩展存储器文件中的数据信息
21
写入通用参数(584L)
把通用参数写入扩展存储文件,或修改之
22~64
保留作扩展功能备用
65~72
保留以备用户功能所用
留作用户功能的扩展编码
73~119
非法功能
120~127
保留
留作内部作用
128~255
用于异常应答
ModBus网络只是一个主机,所有通信都由他发出。
网络可支持247个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。
采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。
表2是ModBus各功能码对应的数据类型。
表2ModBus功能码与数据类型对应表
代码
功能
数据类型
读
位
整型、字符型、状态字、浮点型
整型、状态字、浮点型
写
N/A
重复“回路反馈”信息
字符型
(1)ModBus的传输方式
在ModBus系统中有2种传输模式可选择。
这2种传输模式与从机PC通信的能力是同等的。
选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。
一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)这两种模式的定义见表3
表3ASCII和RTU传输模式的特性
特性
ASCII(7位)
RTU(8位)
编码系统
十六进制(使用ASCII可打印字符:
0~9,A~F)
二进制
每一个字符的位数
开始位
1位
数据位(最低有效位第一位)
7位
8位
奇偶校验(任选)
1位(此位用于奇偶校验,无校应则无该位)
停止位
1或2位
错误校验
LRC(即纵向冗余校验)
CRC(即循环冗余校验)
ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortan)编程的主计算机及主PC很适宜。
RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。
如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。
用以构成报文的ASCII字符都是十六进制字符。
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。
表4给出了以RTU方式读取整数据的例子
以RTU方式读取整数据的例子
主机请求
第一个寄存器的高位地址
第一个寄存器的低位地址
寄存器的数量的高位
寄存器的数量的底位
00
38
XX
从机应答
字节数
数据高字节
数据低字节<
4楼:
南方的老树于2005-10-2412:
34:
呵呵顶
5楼:
yewuyi于2005-10-2414:
18:
请问chunyang前辈有没有使用MODBUS的实际工程经验?
呵呵,我有一个产品将要使用MODBUS协议,所以可能有需要向前辈请教的地方了,还望到时候前辈不吝指教了哦!
6楼:
caorb于2005-10-2416:
13:
请问支持MODBUS通讯的单片机所需的硬件资源是?
7楼:
chunyang于2005-10-2417:
57:
Modbus重要的是思想而非简单套用
其实我一直鼓励同行将其结构引入无线通讯,我自己也是这么干的,借鉴其帧结构作为无线数字通讯设备的应用层协议。
协议本身不需要硬件资源,只是Modbus常用在电力行业的485网络上,但Modbus的适用场合远不仅此。
8楼:
javie于2005-10-2418:
33:
嗯
9楼:
陈双君于2005-10-2420:
12:
读
02
03
04
05
写
06
08
N/A
15
16
17
特性
ASCII(7位)
编码系统
0~9,A~F)
每一个字符的位数
开始位
1位
数据位(最低有效位第一位)
7位
奇偶校验(任选)
1位(此位用
10楼:
yewuyi于2005-10-258:
47:
我不是用在电力上的
打算做的是大型超市里所有温度和湿度控制器,以及控制器与上位机的通信。
确实是打算用485+MODBUS,呵呵,不好意思,我还只能是简单套用套用,我现在遇到的一个主要问题就是:
因为控制器与上位机可以交换主从方式,当下位机为主控制方式时,他们的发送冲突如何解决?
多谢chunyang前辈的指点。
11楼:
chunyang于2005-10-259:
42:
加入“令牌”传送
谁持有令牌谁说话
12楼:
yangtse于2005-10-2510:
08:
收藏
13楼:
收藏。
谢谢!
14楼:
jinbiao于2005-10-2515:
40:
已经COPY了
15楼:
伊莱克斯于2005-10-2617:
51:
踢个场子先:
D,在利尔达的网站上面下载区有个WORD文档,说得更全
自己用MODBUS作为关键字在利尔达(TI的代理)的网站的下载部分找一下
16楼:
伊莱克斯于2005-10-2618:
00:
在无偿奉献一个MODBUSRTU的CRC算法子程序,PIC的汇编
入口:
Frame_Buff_0开始的顺序RAM为CRC的校验RAM序列,Interrupt_Temp1是校验RAM的数量。
这个程序是我写的,其他语言的算法都可以在GOOGLE上面搜索到。
比如:
Frame_CRC_Calculate:
movlw
0xFF
预置16位寄存器为十六进制FFFF(即全为1)。
称此寄存器为CRC寄存器;
movwf
CRC_Byte_L
CRC_Byte_H
Frame_Buff_0
FSR
Frame_CRC_Calculate_Loop:
movf
Interrupt_Temp1,W
skpnz
goto
Frame_CRC_Calculate_Over
INDF,W
Calculate_CRC:
xorwf
CRC_Byte_L,F
crc=crc^crcbuf
把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;
d'
8'
Temp2at0x70begin
Interrupt_Temp2
for(i=0;
i<
8;
i++)
Calculate_CRC_Loop:
bcf
STATUS,C
把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位
rrf
CRC_Byte_H,F
crc=crc>
1;
CRC_Byte_L,F
btfss
STATUS,C
Calculate_CRC_Loop_Jump
如果最低位为0:
重复第3步(再次移位);
b'
10100000'
如果最低位为1:
CRC寄存器与多项式A001(1010000000000001)进行异或;
crc=crc^0xa001;
crc=crc&
0xffff;
00000001'
Calculate_CRC_Loop_Jump:
decfsz
Interrupt_Temp2,F
Calculate_CRC_Loop
incf
FSR,F
decf
Interrupt_Temp1,F
Frame_CRC_Calculate_Loop
Frame_CRC_Calculate_Over:
return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- modbus 协议
![提示](https://static.bingdoc.com/images/bang_tan.gif)