开放的MODBUS TCP(三)

2007年11月22日 13:48:00
导读:
  1 MBAP报文头(MBAP: ModbusApplication Protocol,Modbus应用协议)
  分四个域,共7个字节,见表1。
  表1
   长度 描述 客户端 服务器端
  传输标志 2字节 标志某个Modbus
  询问/应答的传输
  由客户端生成 应答时复制该值
  协议标志 2字节 0=Modbus协议
  1=UNI-TE协议
  由客户端生成 应答时复制该值
  长度 2字节 后续字节计数 由客户端生成 应答时由服务器
  端重新生成
  单元标志 1字节 定义连接于目的
  节点的其它设备
  由客户端生成 应答时复制该值
  
  2 Modbus功能代码
  共有三种类型分别为:
  · 公共功能代码 已定义好的功能码,保证其唯一性,由Modbus.org认可。
  · 用户自定义功能代码 有两组,分别为65~72和100~110,不需要认可,但不保证代码使用的唯一性,如想变为公共代码,需要RFC认可。
  · 保留的功能代码 由某些公司使用在某些传统设备的代码,不可作为公共用途。
  常用公共功能代码见表2。
  表2 常用公共功能代码
  常用公共功能代码 功能码
  十进码 子码 十六进制
  位
  操
  作
  开关量输入 读输入点 02 02
  内部位或开关量输出 读线圈 01 01
  写单个线圈 05 05
  写多个线圈 15 0F
  16
  位
  操
  作
  模拟量输入 读输入寄存器 04 04
  内部寄存器或输出寄存器(模拟量输出) 读多个寄存器 03 03
  写单个寄存器 06 06
  写多个寄存器 16 10
  读/写多个寄存器 23 17
  屏蔽写寄存器 22 16
  文件记录 读文件记录 20 6 14
  封装接口 写文件记录 21 6 15
  读设备标识 43 14 2B
  功能代码划按应用深浅分,可分为三个类别:
  (1) 类别0,对于客户机/服务器最小的可用子集。
  · 读多个保持寄存器(fc.3);
  · 写多个保持寄存器(fc.16)。
  (2) 类别1,可实现基本互易操作的常用代码。
  · 读线圈(fc.1);
  · 读开关量输入(fc.2);
  · 读输入寄存器(fc.4);
  · 写线圈(fc.5);
  · 写单一寄存器(fc.6)。
  (3) 类别2,用于人机界面、监控系统的例行操作和数据传送功能。
  · 强制多个线圈(fc.15);
  · 读通用寄存器(fc.20);
  · 写通用寄存器(fc.21);
  · 屏蔽写寄存器(fc.22);
  · 读写寄存器(fc.23)。
  3 Modbus应用举例:读寄存器
  请求 功能码 1字节 0x03
  起始地址 2字节 0x0000到0xFFFF
  寄存器数 2字节 1到125(0x7D)
  应答 功能码 1字节 0x03
  字节数 1字节 2 x N
  寄存器的值 N x 2字节
  (N为寄存器的数量)
  出错 出错码 1字节 0x83
  例外码 1字节 01或02或03或04
  4 ModbusTCP 请求报文举例,见表3。
  表3
  描述 大小(字节) 示例 备注
  MBAP 传输标志Hi 1 0x15 传输标志用于和应答配合使用
  传输标志Lo 1 0x01 每对传输使用唯一的标志
  协议标志 2 0x0000 该域可用作寻址Modbus/
  Modbus+子网络的路由,这
  时,此值含有目的设备的地址
  长度 2 0x0006
  单元标志 2 0xFF
  Modbus
  请求
  功能代码 1 0x03 读寄存器
  起始地址 2 0x0005
  寄存器数 2 0x0001

本文转自
http://www.fieldbuses.com/n1016c45.aspx

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1897724


原文地址:https://www.cnblogs.com/feisky/p/1586620.html