微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Modbus协议实现PLC与智能仪表的通讯

基于Modbus协议实现PLC与智能仪表的通讯

时间:06-19 来源:互联网 点击:

1引言

  Modbus协议是法国施耐德公司推出的一个全开放的“主从式(Master/Slave)”通讯协议,其本意在于实现上位机(主设备)对PLC(从设备)内部存储区域的“直接”读写操作,无需用户对PLC进行通讯编程。随着工业自动化技术的不断发展,Modbus协议现已不仅仅局限于应用在PLC/上位机之间的通讯上,许多智能仪表厂商也纷纷采用该协议作为自己产品的通讯协议。与此同时,PLC也由以前单纯的I/O控制发展成为集控制、数据采集、通讯为一身,在越来越多的自动化工程中,PLC需要取代上位机,作为“主设备”来完成与智能仪表或其它支持该协议的PLC的通讯。针对这一情况,施耐德公司在其编程软件Concept2.2+补丁程序ServiceRelease2中增加了一条功能强大的通讯指令XXMIT。通过该指令,用户可以将施耐德Modicon系列PLC上的原ModbusSlave通讯口作为ModbusMaster口或标准串口来使用,大大扩展了Modicon系列PLC的通讯功能。本文将结合实例对该指令的ModbusMaster使用方法做一些介绍,以供广大过程技术人员参考。

2XXMIT指令基本参数介绍

  2.1基本参数概述

基本参数列表

  2.2重要参数说明

  2.2.1Command参数

  该参数的16个为位用于设置通讯口的不同工作方式

  Bit1-Bit4:使用Modem时需设定的相关参数

  Bit5:是否使用XON/XOFF流控制。设为1时表示使用XON/XOFF流控制

  Bit6:是否使用RTS/CTS握手信号。设为1时表示允许使用RTS/CTS信号

  Bit7:是否清除“BackSpace”字符。设为1时表示在“SimpleASCIIInput”和“Terminated

  ASCIIInput”模式下,清除MsgIn中的“BackSpace”字符

  Bit8:是否接管通讯口FIFO缓冲区。设为1时表示XXMIT指令接管通讯口FIFO缓冲区的控制

  Bit9:是否启用Modbus模式。设为1时表示通讯口工作在ModbusMaster模式下

  Bit10:是否启用标准串口模式。设我1时表示通讯口工作在标准串口模式下

  注:Bit9,Bit10不能同时设为1

  Bit11:是否启用“SimpleASCIIInput”模式,设为1时表示启用

  Bit12:是否启用“TerminatedASCIIInput”模式,设为1时表示启用

  Bit13:不用

  Bit14:是否启用RS485模式。设为1时表示启用。只有在使用ModiconMomentum系列PLC时,该位才设为1

  Bit15:是否启用RTS/CTSModem控制。设为1时表示启用

  Bit16:不用

  2.2.2Msgout参数

  该参数中存放需发送的字符或数据。通常在Concept中用一个WORD型数组来给该参数赋值。当通讯口工作在ModbusMaster模式下时,需按ModbusRTU的格式来给该参数赋值,但不含CRC校验值,具体的格式见下表

  2.2.3Port参数

  只要使用ModiconMomentum系列PLC时,该参数才被设为2,否则该参数的值都被设定为1,表示用Port1进行通讯。

3实例

  下面的例子为笔者在西宁寺沟口水电厂机组监控项目中,用ModiconCompactPLC与MP6000智能功率仪表通讯的程序,基此来对XXMIT指令的使用做更进一步的说明。

  3.1工程要求

  通过PLC从MP6000智能仪表中读取机组当前的有功功率、无功功率等数据。

  3.2硬件情况:

  PLC:施耐德ModiconCompact系列PLC,CPU型号为TSXPC-E984-265

  智能仪表:MP6000功率表

  通讯协议:Modbus协议

  3.3软件情况:

  PLC编程软件:Concept2.2+ServiceRelease2

  编程方式:ST文本编程

  MP6000的数据区情况:把MP6000仪表中从第一个地址开始的64个数据读出来

  PLC的数据区:从MP6000读出的数据写入PLC40031开始的64个寄存器中

  3.4程序:

  VAR

  XXMIT_MB:XXMIT;

  SET_CMD:SET_BIT;

  END_VAR

  SET_CMD(IN:=1,(*BOOL*)

  NO:=9(*UINT*));(*把Command参数的bit9置1,让通讯口工作在ModbusMaster模式下*)

  XXMIT_CMD:=SET_CMD.RES;

  XXMIT_MSGOUT[1]:=3;(***MODBUS功能码***)

  XXMIT_MSGOUT[2]:=64;(***需从MP6000中读取的寄存器的数量***)

  XXMIT_MSGOUT[3]:=5;(***MP6000的地址***)

  XXMIT_MSGOUT[4]:=1;(***MP6000中数据的起始地址***)

  XXMIT_MSGOUT[5]:=31;(***将读取的数据写入PLC从40031开始的64个寄存器中***)

  XXMIT_MB(Start:=1,(*BOOL*)

  Command:=XXMIT_CMD,(*WORD*)

  MsgOut:=XXMIT_MSGOUT,(*ANY*)

  MsgLen:=5,(*INT*)

  Port:=1,(*BYTE*)

  Baudrate:=9600,(*INT*)

  Databits:=8,(*BYTE*)

  Stopbits:=1,(*BYTE*)

  Parity:=2,(*BYTE*)

  RespTout:=1000,(*INT*)

  RetryLmt:=20,(*INT*)

  StartDly:=0,(*INT*)

  EndDly:=0(*INT*));

参考文献:

  1、宋德玉.可编程控制器原理及应用系统设计.北京:冶金工业出版社,1999

  2、曾繁泰等.可编程器件应用导论.北京:清华大学出版社,2001

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top