您的位置:控制工程论坛网论坛 » 现场总线 » 开放的MODBUS TCP(连载三)

huarong

huarong   |   当前状态:在线

总积分:2959  2024年可用积分:0

注册时间: 2007-02-01

最后登录时间: 2019-03-21

空间 发短消息加为好友

开放的MODBUS TCP(连载三)

huarong  发表于 2007/10/19 18:07:11      1113 查看 0 回复  [上一主题]  [下一主题]

手机阅读

  1  MBAP报文头(MBAP: Modbus Application 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。





















































































常用公共功能代码 功能码 
 十进码    子码 十六进制


 开关量输入 读输入点 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


  表2  常用公共功能代码


  功能代码划按应用深浅分,可分为三个类别:
  (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  Modbus TCP 请求报文举例,见表3。
  表3


















































 描述


 


 大小(字节)


示例 


备注 


 MBAP


传输标志Hi



0x15


传输标志用于和应答配合使用


传输标志Lo


1


0x01


每对传输使用唯一的标志


协议标志


2


0x0000


该域可用作寻址Modbus/
Modbus+子网络的路由,这
时,此值含有目的设备的地址


长度


2


0x0006


单元标志


2


0xFF


Modbus
请求


功能代码


1


0x03


读寄存器


起始地址


2


0x0005


 


寄存器数


2


0x0001


  5  Modbus TCP客户端的实现
  用Connect( )命令建立对目标设备TCP502端口的连接。
  数据通讯的过程如下:
  (1)  准备Modbus报文,包括7个字节的MBAP在内的请求;
  (2)  使用Send( )命令发送;
  (3)  在同一连接等待应答;
  (4)  用recv( )读报文,完成一次数据交换过程。
  当通讯任务结束时,关闭TCP连接,使服务器可以为其它设备服务。


  6  Modbus TCP的样板程序
  用户可以通过网络www.transparentfactory.com下载。
  (1)  基于WIN32系统下,C的应用程序。
  (2)  基于UNIX系统下,C的应用程序。
  (3)  JAVA的应用程序。


  7  Modbus TCP协议
  协议文本的英文版可从www.modbus.org下载。


  8  Modbus的应用
  Modbus 是一种通讯协议,于 1979年由Modicon公司发明,并将其公开,推向市场,是基于主站从站/ 客户机服务器方式连接智能设备,实现设备间的数据交换。


  Modbus 的通讯几乎可以通过任何物理介质实现,如:电线、光纤、红外、射频、扩频、微波、卫星等。Modbus 还可以通过不同的网络进行互连,如:以太网、ADSL、ISDN、PSTN、ATM、FR等。所以它具有很强的扩展能力,可以说:连接的距离已不是问题,它可以通过互联网,连接到世界的任何地方。


  Modbus 具有很高的速度性能:响应时间小于10毫秒,目前可以满足工业控制中90% 应用的需求,它的下一个实现目标是:响应时间小于1毫秒。


  由于Modbus 是制造业、基础设施环境下,真正的开放协议,故得到了工业界的广泛支持,是事实上的工业标准。还由于它的协议简单、容易实施和高性价比,所以全球有超过400个厂家支持,使用的设备节点超过700万个。


  9  典型应用介绍
  人机界面+可编程控制器+变频调速器应用(HMI+PLC+VSD)
  这是一种设备制造商(OEM)和传统设备改造时,经常使用的方案,典型配置如图1所示。




  图1  设备制造商或设备改造项目典型应用


  图中人机界面可以是图形的,也可以是文字的,一般文字型HMI比图形的HMI要价格低廉。图中的变频器只画了一台,实际上使用RS485的多站总线,最多可以连接31台。可编程控制器可按工艺要求,可对变频器的速度进行调节。


  完成上述方案的关键是用知道变频器内部的命令字和各参数的寄存器号,下面就施耐德公司的ATV58变频器来说明PLC是如何操作变频器的。
  命令字CMD(变频器地址W400)
  位15:1,简单控制方式;
  位1:=0串行连接无效
  =1串行连接有效;
  位7:=0
  =1 故障复位;
  位8:=0 激活半行连接控制
  =1 取消串行连接控制;
  位11:=0 正转
  =1 反转;
  位12:=0 运行
  =1 停止(减速停车);
  位13:=0
  =1 直流注入停车;
  位14:=0
  =1 快速停车。


  可以通过可编程控制器的Modbus写命令,把代码发送到W400寄存器中,实现对变频器的控制。
  举例:
  正转运行 CMD="H"'002'
  频率给定 W401 LFR
  转速给定 W603 LFRD
  反转运行 CMD="H"'802'
  频率给定 W401LFR
  转速给定 W603 LFRD
  减速停车 CMD="H"'002'
  直流注入停车CMD=H'A002'
  快速停车 CMD="H"'C002'
  自由停车 CMD="H"'000'
  因为设备制造商对价格比较敏感,所以也有把上述标准的配置进行简化的版本,如图2所示。



  图2  设备制造商或设备改造项目典型应用简化版
  (a)省略人机界面HMI(b)省略PLC


  控制和操作的原理基本上是相同的。

1楼 0 0 回复