当前位置:文档之家› Modbus协议与现场总线解析只是分享

Modbus协议与现场总线解析只是分享

Modbus协议与现场总线解析
3.1.1 Modbus 协议的物理层 1.网络结构
Байду номын сангаас总线式主从结构 主设备:PC机,PLC 从设备:PLC,智能仪表 一个主站可有1—253个从站, 从站之间不能相互通讯。
2.通讯方式
(a)一对一:主设备可以和从设备通讯,从设备响应。 (b)一对N(广播):主设备对N个从设备,从设备无响应。
uchCRCHi 1 1 1 1 1 1 1 1
XOR 1 1 0 0 0 0 0 1
uchCRCLo 0 0 1 1 1 1 1 0
uchCRCHi = auchCRCLo[0xFD]
10000001
2 ST
00000111
uchCRCLo 0 0 1 1 1 1 1 0 XOR
uIndex 0 0 1 1 1 0 0 1
温度
2008H
液位
200CH
流量
(2) 根据主站MODUBS命令读 寄存器。
(2)发送数据
将所读寄存器发送出去
主站一次可能读一个寄存器,也可能 读多个寄存器。
实际设计考虑问题 (1). Modbus命令帧结束判定方法, (2).帧间隔控制方法 (3)如何解决通讯数据串位及数据残
缺等异常情况对通讯的影响.
3.2.3 从站接收命令帧方法
如何确定MODBUS帧结束?
(1).设置一个定时器,定时3.5 char时间
(2).每接收一个数据,启动定时器定时.
(3).定时时间到,说明在3.5 char时间里没有通讯数据,表明帧结束,
在定时中断服务程序中处理Modbus 命令.
地址 功能码 变量地址
变量数
CRC校验
题: 有某地址为1的从设备,其变量定义如下:
主机请求
寄存器地址 变量定义 字节数


0000H 量程(参数) 2byte
从机响应
0002H 测量值
2 byte
例1:主设备用3号命令寻址地址为1的从设备,读取寄存器地址为0000H 的量程.
主设备命令帧
地址 功能码
01H
03H
变量地址高 变量地址低 变量数高
数据长度
CRC高位表 CRC低位表
auchCRCHi[0x39] auchCRCHi[0xFD]
auchCRCLo[0x39] auchCRCLo[0xFD]
CRCLo 1 1 1 1 1 1 1 1
1 ST
0 0 0 0 0 0 1 0 XOR
uIndex 1 1 1 1 1 1 0 1
auchCRCHi[0xFD] = 0xC1
00H
00H
00H
变量数低 CRC校验
01H
**
从设备响应帧
地址
功能码
01H
03H
字节数 02H
数据1 03H
数据2 E8H
CRC校验
**
流量 = 3E8H =1000
例2:主设备用4号命令寻址地为1的从设备, 读取地址为0002H 的 测量值
主设备命令帧
地址
01H
功能码 04H
变量地址
0002H
(3) 生成多项式最高位总是 1,所以实际中的 生成多项式为 1000 0000 0000 0101
(4) Modbus 采用逆序生成多项式 1010 0000 0000 0001
(5) CRC本质:移位异,是1与生成多项式或和
2:CRC方法
1
02
1
07
3.CRC计算程序(标准程序) 数据指针
CRLF 0D0A
2. RTU格式(用二进制数表示数据)
(1) RTU帧格式
(2)说明: a.地址域:从设备地址0-253,地址0为广播地址。 b.功能域:代码范围1-255,命令从设备执行哪些功能(如读测量值,
读开关量状态) c.数据域:(两部分内容) 主设备到从设备:变量起始地址、变量个数。
从设备到主设备 : 字节数n、数据n。
auchCRCH[0x39] =0xC0
uchCRCHi 1 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 XOR
uchCRCLo 0 1 0 0 0 0 0 0 1
例: x[2]={0x02,0x07}; CRC_n= CRC16( x, 2);
uchCRCHi =auchCRCLo[0x39] = 0x12
0地址表示广播地址。
3.物理层 支持RS-485、RS-232C。
3.1.2 Modbus协议的帧格式 Modbus有两种格式: ASCII格式; RTU格式
1.ASCII码帧格式(用ASCII 表示数据)
COLON (:) 3A
(1).字节格式
(2).数据表示方法 地址:21 表示ASCII码 32H,31H
结果 0x1241
3.2 Modbus协议通讯从站软件设计
3.2.1 从站软件设计要求
3.2.2 从站软件设计内容
(1).主站使用Modbus 04号命令采集从站测量数据
压 (2).寄存器应用层定义
1.接收数据 (1) 串口接收数据
Modbus 寄存器
寄存器地址 寄存器内容
2000H
压力
2004H
3.功能码4:读取一个或多个输入寄存器值 主要用于读取设备测量数据 从寄存器8开始读一个寄存器值
4. 功能6:写单个寄存器 例:从寄存器地址1开始,写一个寄存器值03
寄存器地址:0001H 寄存器: 0002H
5. 功能码16:写多个寄存器
主机从01H地址开始写2个寄存器
从机响应主机
3.1.4应用举例
变量数 0001H
CRC校验
##
从设备响应
地址 功能码 字节数 数据1 数据2 CRC CRC
01H 04H 02H 03H 20H ** **
测量值 = 320H =800
问题:测量值有小数和正负怎么办?
3.1.5 CRC-16校验
1.说明: (1) CRC校验 = 地址码 + 功能码 +数据
(2) 生成多项式 G(x)=X^16+X^15+X^2+1 (1 1000 0000 0000 0101)
定时中断 帧结束,读 命令回答 数据
动定时器
主站发给从站读寄存器命令 8byte,从站3.5char后回答数据
d.检错:CRC-16, 生成多项式 Y=X^16+X^15+X^2+1。
3.1.3 ModBus功能码
1. Modbus功能码
2.功能码3:读取在一个或多个保持寄存器中取得当前的二进制值
例:主机命令:读6BH开始的3个寄存器内容 从机响应:回传6个字节数据
该功能码主要用于读取设备参数
说明 (1)应用层: 寄存器中存储的内容用户定义。 (2)寄存器地址与寄存器:寄存器号减1为寄存器地址
相关主题