赵子龙,李 妮,周卫斌,游国栋
(天津科技大学,天津 300222)
全球能源日益枯竭,环境污染问题逐步凸显,可持续能源的开发、利用尤为重要,其中以风能为代表的风力发电技术越来越受到世界各国的高度关注。为了能够高效、灵活地应用风能资源发电,使风电机组稳定可靠运行,考虑采用风电场监控与数据采集(SCADA)系统解决该问题。系统主要对现场数据实时采集、调节运行参数、查询历史数据以及故障报警。目前我国风电场SCADA系统的底层PLC监控普遍采用国际标准OPC协议进行通信,该技术的应用在很大程度上解决了各工控PLC厂家之间通信难的问题。但是随着工业监控领域的发展,OPC的应用只局限于本地局域网,无法通过防火墙、不支持互联网通信的弊病越发明显[1]。本文重点分析了OPC XML-DA通信协议的开发,将其应用到SCADA系统中以实现可靠的远程通信,解决现有SCADA系统中OPC通信协议无法与互联网连接的弊病。
随着工业信息技术的发展,传统工业控制系统中不同厂家的非标准通信方式导致系统的可靠性、稳定性及扩展性较差,不利于系统的后期拓展及维护,阻碍了工控行业的自动化、智能化发展。为了解决软硬件设备之间的数据接口问题,OPC技术随之产生。它将OPC客户与服务器在物理上分开,减少硬件制造商和软件开发商之间的依赖,极大地提高了双方的工作效率;有效解决了工控行业复杂驱动程序造成的数据接口问题,减少资源浪费,提升通信质量等[2]。
由于OPC DA技术不能满足互联网远程监控的需求,故OPC基金会推出OPC XML-DA规范着重解决OPC DA技术的集成性、通用性和开放性等问题。OPC XML规范根据Web Service整体概念,将OPC应用扩展到互联网,使得企业能够通过Internet发布OPC通信指令,为解决系统不能通过防火墙,仅限于本地局域网的问题提供了研究方向,从而高效实时地进行通信调度。
传统的风电场监控系统由于采用OPC DA技术,故不支持互联网通信,仅局限于本地局域网。因此,本文针对风电场监控需求,提出采用基于OPC XML-DA技术的远程监控系统,并且介绍了OPC XML-DA服务器及客户端的具体组成。
实现风电场的远程在线监控,关键是设计一个OPC XML-DA服务器,即在OPC DA服务器的基础上进行二次开发,通过一个XML封装器,将工控设备中已有的OPC DA服务器XML化,使系统在保持较高性能的同时满足跨平台集成的要求,并通过Internet传递数据[4]。
OPC XML-DA服务器与OPC DA服务器组成基本相同,由服务器对象(Server)、组对象(Group)和项对象(Item)组成。其中服务器对象提供数据源以及数据源访问的方法,可以动态的创建或释放组对象,由一个或多个OPC组对象及OPC浏览器对象组成。OPC组对象通过OPC项对象的集合进行数据访问,满足OPC应用程序要求的数据访问方式,由一个或多个OPC项对象组成[5]。其中OPC服务器的框架结构如图1所示。
图1 OPCDA服务器的框架结构图
OPC XML-DA服务器支持8种服务,具体类型有:Browse、Get Properties、Get Status、Read、Write、Subscribe、Subscription Cancel和Subscription Polled Refresh。
根据风电场监控系统的实际需求分析,OPC XML-DA客户端可以对OPC XML-DA规定的8项基本服务进行管理操作,此外还具有报警、报表、曲线显示等功能。
实现浏览OPC服务器的步骤包括:创建浏览器对象,通过该对象的接口获得OPC服务器名称列表,再添加OPC组对象及项对象,进行数据交换。读取标签数据。其具体实现过程如下:
(1)创建一个接口对象
Opc.IDiscovery discover=new OpcCom.ServerEnumerator();
(2)创建一个服务器对象,并实例化
Opc.Server[] servers=discover.GetAvailableServers(Specification.COM_DA_20, Dns.GetHostName(), null);
(3)连接服务器
KepServer.Connect();
(4)向服务器添加一个OPC组对象
registeredGroup=(Opc.Da.Subscription)KepServer.CreateSubscription(state);
(5)创建数据项item数组对象
Item[] items=new Item[ItemNum];
(6)向OPC组对象中添加OPC数据项item对象
registeredGroup.AddItems(items);
(7)读取kep组中的数据
public void ReadItemValue()
{
ItemValueResult[] values=registeredGroup.Read(registeredGroup.Items);
foreach (ItemValueResult item in values)
{
if (item.Quality=Quality.Good)
{
DataDic[item.ItemName].DataQuality=true;
DataDic[item.ItemName].DataValue=System.Convert.ToInt32(item.Value);
}
else
{
DataDic[item.ItemName].DataQuality=false;
}
}
}
(8)写入kep组中的数据
public void WriteItemValue()
{
int writeNum=0;
foreach (ItemDataClass itemData in DataDic.Values)
{
if (itemData.WriteOnce)
writeNum++;
}
if (writeNum > 0)
{
int tempcount=0;
ItemValue[] itemValue=new ItemValue[writeNum];
foreach (ItemDataClass itemData in DataDic.Values)
{
if (itemData.WriteOnce)
{
itemValue[tempcount]=new ItemValue(itemData.DataItem);
itemValue[tempcount++].Value=itemData.DataValue;
itemData.WriteOnce=false;
}
}
registeredGroup.Write(itemValue);
}
}
}
(9)断开服务器连接
KepConnected=false;
本文简要介绍了OPC XML技术及其实际应用。工业现场设备可以通过开发OPC XML-DA服务器和OPC XML-DA客户端实现企业的互联网在线监控,结合本地局域网监控,实现线上、线下双重监控,提高了监控质量和管理效率,使系统高效、经济、安全的运行。
参考文献:
[1]宋国辉.基于OPC XML-DA技术及.NET平台的远程监控系统设计[D].兰州:兰州理工大学, 2012.
[2]王华忠.监控与数据采集(SCADA)系统及其应用(第二版)[M].北京:电子工业出版社, 2010.
[3]卢建刚,方弢,许锋,王智,孙优贤.基于XM L技术的分布式现场总线远程监控系统设计[J].信息与控制, 2004,05(33):609-613.
[4]戚中奎,林果园,孙统风.OPC数据访问服务器的研究与实现[J].计算机工程与设计, 2011,04(32):1517-1520.
[5]马亮,张志鸿.OPC DA服务器的设计与实现[J].微计算机信息, 2008,09(24):228-230.