主控制器可以发出查询帧和广播帧。查询帧对应一个来自网络设备的响应帧。广播帧通知所有设备,不需要响应。每一帧均有一个地址栏、一个功能栏、一个数据栏和一个校验栏。
地址栏 | 功能栏 | 数据栏 | 校验栏 |
任何一个使用从机地址0的查询帧就是广播帧。在广播帧中只有MODBUS功能5, 6, 8, 15,和16才是有效的。
在查询帧中地址栏为变送器的轮询地址。在响应帧中地址栏为响应设备的轮询地址。在广播帧中地址栏为一个0,它告诉网络上的设备不需要回答。
在查询帧或广播帧中,功能栏位含有一个功能码,它表示对在数据拦中映射地址的阅读指令,书写指令或诊断的指令。在一个响应帧中,功能栏位含有功能码用来验证装置对指令的响应。
如果在功能栏位中的最高有效位元被设定,数据拦含有异常响应用来说明在处理命令中遇到的任何错误。
变送器使用了MODBUS功能码的一部分。包括读指令、写指令和诊断指令。
读指令:包括功能01(读卷状态),02(读输入状态),03(读保持寄存器),04(读输入寄存器),17(读设备识别码)。
写指令:包括功能05(写卷),06(写寄存器),15(写多卷),16(写多寄存器)。
诊断指令:包括功能07(读异常状态),08(循环诊断)。
下表给出变送器支持的功能。
功能码 | 类型 | 描述 | 功能解释 |
01 | 读 | 读卷状态 | 读一个或连续卷的开关状态 |
02 | 读 | 读输入状态 | 读一个或连续离散量的开关状态 |
03 | 读 | 读保持寄存器 | 读一个或连续保持寄存器的二进制值 |
04 | 读 | 读输入寄存器 | 读一个或连续输入寄存器的二进制值 |
05 | 写 | 写卷 | 设置单个卷的开关状态 |
06 | 写 | 写寄存器 | 写二进制值到保持寄存器 |
07 | 诊断 | 读异常状态 | 读输入寄存器30125的状态位 |
08 | 诊断 | 循环诊断 | 发送一条测试消息给变送器用于评估通讯过程 |
15 | 写 | 写多卷 | 设置连续卷的开关状态 |
16 | 写 | 写多寄存器 | 写二进制值到连续的保持寄存器 |
17 | 读 | 读设备识别码 | 返回设备类型和操作状态 |
查询帧
区域名 | 数值(十六进制) |
从机地址 | 11 |
功能码 | 01 |
起始地址高 | 00 |
起始地址低 | 13 |
卷个数高 | 00 |
卷个数低 | 25 |
校验(LRC或CRC) | - |
响应帧
区域名 | 数值(十六进制) |
从机地址 | 11 |
功能码 | 01 |
字节数 | 05 |
数据(卷27-20) | CD |
数据(卷35-28) | 6B |
数据(卷43-36) | B2 |
数据(卷51-44) | 0E |
数据(卷56-52) | 1B |
校验(LRC或CRC) | - |
依照惯例,高位在左,低位在右。没有用的位添0。
例如请求读17号从机寄存器40108-40110的状态
查询帧
区域名 | 数值(十六进制) |
从机地址 | 11 |
功能码 | 03 |
起始地址高 | 00 |
起始地址低 | 6B |
卷个数高 | 00 |
卷个数低 | 03 |
校验(LRC或CRC) | - |
响应帧
区域名 | 数值(十六进制) |
从机地址 | 11 |
功能码 | 03 |
字节数 | 06 |
数据高(寄存器40108) | 02 |
数据低(寄存器40108) | 2B |
数据高(寄存器40109) | 00 |
数据低(寄存器40109) | 00 |
数据高(寄存器40110) | 00 |
数据低(寄存器40110) | 64 |
校验(LRC或CRC) | - |
在查询帧和广播帧中,数据栏包含需要从机去执行的信息。在响应帧中,数据栏包含从机执行的结果或者异常响应。数据拦可以包含数值、位址基准、限度或异常响应。
如果从机在响应主机命令时出现错误,那么响应帧的功能栏的最高位将被置高,数据栏包含为什么从机不能执行命令的代码。
异常响应代码如下:
异常响应 | 描述 | 响应解释 |
01 | 无效功能 | 变送器不允许执行收到的功能 |
02 | 无效地址 | 数据栏中的地址是不允许的 |
03 | 无效数据 | 数据栏中的数据是不允许的 |
06 | 忙 | 收到的消息没错,但从机正在执行一个长的程序命令 |
校验栏用于检查主机与网络设备之间传送的信息是否有错。
用户1404696 2008-6-5 13:25
用户1404696 2008-6-5 12:35
用户1404696 2008-6-5 12:24