OPC客户端的Java实现方法
- 格式:pdf
- 大小:449.56 KB
- 文档页数:4
OPC编程汇编OPC客户端的自动化实现OPC是建立在COM,DCOM的基础商的,因此绝大多数语言都可以很好的进行开发。
在Net中开发客户端有以下几种方式:(1)使用OPCNetAPI,需要用到OPCNetAPI.dll,.dll(2)使用自动化接口,需要用到OPCDAAuto.dll(3)使用自定义接口,需要用到多个Wrapper:OpcRcw.Ae.dll,OpcRcw.Batch.dll,n.dll,OpcRcw.Da.dll,OpcRcw.Dx.dll,OpcRcw.Hda.dll,OpcRcw.Sec.dll以上开发方式所需的动态链接库可以从OPC基金会(/)的网站上下载,一些下载项目可能需要注册,或成为基金会的成员。
不同的方式有各自的有缺点,请参见…本文使用自动化接口,语言进行开发,开发项目是无线射频(RFID)卡方面的应用,典型的如公交车,或公司考勤使用的刷卡机。
需要注意的是自动化接口存在一个“不是问题”的问题,数组下标是以1开始的,而不是传统计算机开发上的以0开始。
不知道设计者头脑是怎么想(有人知道吗?);这可能会给一些语言的开发造成问题(有人碰到吗,没有你就是幸运的)需求:OPCDAAuto.dll或该Dll的Interop(一):客户端开发流程OPC客户端的开发主要遵循下图所示的开发流程,下面就从以下几个开发步骤进行说明(二):枚举OPC服务器列表枚举服务器主要是通过OPCServer接口的GetOPCServers方法来实现的,该方法会返回OPC服务器数组(以1为下界,上面已有说明),以下是代码段Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loa dTryGlobalOPCServer = New OPCAutomation.OPCServerClass()Dim ServerList As Object= GlobalOPCServer.GetOPCServersFor index As Short= LBound(ServerList) To UBound(ServerList) '加入控件列表中,注意这里使用LBound和UBoundcbbServerList.Items.Add(ServerList(index))NextIf cbbServerList.Items.Count > 0 ThencbbServerList.SelectedIndex = 0End IfResetControlStatus() '设置控件状态GlobalOPCServer = NothingCatch Ex As ExceptionMessageBox.Show("List OPC servers failed: "+ Ex.Message, "OPCSample", MessageBoxButtons.OK) End TryEnd Sub(三):连接OPC服务器自动化接口中连接到服务器是使用connect方法Public Overridable Sub Connect(ByVal ProgID As String, Optional ByVal Node As Object = Nothing)ProgID指服务器的ProgID,Node代表网络节点,如果是本机则放空即可。
Java实现OPC通信utgard库已经过时,原作者早已删除库,建议使⽤OPC UA,兼容OPC DA。
有问题可以私信和评论,看到会回复。
录屏简单说了⼀下⽂章内容,视频地址:1.PLC和OPC使⽤的PLC:西门⼦的S7-300,具体型号如下图使⽤的OPC server软件:项⽬使⽤KEPServer V6(450M,中⽂):,密码: ykj2模拟仿真⽤的 MatrikonOPCSimulation(50M),,密码: mcur2.连接测试什么是OPCOPC是⼯业控制和⽣产⾃动化领域中使⽤的硬件和软件的接⼝标准,以便有效地在应⽤和过程控制设备之间读写数据。
O代表OLE(对象链接和嵌⼊),P (process过程),C (control控制)。
OPC服务器包括3类对象(Object):服务器对象(Server)、项对象(Item)和组对象(Group)。
OPC标准采⽤C/S模式,OPC服务器负责向OPC客户端不断的提供数据。
来源:OPC server软件使⽤MatrikonOPC:KEPServer V6:Server和Client要实现的是Client(Java)和Client(PLC)之间的通信中间借助OPCServer,Server上设定好地址变量,不同的Client读写这些变量值实现通信。
⽰意图如下配置Server和Client:通信不成功都是配置的问题。
配置OPCserver⼀般⼀个电脑(win10)同时安装Server(⽐如KEPServer)和Client(Java编写的),就配置这个电脑就⾏如果是在两个电脑上,那就都需要配置。
3.通信实现Utgard官⽹:源码:Github上的10.问题:在虚拟机⾥⽤localhost⼀直报错,要写固定IP才⾏配置⾥的IP是安装OPCServer软件的电脑的IP,如果使⽤⽆线连接,请查看⽆线的IP地址能不能循环对⼀个组(group)监控?好像不可以,官⽅Demo⾥有两种数据读取⽅式:1.循环监控如果Java写的client和安装OPCServer软件是两台电脑:那两个电脑都要配置相同DCOM,包括账号密码都要⼀样win10家庭版是否可以?可以,有些⿇烦,主要是⽤户管理部分配置,有⼈已经验证过可以,我就不试了。
OPC服务器和客户端程序开发指南第一章OPC概述关键词:Comdcmopcda通信标准CLIENTSERVER GROUP ITEM自定义接口自动化接口同步异步回调随着计算机科学技术、工业控制等方面新技术的飞速发展,计算机监控系统从早期的集中式监控向全分布式方向发展,计算机监控系统软件随着面向对象技术的成熟,分布式对象计算、多级客户机/服务器技术也从早期的功能系统软件,发展成为以特定现场设备为特征的面向对象的监控系统软件。
与此同时,计算机监控系统的规模越来越大,不同厂家生产的现场设备种类也越来越多。
由于不同厂家提供的现场设备的通信机制不尽相同,需要由计算机监控系统软件开发的硬件设备通信驱动程序越来越多,导致硬件通信驱动程序需要不断开发的现象。
基于COM/DCOM技术的OPC技术提供了统一的通信标准,不同的厂商只要遵循OPC技术标准,就可以实现软硬件的互操作。
过程控制技术是专门为过程控制而设计的。
它是由一些世界领先的自动化系统和软硬件公司与微软公司密切合作建立的,并成立了一个专门的OPC 基金会来管理它。
OPC基金会负责OPC规范的制定和发布。
OPC提出了一套统一的标准,采用典型的客户机/服务器模式。
硬件设备的驱动程序由硬件制造商或专业公司完成,为服务器程序提供统一的OPC接口标准。
软件制造商只能通过根据OPC标准编写客户端程序来访问(读/写)服务器程序来实现与硬件设备的通信。
如图1.1所示,与传统的通信开发方法相比,OPC技术具有以下优点:硬件供应商熟悉他们自己的硬件设备,因此设备驱动程序更加可靠和高效。
软件制造商可以缩短复杂设备驱动程序的开发周期,只需要开发一套符合OPC标准的程序来实现与硬件设备的通信,这样就可以投入人力和物力来改善系统功能。
可以实现软件和硬件的互操作性。
OPC区分了软件和硬件制造商,大大提高了双方的工作效率。
图1.1应用前后的OPC技术对比因此,OPC技术的出现得到了众多软硬件制造商的支持,并且发展迅速。
OPC函数及方法OPC(OLE for Process Control,过程控制的OLE)是一种通信标准,用于自动化系统中的数据交换和远程监控。
OPC的设计目标是提供一种标准的接口,使得不同供应商提供的控制设备和监控系统能够互相通信,实现数据的共享和集成。
OPC的定义包括两个主要部分:OPC服务器和OPC客户端。
OPC服务器是一个中间件,它提供一组标准的API(应用程序编程接口),用于数据传输和通信。
OPC客户端是一个应用程序,它可以访问OPC服务器,并获取或发送数据。
在OPC中,有多种函数和方法可供使用,用于实现数据的读取、写入、订阅和通知等操作。
下面是一些常用的OPC函数和方法:1. OPCEnum函数:用于列举系统中可用的OPC服务器。
该函数返回一个OPC服务器列表,包含每个服务器的名称和描述信息。
2. CoCreateInstance函数:用于创建一个OPC服务器的实例。
该函数需要指定服务器的标识符(CLSID)和接口的标识符(IID),以及其他参数。
3. IOPCServer接口:用于与OPC服务器进行通信。
该接口提供了一组方法,包括连接和断开连接服务器、读取和写入数据、订阅和取消订阅数据等操作。
4. IOPCItemProperties接口:用于获取和设置OPC服务器中的数据项的属性。
该接口提供了方法,可用于获取数据项的名称、数据类型、访问权限等信息。
5. IOPCBrowseServerAddressSpace接口:用于浏览OPC服务器的地址空间。
该接口提供了方法,可用于获取地址空间的层次结构、浏览子节点、获取节点的属性等。
6. IOPCDataCallback接口:用于接收OPC服务器发送的数据更新通知。
该接口提供了方法,用于处理数据变化的事件,并更新相应的数据。
7. IOPCDAsyncIO2接口:用于异步读写数据。
该接口提供了方法,可用于发送异步读写请求、获取读写操作的状态、获取读写操作的结果等。
Java中处理OPC寄存器数据类型1. 在milo中,处理WORD等数据类型例⼦如下:VariableNode node = client.getAddressSpace().createVariableNode(new NodeId(2, "ch1.d1.tag1"));Variant newVal = new Variant(hort(111));DataValue va = new DataValue(newVal, null, null);StatusCode writeStatus = node.writeValue(va).get();也可以⽤UaOpcClientclient.writeValue( new NodeId(2, "ch1.d1.tag1"), va).get();Variant 是milo中处理VARIANT变量的类,milo在Identifiers类中定义了各种类型的初始化如WORD LONG等,这⾥的hort(111)就是将111初始化为WORD2. 在utgard中,处理各种类型(1)写⼊数据:在utgard中采⽤jinterop中的JIVariant类型进⾏各种类型的处理,包括boolean, floate, double, short, int等,对boolean可处理如下:Group group = server.addGroup();Item item = group.addItem(mitem);final JIVariant value = new JIVariant(val);item.write(value);其中val是boolean型(3)写⼊double和float数组数据: 当写⼊double或float的数组数据时,因JIArray不⽀持基本类型数组,所以必须使⽤Double和Float对象进⾏处理,如下: server.connect(); Group group = server.addGroup(); Item item = group.addItem("Square Waves.Real4"); final Float[] Data = new Float[] { 1202f, 1203f, 1204f }; //这⾥没有使⽤float基本类型,使⽤了对象Float,如果是double,则需要使⽤Double类 final JIArray array = new JIArray(Data, false); final JIVariant value = new JIVariant(array); item.write(value);(4)写⼊⽆符号数据:java基本数据类型中没有⽆符号数据,所以需要使⽤JInterop中的⽆符号数类来⽣成JIUnsignedShort、JIUnsignedByte、JIUnsignedInt类型。
第1章OPC概述关键字:COM DCOM OPC DA 通讯规范 CLIENT SERVER GROUP ITEM 自定义接口自动化接口同步异步回调随着计算机科学技术、工业控制等各方面新技术的迅速发展,计算机监控系统由早期的集中式监控向全分布式的方向发展,计算机监控系统软件随着面向对象技术、分布式对象计算、多层次Client/Server技术的成熟,也从早期面向功能的系统软件,发展为面向具体现场设备为特征的面向对象的监控系统软件。
同时,计算机监控系统规模越来越大,不同厂家生产的现场设备的种类在不断增加,由于不同厂家所提供的现场设备的通讯机制并不尽相同,计算机监控系统软件需要开发的硬件设备通信驱动程序也就越来越多,造成了硬件通讯驱动程序需要不断开发的现象,而基于COM/ DCOM技术的OPC技术,提供了一个统一的通讯标准,不同厂商只要遵循OPC技术标准就可以实现软硬件的互操作性。
OPC(OLE for Process Control,用于过程控制的OLE)是为过程控制专门设计的OLE技术,由一些世界上技术占领先地位的自动化系统和硬件、软件公司与微软公司(Microsoft)紧密合作而建立的,并且成立了专门的OPC基金会来管理,OPC基金会负责OPC规范的制定和发布.OPC提出了一套统一的标准,采用典型的CLIENT/SERVER模式,针对硬件设备的驱动程序由硬件厂商或专门的公司完成,提供具有统一OPC接口标准的SERVER程序,软件厂商只需按照OPC标准编写CLIENT程序访问(读/写)SERVER程序,即可实现与硬件设备的通信。
如图1.1所示,与传统的通讯开发方式相比,OPC技术具有以下优势:·硬件厂商熟悉自己的硬件设备,因而设备驱动程序性能更可靠、效率更高。
·软件厂商可以减少复杂的设备驱动程序的开发周期,只需开发一套遵循OPC标准的程序就可以实现与硬件设备的通信,因此可以把人力、物力资源投入到系统功能的完善中.·可以实现软硬件的互操作性.·OPC把软硬件厂商区分开来,使得双方的工作效率有了很大的提高.图1.1 OPC技术应用前后比较因此OPC技术的出现得到了广大软硬件厂商的支持,并迅速发展。
OPC是OLE for Process Control的缩写,即把OLE应用于工业控制领域,OPC是建立在O LE规范之上,它为工业控制领域提供了一种标准的数据访问机制。
OPC服务器由三类对象组成:服务器(Server)、组(Group)、数据项(Item)。
服务器对象(Server)拥有服务器的所有信息,同时也是组对象(Group)的容器。
组对象(Group)拥有本组的所有信息,同时包容并逻辑组织OPC数据项(Item)。
在这里数据项(Item)就是指所有的PLC信号的输入与输出。
OPC组对象(Group)提供了客户组织数据的一种方法。
客户可对之进行读写,还可以设置客户端的数据更新速率。
当服务器缓冲区内的数据发生改变时,OPC将向客户发出通知,客户得到通知后再进行必要的处理。
而无须浪费大量的时间进行查询。
OPC规范定义了两种组对象:公共组和局部组(私有组)。
公共组由多个客户共有,局部组只隶属于一个OPC客户。
一般来说,客户和服务器的一对连接只需要定义一个组对象。
在每个组对象中,客户可以加入多个OPC数据项(Item)。
OPC数据项(Item)是服务器端定义的对象,通常指向设备的一个寄存器单元。
OPC客户对设备寄存器的操作都是通过其数据项来完成的,通过OPC数据项(Ite m),OPC规范尽可能地隐藏了设备的特殊信息,也使OPC服务器的通用性大大增强。
OPC 数据项(Item)并不提供对外接口,客户不能直接对之进行操作,所有的操作都是通过组对象进行的。
每个OPC数据项(Item)的数据结构包括三个成员变量:即数据值、数据质量和时间戳。
数据值是以Variant形式表示的。
Delphi7.0加载Siemens动态库:1.打开Delphi7.0,点击Project->Import Type Library2.在Import Type Library里面找到Siemens OPC DAAutomation 2.0 (Version 1.0),在Clas s Nams里面可以看三个类方法(TOPCGroups,TOPCGroup,TOPCServer),默认的Palette Page为ActiveX,单击Install…Delphi7.0中编写客户端程序:1.连接OPC服务器在Form上面添加三个OPC控件:OPCGroup1: TOPCGroup;OPCGroups1: TOPCGroups;OPCServer1: TOPCServer;具体操作图文说明请到网盘下载注:具体设备的OPC驱动虽然不一致,但是都有统一的标准,本文只是针对Siemens设备,如果有错误欢迎批评指教!。
opc ua server开发实例OPC UA(Open Platform Communications Unified Architecture)是一种用于通信和数据交换的开放标准,它提供了一种可扩展的架构,使得不同设备和系统之间可以实现无缝的集成。
在工业自动化领域,OPC UA Server是一个重要的组件,它扮演着将数据从服务端提供给客户端的角色。
开发一个OPC UA Server需要按照一定的步骤进行,下面将介绍一个基本的开发实例。
我们需要选择一个合适的开发环境,常见的选择有C++、Java 和.NET等。
这里我们选择使用C++进行开发。
接下来,我们需要使用一个OPC UA库,比如开源的open62541库,它提供了一套完整的OPC UA功能。
我们可以在GitHub上找到这个库,并下载相应的源代码。
在开始编写代码之前,我们需要了解OPC UA的基本概念和术语。
OPC UA使用对象、变量和方法来描述设备和系统,它还定义了一些标准的数据类型和通信协议。
了解这些概念对于开发一个OPC UA Server至关重要。
接下来,我们可以开始编写代码了。
首先,我们需要创建一个OPC UA Server对象,并进行初始化。
然后,我们可以创建一些对象、变量和方法,并将它们添加到Server对象中。
这些对象、变量和方法可以表示不同的设备和系统,并提供相应的功能和数据。
例如,我们可以创建一个名为"TemperatureSensor"的对象,它包含一个名为"Temperature"的变量,表示温度值。
在创建对象、变量和方法之后,我们需要定义一些访问权限和安全策略。
OPC UA提供了一套灵活的权限管理和安全机制,可以确保数据的安全性和保密性。
接下来,我们需要实现一些回调函数,用于处理客户端的请求和事件。
在OPC UA中,客户端可以向Server发送请求,比如读取变量的值或调用方法。
基于Java的OPC数据采集系统的设计与实现作者:于波彭亮陈前程来源:《电脑知识与技术》2019年第15期摘要:针对工业控制领域中生产设备种类繁多,数据通信协议不一致,系统集成越发复杂,使得企业难以实现对生产数据采集等问题,提出基于OPC技术的解决方案。
鉴于现今企业上层应用系统多为JavaEE架构,通过采用Java语言实现的Utgard开源类库与OPC通信技术来构建数据采集系统,这不仅降低企业成本,便于自动化控制,同时也是一种新型工业数据采集方式,具有实际应用价值。
关键词:OPC;Java;Utgard;数据采集系统;工业控制中图分类号:TP311 ; ; ; ; 文献标识码:A文章编号:1009-3044(2019)15-0116-03Abstract: 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 enterprisesnowadays, 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 Control1 背景传统工控领域中,为了实现数据采集系统,需要通过驱动程序与现场设备进行数据交换,但由于传统的过程控制系统是一对一的系统,任何一种上位监控软件或其他应用软件,在使用某种硬件设备时都需要开发专用的驱动程序。