论文部分内容阅读
摘 要:介绍了基于OPC技术的DCS数据获取的原理和方法,结合实际叙述了上位机软件DCS与OPC服务器之间的通信以及OPC服务器与OPC客户端之间的通信,重点给出了关键程序示例。在OPC数据交换接口的基础上,后续的上层应用系统的开发变得简捷高效。
关键词:OPC技术;数据获取;DCS
中图分类号:TP273 文献标识码:A
随着企业信息化建设的投资比例增大,许多企业为了实现不同生产装置的DCS系统和数据采集接口之间的数据通讯,解决生产管理过程中的上层监控与底层控制脱节的问题,提高企业生产效益,OPC技术应运而生。OPC作为软件和硬件之间数据通信的桥梁,是一种标准。本文应用了OPC技术规范作用于DCS系统实现数据获取的目的。
1 OPC技术
OPC(OLE for Process Control),是微软公司以COM/DCOM技术为基础,采用客户端/服务器模式,开发出的应用于控制领域的一种工业标准。针对当前工业控制领域不同生产装置互相通信的要求,OPC为其制定了完整的编程接口属性和方法,这就为不同设备包括软硬件之间的交互访问提供了依据[1]。
OPC既可以应用于本地PC机,同时也支持网络内不同应用程序间包括跨平台应用程序间的通讯,实现了硬件设备与系统软件之间实时通讯。该规范的基本思想是:由支持OPC接口的硬件厂商开发对应其硬件设备的OPC服务器,负责获取硬件设备生产的数据并暂存;OPC客户端,即支持OPC接口的系统软件就可以通过连接OPC服务器来读写之前获取到的数据。OPC连接模式如下图所示。
OPC服务器支持两种类型的数据访问接口:自动化接口(Automation interface);定制接口(Custom interface)。两种接口定义了OPC客户端和OPC服务器之间进行通讯的方法。用户可以自己编写OPC客户端程序,在客户端程序中调用OPC服务器对象接口及对应的方法来访问OPC服务器读写数据。
一个OPC数据访问服务器中包含3类对象模型,OPC服务器(Server)、OPC组(Group)、OPC项(Item)。它们之间的联系是Server对象维护有关服务器的信息并作为Group对象的容器,而Group对象维护有关其自身的信息,提供包容Item对象的机制,并管理Item对象[2-3]。
2 OPC客户端程序的设计开发
这里采用了Java语言编写的开源项目J-Interop和Utgard实现OPC客户端[4]。
2.1 Utgard
Utgard属于Openscada开源项目,基于J-Interop做的,纯Java语言编写,具有跨平台的特点,用于和OPC Server进行通讯。Openscada可以很好的实现与OPC服务器的连接以及读写数据的功能,并且可以随时获取和修改OPC的Server和Item的属性状态信息等。而J-Intgard是纯Java封装的用于COM/DCOM通讯的开源项目。需要注意的是,在使用Utgard之前需要配置好服务器端的DCOM组件。
2.2 使用Utgard访问OPC server
开发步骤及相应代码大致为:
(1)导入关键jar包。
(2)编写配置文件,设置连接服务器的主机用户密码等信息。
(3)遍历当前所连接的服务器上所有支持OPC DA2.0规范的OPC服务器应用。
(4)创建ConnectionInformation类。
final ConnectionInformation ci = new ConnectionInformation();
ci.setHost(host);
ci.setClsid(serverList.getClsIdFromProgId ("Matrikon.OPC.Simulation"));
ci.setUser(user);
ci.setPassword(password);
其中通过Clsid的方式查找OPC Server更快,但如果事先不知道clsid,也可以通过ServerList类的getClsIdFromProgId方法来查询相应OPC
Server名称的Clsid。
(5)创建Server类并连接:ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
Server server = new Server(ci, exec);
server.connect();
(6)Utgard有两种数据访问方式——直接通过item的read/write方法或者使用AccessBase(读取数据)。需要注意的是,不管采用哪一种方式,返回结果都是通过ItemState类来获取,通过调用ItemState的getValue方法可以获得访问结果,返回结果是JIVarant类型的,里面包含了OPC访问时的各种类型及处理方法。
按照上述方法步骤,使用Utgard连接至OPC服务器,然后使用Async20Access类隔時间段地进行异步读取数据。客户端程序在Windows下和Linux下均能成功连接OPC Server,并获取到数据。
3 结语
本文给出了利用OPC技术实现DCS数据获取的方法,基于Java语言成功开发出OPC客户端并实现跨平台连接OPC服务器。这一构建方法为工业领域上层应用系统的开发提供了一种有效途径[5]。
参考文献:
[1]胡强,赵英凯.OPC技术在DCS与工厂管理网数据通讯中的应用[J].工业仪表与自动化装置,2002(03):25-28.
[2]王燕,王健.OPC接口技术在DCS数据交换中的应用[J].微计算机信息,2010,26(31):48-49+37.
[3]晏明军.基于Java的OPC客户端的实现[J].电子技术,2010,47(07):56-57.
[4]孙亮清.用Java实现OPC客户端[J].上海船舶运输科学研究所学报,2011,34(01):34-37.
[5]谢鹏华,牛昱光.DCS远程监控实验教学系统的OPC技术实现方法[J].太原理工大学学报,2011,42(02):149-154.
关键词:OPC技术;数据获取;DCS
中图分类号:TP273 文献标识码:A
随着企业信息化建设的投资比例增大,许多企业为了实现不同生产装置的DCS系统和数据采集接口之间的数据通讯,解决生产管理过程中的上层监控与底层控制脱节的问题,提高企业生产效益,OPC技术应运而生。OPC作为软件和硬件之间数据通信的桥梁,是一种标准。本文应用了OPC技术规范作用于DCS系统实现数据获取的目的。
1 OPC技术
OPC(OLE for Process Control),是微软公司以COM/DCOM技术为基础,采用客户端/服务器模式,开发出的应用于控制领域的一种工业标准。针对当前工业控制领域不同生产装置互相通信的要求,OPC为其制定了完整的编程接口属性和方法,这就为不同设备包括软硬件之间的交互访问提供了依据[1]。
OPC既可以应用于本地PC机,同时也支持网络内不同应用程序间包括跨平台应用程序间的通讯,实现了硬件设备与系统软件之间实时通讯。该规范的基本思想是:由支持OPC接口的硬件厂商开发对应其硬件设备的OPC服务器,负责获取硬件设备生产的数据并暂存;OPC客户端,即支持OPC接口的系统软件就可以通过连接OPC服务器来读写之前获取到的数据。OPC连接模式如下图所示。
OPC服务器支持两种类型的数据访问接口:自动化接口(Automation interface);定制接口(Custom interface)。两种接口定义了OPC客户端和OPC服务器之间进行通讯的方法。用户可以自己编写OPC客户端程序,在客户端程序中调用OPC服务器对象接口及对应的方法来访问OPC服务器读写数据。
一个OPC数据访问服务器中包含3类对象模型,OPC服务器(Server)、OPC组(Group)、OPC项(Item)。它们之间的联系是Server对象维护有关服务器的信息并作为Group对象的容器,而Group对象维护有关其自身的信息,提供包容Item对象的机制,并管理Item对象[2-3]。
2 OPC客户端程序的设计开发
这里采用了Java语言编写的开源项目J-Interop和Utgard实现OPC客户端[4]。
2.1 Utgard
Utgard属于Openscada开源项目,基于J-Interop做的,纯Java语言编写,具有跨平台的特点,用于和OPC Server进行通讯。Openscada可以很好的实现与OPC服务器的连接以及读写数据的功能,并且可以随时获取和修改OPC的Server和Item的属性状态信息等。而J-Intgard是纯Java封装的用于COM/DCOM通讯的开源项目。需要注意的是,在使用Utgard之前需要配置好服务器端的DCOM组件。
2.2 使用Utgard访问OPC server
开发步骤及相应代码大致为:
(1)导入关键jar包。
(2)编写配置文件,设置连接服务器的主机用户密码等信息。
(3)遍历当前所连接的服务器上所有支持OPC DA2.0规范的OPC服务器应用。
(4)创建ConnectionInformation类。
final ConnectionInformation ci = new ConnectionInformation();
ci.setHost(host);
ci.setClsid(serverList.getClsIdFromProgId ("Matrikon.OPC.Simulation"));
ci.setUser(user);
ci.setPassword(password);
其中通过Clsid的方式查找OPC Server更快,但如果事先不知道clsid,也可以通过ServerList类的getClsIdFromProgId方法来查询相应OPC
Server名称的Clsid。
(5)创建Server类并连接:ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
Server server = new Server(ci, exec);
server.connect();
(6)Utgard有两种数据访问方式——直接通过item的read/write方法或者使用AccessBase(读取数据)。需要注意的是,不管采用哪一种方式,返回结果都是通过ItemState类来获取,通过调用ItemState的getValue方法可以获得访问结果,返回结果是JIVarant类型的,里面包含了OPC访问时的各种类型及处理方法。
按照上述方法步骤,使用Utgard连接至OPC服务器,然后使用Async20Access类隔時间段地进行异步读取数据。客户端程序在Windows下和Linux下均能成功连接OPC Server,并获取到数据。
3 结语
本文给出了利用OPC技术实现DCS数据获取的方法,基于Java语言成功开发出OPC客户端并实现跨平台连接OPC服务器。这一构建方法为工业领域上层应用系统的开发提供了一种有效途径[5]。
参考文献:
[1]胡强,赵英凯.OPC技术在DCS与工厂管理网数据通讯中的应用[J].工业仪表与自动化装置,2002(03):25-28.
[2]王燕,王健.OPC接口技术在DCS数据交换中的应用[J].微计算机信息,2010,26(31):48-49+37.
[3]晏明军.基于Java的OPC客户端的实现[J].电子技术,2010,47(07):56-57.
[4]孙亮清.用Java实现OPC客户端[J].上海船舶运输科学研究所学报,2011,34(01):34-37.
[5]谢鹏华,牛昱光.DCS远程监控实验教学系统的OPC技术实现方法[J].太原理工大学学报,2011,42(02):149-154.