技术文章

当前页面: 首页 >技术文章 >利用PG2000 的帧驱动器实现MODBUS通信

利用PG2000 的帧驱动器实现MODBUS通信

--利用PG2000 的帧驱动器实现MODBUS通信

供稿:贝加莱工业自动化(中国)有限公司 2012/1/31 9:51:56

0 人气:1191

  • 关键词: 贝加莱 B&R2005PCC MODBUS通信
  • 摘要:MODBUS 通信协议已经成为工业标准,在电力自动化和过程控制中广泛应用,设备间通讯基本采用厂家提供的驱动程序,然而不同厂家设备的联网存在协议和功能差异。本文在分析MODBUS 通讯协议的基础上,采用帧驱动器的帧函数实现MOD BUS 的全部通讯功能,具有应用灵活,简单,可靠的特性,并在贝加莱工业自动化公司的B&R2005 和阿尔斯通的现场仪表组网中应用,验证本方法的可靠性和可行性。

1  引言
  随着计算机技术、通信技术、自动控制技术的发展,传统的PLC已经发展到集3C 技术为一体的新型工业控制装置PCC ,它更能胜任大型的集散控制和复杂的过程控制。奥地利贝加莱工业自动化公司的B&R2005 就是这一装置。B&R2005 具有强大的网络通信能力,可以实现远程I/O ,CANBUS ,PROFIBUS ,以太网等网络通信。并且提供了与第三方设备之间进行通信的帧驱动器。我们的项目中需要PCC 与阿尔斯通仪表进行通信,读取阿尔斯通仪表中数据,而阿尔斯通仪表采用MODBUS 通信协议,所以我们利用帧驱动器实现工业控制中普遍采用的MODBUS 协议通信程序。

2  MODBUS 通信协议
  MODBUS 是一种工业通信和分布式控制系统协议,由美国著名的可编程控制器制造公司莫迪康公司(MODICON INC) 提出,已广泛地应用于工业控制中。MODBUS 是一种主从协议,允许一台主机与多台从机通信。MODBUS 通信协议主要包括寄存器读写,开关量I/ O 等命令。采用命令/ 间答方式,每一种命令帧都对应着一种应答帧,命令帧由主机发出,当从机收到后,应发出相应的应答帧。每个从机有一个唯一的地址,只有被访问的从机才会响应包含它的地址的查询。也可以采用广播方式,在广播方式中使用地址0 ,所有的从机把它当作一条指令执行,但不发回应答帧。在MODBUS 中有两种有效的数据传送方式,即ASCII 码和RTU 方式。我们采用RTU 方式,这种方式的主要优点是:在同样的波特率下,可比ASCII 码方式传送更多的数据。其格式如下:

  从机地址即主机要访问的设备的地址。功能代码即从机要执行的功能。数据即附属于功能代码的数据。CRC 校验数据即对前三种数据进行CRC 校验算法,所得到的CRC 校验值,用来校验传输数据的正确性。
  例如我们要读取(03功能) 地址为11(16进制)的从机寄存器的值,我们要发送如下数据帧:

  这条指令的意义是读取起始地址为006BH开3个字的内容。
  从机收到命令后即可响应,发回如下数据帧:

  这样即可取得所需数据。每种MODBUS 功能都有固定的命令帧和应答帧格式,共十六种。

3  帧驱动器
  帧驱动器是贝加莱公司为实现与第三方设备之间进行通信而设计的软件工具箱。通常数据通信,对数据进行读写操作,用户必须对端口的细节了解很清楚,才能通过编程实现对接口各管脚进行操作。而帧驱动器将这些操作集中起来,用户不必知道接口的细节,就可以通过帧驱动器命令直接传输读写数据。其提供的函数如下:
FRM_XOPEN:初始化端口,为帧驱动器分配缓存,安装中断处理程序
FRM_READ:把数据读入读缓存区
FRM_RBUF:释放读缓存区
FRM_GBUF:申请写缓存区
FRM_WRITE:将数据写入写缓存区
FRM_ROBUT:释放写缓存区
  在初始化接口后,用户就可以发送和接收数据了。发送数据基本过程是这样的,向帧驱动器申请一个缓存区,然后将要发送的数据写入申请得到的缓存区中,命令帧驱动器传输数据。
FRM_GBUF(1 ,IDENT,GSTATUS ,OUTBUFADR ,OUTBUFLNG);申请缓存区
IF(GSTATUS = -) THEN
  MEMCPY (OUTBUFADR ,ADR(SENDFRAME) ,LEN);将数据写入写缓存区
FRM_WRITE(1 ,IDENT,OUTBUFADR ,LEN ,WDSTATUS);要求帧驱动器传输数据
  IF(WDSTATUS < >0) THEN
 FRM_ROBUF(1 ,IDENT,OUTBUFADR ,LEN ,ROSTATUS)ENDIF
ENDIF
  接收数据的过程与发送的过程基本相反,其过程是这样的:命令帧驱动器从接口读一帧数据并把它存入一个缓存区中,将数据从缓存区中拷贝到工作区中,释放缓存区
FRM_READ(1 , IDENT,RSTATUS , INBUFADR , INBUFLNG);接收数据
IF (RSTATUS =0) THEN
  MEMCPY (ADR(BUFFER[0]) , INBUFADR , INBUFLNG);接收数据存入工作区
FRM_RBUF(1 ,IDENT,INBUFADR ,INBUFLNG,RBSTATUS);释放读缓存区
ENDIF

4  程序设计实现
  为了使操作命令组织结构清晰,合理。我们采用数据表格方式。我们把MODBUS 命令组织成命令表,表格中的每一行对应于一条MODBUS 命令,其格式如下:

 

  此例就是读取从机地址为11 ,起始地址为006B ,长度为3个字的内容,并把其放入地址为REBUFADR 开始的单元中。
  整个程序由三部分组成: (1) 主程序。(2) CRC 校验功能块。(3) 数据表格。程序的设计思路是这样的,主程序为一个TC#4任务,它每10ms 执行一次,确保实时快速地与从机通信。程序循环读取表格中每一行的数据,然后调用CRC 校验函数,计算出CRC 校验码,然后将其组织成MODBUS 命令帧发送出去。从机得到命令帧后,发回响应数据,主程序读取返回数据,计算CRC 校验码,判断返回数据是否有效,把其存放在记录中。当有事件发生时,主程序立即读取地址3600h开始的9个字,把其放在相应的事件记录中,直至事件触发标志无。为了使程序适应现场要求,对每种MODBUS 命令设有三种操作模式:模式0(不执行此条MODBUS命令) 、模式1(对此条MODBUS 命令只执行一次) 、模式2(常执行此条MODBUS 命令) 。

  该程序装入贝加莱B&R2005PCC 中,经运行,该程序能实时、准确,可靠地读取阿尔斯通仪表的数据,很好地与阿尔斯通仪表进行通信,实现了MODBUS 的各种命令,完成了对阿尔斯通仪表的操作与控制。

更多内容请访问 贝加莱工业自动化(中国)有限公司(http://c.gongkong.com/?cid=1795)

手机扫描二维码分享本页

工控网APP下载安装

工控速派APP下载安装

 

我来评价

评价:
一般