当前位置:首考文秘网>范文大全 > 教学设计 > 基于Java的OPC数据采集系统的设计与实现

基于Java的OPC数据采集系统的设计与实现

时间:2023-05-18 14:40:04 教学设计 来源:网友投稿


打开文本图片集

摘要:针对工业控制领域中生产设备种类繁多,数据通信协议不一致,系统集成越发复杂,使得企业难以实现对生产数据采集等问题,提出基于OPC技术的解决方案。鉴于现今企业上层应用系统多为JavaEE架构,通过采用Java语言实现的Utgard开源类库与OPC通信技术来构建数据采集系统,这不仅降低企业成本,便于自动化控制,同时也是一种新型工业数据采集方式,具有实际应用价值。

关键词:OPC;Java;Utgard;数据采集系统;工业控制

中图分类号:TP311         文献标识码:A

文章编号:1009-3044(2019)15-0116-03

Abstract: In the field of industrial control, there are many kinds of production equipment, inconsistent data communication protocols and more complex system integration, which make it difficult for enterprises to realize production data acquisition. A solution based on OPC technology is proposed. In view of the Java EE architecture of the upper application systems of enterprises nowadays, the data acquisition system is constructed by Utgard open source components and OPC communication technology implemented in Java language. This not only reduces the cost of enterprises and facilitates automatic control, but also is a new type of industrial data acquisition method, which has practical application value.

Key words: OPC; Java; Utgard; Data Acquisition System; Industrial Control

1 背景

传统工控领域中,为了实现数据采集系统,需要通过驱动程序与现场设备进行数据交换,但由于传统的过程控制系统是一对一的系统,任何一种上位监控软件或其他应用软件,在使用某种硬件设备时都需要开发专用的驱动程序。工作量繁重且不易于系统集成。使用OPC技术可以很好解决上述问题。OPC提供通用的接口规范,用于各种过程控制设备之间的通讯,不论过程中采用何种应用软件和硬件设备。

由于上层管理软件越来越多采用Java开发,为了更好地集成,本系统用Java实现。Java语言具有安全性、平台独立与可移植性、多线程、动态性等特点 。利用这些特点可以方便高效编写桌面应用程序、Web应用程序等。同时开发过程中为了不依赖COM组件以及DLL等,保证平台可移植性,使用纯Java开发的Utgard开源类库与OPC通信。

2 OPC技术

2.1 OPC基本结构与通讯方式

OPC——OLE for Process Contrl,微软公司制定的一套规范的接口协议,它是为了不同供应厂商的设备和应用程序之间的软件接口标准化,使其间的数据交换更加简单化的目的而提出的。它基于OLE、COM、DCOM技术,采用客户端/服务器(Client/Server)結构,规定了OPC Client与OPC Server之间遵循的规范接口。服务端由控制设备的生产厂商将硬件设备驱动程序和通信程序封装成独立的服务器,客户端通过规范接口与服务端通信,在开发客户端时可以不包含任何通信接口,程序不必关心挥服务器的最佳性能,底层的硬件设备特性,也不必考虑软硬件如何如通信,只要遵循数据接口协议,就能够从服务器中取得数据。标准规订了2种通信方式:同步通信方式和异步通信。OPC基本结构如图1所示。

2.2 OPC数据存储格式

不同于传统关系型数据库的表存储, OPC存储格式是树形结构。

服务端主机存有多个OPC Server,每个OPC Server存有多个item,item中存储内容就是当前生产设备中需要采集与监控的数据项。客户端在获取数据时,需指明服务器主机名,具体Server以及需要获取的item所在路径。

客户端除了Server,在其下面还有一个存储层级Group,它分类存储Server端的item,所以在获取item时不仅可以一个个获取,还可以通过批处理技术,通过创建维护一个个Group,将需要获取的多个item放到这些Group中,一次性获取出来,从而降低了每获取一个item而创建一次连接所带来的消耗问题。

OPC数据存储格式如图2所示:

3 基于Java的OPC数据采集系统的实现

3.1 Kepware作为 OPC服务器

选取Kepware充当OPC服务器,Kepware作为OPC服务器可以方便获取PLC中的运转数据等信息,它的优势在于支持市场上绝大多数的PLC厂商,Kepware主要应用领域有数据采集技术,历史数据访问技术以及远程数据访问技术等等。

3.2 使用Utgard开源类库与OPC服务器通讯

Utgard 是一个纯Java开发的开源类库, 是OpenSCADA项目底下的子项目,具有跨平台特性,全部基于DCOM实现,利用Utgard库文件,可以实现与OPC服务器进行通讯。它支持在Windows及Linux操作系统上运行,支持组查询,同步,异步查询,以及单点的发布订阅模式。

3.3 MySQL数据库存储数据

选用MySQL作为持久化存储系统,它是一种关系型数据库,具有体积小、速度快、总体拥有成本低,同时开源免费等特点。使用MySQL存储生产设备中采集过来的关键数据参数,将这些数据采集存储起来,可以方便日后追溯。这些数据适用于各种类型的过程和生产控制,它可以追溯到产品的以下信息:哪个零件被安装于成品中了?产品生产过程中,产生了哪些需要控制的关键参数,是否都合格?以及对当前制造过程的严密控制等等。

3.4 数据采集系统设计实现

首先在本地操作系统环境好配置好DCOM,接着使用Utgard实现OPC数据采集系统,在Eclipse项目工程中导入openscada.opc.dcom 和openscada.opc.lib 2 个库,其中openscada. opc. dcom 库使用 J-Interop 实现了与 DCOM 的交互,openscada.opc.lib 库实现了 OPC 接口程序,这些库是用 Java 开发。使用Utgard提供的API函数,建立与OPC服务器的连接,读取和写入OPC服务器中的变量的参数值,将这些变量的值地传递给软件系统,进而持久化存储起来,采集进追溯系统。数据采集流程如图3所示。

4 数据采集系统的软件编程实现

OPC数据存取服务器由三个对象组成:服务器对象(Server)、组对象(Group)和项对象(Item)。通过与OPC Server建立连接后即可读取数据或写入数据。Utgard支持三种读取数据方式,分别是同步查询,异步查询,发布订阅模式查询,支持一种写入方式,同步写入。以下是数据采集系统编程实现关键API展示:

4.1 与OPC Server建立连接

ConnectionInformation ci = newConnectionInformation();

ci.setHost(ipAddress); //OPC Server的主机地址

ci.setDomain("");

ci.setUser("opcUser");// DCOM配置中OPC用户

ci.setPassword("123456");//OPC用户密码

ci.setClsid("7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729"); //Kepware软件在注册表的ID

Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());//启动服务

server.connect();

4.2 Item的同步查询

Group group = server.addGroup();

Item item = group.addItem("Random.Real5");

System.out.println(“ItemName:” + item.getId() + “Value:" + item.read(false).getValue());

server.dispose();

4.3 Item的异步查询

AccessBase access = new SyncAccess(server, PERIOD);

access.addItem("Random.Real5", new DataCallback() {

public void changed(Item item, ItemState itemstate) {

System.out.println("ItemName:"+item.getId()+"value:" + itemstate.getValue());

}

});

access.bind();

Thread.sleep(SLEEP);

access.unbind();

server.dispose();

4.4 Item的发布订阅查询

AccessBase access = new Async20Access(server, PERIOD, false);

access.addItem("Random.Real5", new DataCallback() {

private int count;

public void changed(Item item, ItemState itemstate) {

System.out.println("ItemName:"+item.getId()+"value:" + itemstate.getValue()); }

});

access.bind();

access.unbind();

server.dispose();

4.5 Item的同步写入

Group group = server.addGroup();

Item item = group.addItem("Square Waves.Real4");

final Float[] integerData = new Float[] { 1202f, 1203f, 1204f };

final JIArray array = new JIArray(integerData, false);

final JIVariant value = new JIVariant(array);

item.write(value);

server.dispose();

5 结束语

随着工业生产的快速发展,企业生产规模越发庞大,生产设备逐日增多,使用OPC技术可以有效简化生产过程控制中数据采集任务的简化。使用OPC技术可以使得现场控制设备与上层控制系统和生产管理软件之间的通讯更加方便灵活。本系统采用Java语言开发,可以更好地与现今Java EE企业架构系统集成,同时利用纯Java编写的Utgard开源类库与OPC服务器通信,具有平台无关性,可移植性等优点,同时在稳定性和扩展性上都具有很大的操作性,这种新型的数据采集方式有很大的实际应用场景。

参考文献:

[1] 王林. 基于SOA的生产运行管理系统的设计与实现[M]. 北京: 电子工业出版社, 2015.

[2] 李堃弸. 测控领域中基于 VB的数据采集的设计与实现[J]. 微计算机信息,2005(1): 46-47.

[3] 卢宏, 汪金良, 曾青云. 基于OPC技术的WinCE实时数据采集[J].自动化博览, 2006(8): 58-60.

[4] 刘莉. 用VB编写OPC客户端程序的方法[J]. 工业控制计算机,2005,18(5):5-6.

[5] 王俊萍. OPC技术在扩展SCADA系统中的应用[J]. 现代电子技术,2005(10):42-44.

[6] 马增良, 兰斌. OPC数据访问服务器实现机制研究[J]. 计算机工程与应用,2003, 39(21): 65-67.

【通聯编辑:谢媛媛】

推荐访问:采集系统 数据 设计 java OPC

版权所有:首考文秘网 2015-2024 未经授权禁止复制或建立镜像[首考文秘网]所有资源完全免费共享

Powered by 首考文秘网 © All Rights Reserved.。备案号:冀ICP备15026071号-91