OPC协议解析-OPC客户端与服务器通讯解析

1      OPC服务器

OPC服务器, 是指按照OPC基金组织规定的OPC规范群开发的软件驱动。OPC服务器作为中间媒介负责从数据源读取数据再跟另外一端的客户端通信。在 OPC客户端/服务器 的结构图中, 通信的发起端是, 也只能是OPC客户端。客户端和服务器的对话是双向的, 也就是说, 客户端既可以从服务器读出也可以向服务器写入。

TOPC基金会定义了四种不同类型的OPC服务器。他们分别是:

  • OPC数据访问服务器(OPC DA) – 它基于 OPC数据访问规范, 是一种为实时数据通讯特别定义的服务器类别。
  • OPC历史数据访问服务器(OPC HDA) – 它基于OPC历史数据访问规范, 是用来给支持OPC历史数据访问规范的客户端供给历史数据的服务器。
  • OPC报警与事件服务器 (OPC AE) – 它基于OPC报警与事件访问规范, 为支持OPC报警与事件规范的客户端传送报警与时间信息。
  • OPC UA服务器 - 它基于OPC基金总会最新并且最先进的UA规范,使得OPC服务器可以与任何数据形式兼容。

总体来说, 前面三种是存在时间比较长久且比较经典的服务器类型, 但最后一款OPC UA服务器会随着时间的推移成为今后OPC服务器的中流砥柱。

1)OPC客户端与OPC服务器(OPC数据访问服务器、OPC历史数据访问服务器或OPC报警与事件服务器)的通信

OPC服务器是利用Microsoft Windows的 COM/DCOM技术作为数据交换的方式。这就是说OPC服务器必须安装在支持Microsoft Windows操作系统的PC上。一个OPC服务器可以同时跟多于一个的 OPC客户端 通讯。

2)OPC服务器 – 数据传译器

OPC服务器的一个关键作用就是将以数据源输出形式传送的数据, 翻译成支持之前提到的某一或多于一种的OPC数据访问规范形式!!!(比如说, OPC实时数据访问规范)。OPC数据规范群只是定义了OPC服务器的OPC通讯模块, 所以数据形式翻译模块的准确性和高效性就完全取决于OPC服务器供应商的开发方式。

3)OPC服务器与数据源的通信

OPC服务器和数据源用数据源支持的数据形式通信。数据源可以是某个硬件设备, 某个控制器或者是某个应用程序。因为数据源可以各种各样, 而每一个不同形式的数据源又都用自己的通讯协议或者API可以通过多个物理通信方式(串行RS485, RS232, 以太网, 无线通讯等)通信, 所以OPC数据规范群并没有定义OPC服务器和数据源之间的交流法则。 两个关于OPC服务器和数据源通讯的最普遍的例子就是:

通过为一个为某数据源特别编写的服务器的API;

通过一个可以是专属于某一个数据源(请参见MatrikonOPC 霍尼韦尔TPS服务器), 也可也是开放式(请参见MatrikonOPC Modbus服务器)的通信协议。

2      实现与SIMATIC NET OPC DA通讯

OPC是Object Linking and Embedding(OLE)forProcess Control的缩写,它是微软公司的对象链接和嵌入技术在过程控制方面的应用。OPC以OLE/COM/DCOM技术为基础,采用客户/服务器模式,为工业自动化软件面向对象的开发提供了统一的标准,这个标准定义了应用Microsoft操作系统在基于PC的客户机之间交换自动化实时数据的方法,采用这项标准后,硬件开发商将取代软件开发商为自己的硬件产品开发统一的OPC接口程序,而软件开发者可免除开发驱动程序的工作,充分发挥自己的特长,把更多的精力投入到其核心产品的开发上。

SimaticNet是西门子全集成自动化系统中的一个重要组成部分,它为完善的工业自动化控制系统的通讯提供部件和网络,同时提供多个OPCServer,为数据的外部访问提供接口,本文主要以OPC.SimaticNET为例说明。

90年代OPC基金会开发了一系列的通讯接口比如 Data Access (DA), Alarm & Events (A&E), Historical Data Access (HDA) and Data eXchange (DX),统称传统OPC。今天主要使用的OPC DA通讯方式,这个在1995年左右还是很流行的方法,最近几年OPC Foundation又开发了新的 OPC Unified Architecture (UA) 标准,更好的适应了工业4.0。关于传统OPC和OPC UA的区别,后面会单独来说。

许多OPC服务器,包括OPC.SimaticNet,是在COM平台开发的,从而对于基于.NET框架下的C#语言,作为客户端程序语言访问OPCServer,需要解决两个平台间无缝迁移的问题。OPC基金会对会员提供了OpcRcw动态链接库,OPC NET COM 包装器和OPC NET API,将OPC复杂的规范封状成简单易用的C#类 ,可以比较容易地实现数据访问。

OPC主要包含两种接口:CUSTOM标准接口和OLE自动化标准接口,自定义接口是服务商必须提供的,而自动化接口则是可选的。

自定义接口是一组COM接口,主要用于采用C++语言的应用程序开发;

自动化接口是一组OLE接口,主要用于采用VB,DELPHI,Excel等基于脚本编程语言的应用程序开发。本文是使用C#通过自动化接口来实现的,也是最简单的方式。

首先必须了解的是OPC服务器的对象模型:

程序中涉及到的重要方法和属性比较多,解释下几个容易搞混的:

OPCItem 对象的属性ServerHandle,只读属性,服务器提供给Item的句柄,通过此句柄,Client可以定位到此Item,来对此Item进行后续的操作,比如移动删除;

OPCItem 对象的属性ClientHandle,可读可写属性,客户端分配给Item的句柄,这个句柄可以手动设置,也可由.NET随机选取的,不需要我们来设置,并且每次运行时,这

个句柄都不同,类似于TCP scoket通讯中的Client端分配的端口号。Server端必须指定端口号,Client端随机生成,每次都不一样。

OPCGroup 对象的属性的IsSubscribed,可读可写属性,Group的IsSubscribed为True,此Group才能开始接受服务器的数据属性,此Group才能被订阅。

OPCGroup 对象的事件DataChange (TransactionID As Long, NumItems As Long, ClientHandles() As Long,ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)需要注意的是NumItems参数是每次事件触发时Group中实际发生数据变化的Item的数量,而不是整个Group里的Items.

OPCGroup 对象的属性UpdateRate,可读可写属性,规定了数据刷新的周期,单位milliseconds.注意的是,不是设定多少ms,实际就是多少,比如给定53ms,OPC server会就近选择50ms.有区间划分的。

从整体上说下OPC DA的协议规范,OPC DA是在WINDOWS的COM/DOM技术上定义的接口定义,在TCP IP七层模型的最高层应用层,决定了它必须运行在WINDOWS平台,不能够跨平台,灵活性和安全性不如OPC UA,因为OPC DA的会话层和表示层用户是有权利来使用的。

原文地址:https://www.cnblogs.com/meandme/p/10062512.html

时间: 2024-10-21 15:15:00

OPC协议解析-OPC客户端与服务器通讯解析的相关文章

10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

/**10.使用TCP协议完成一个客户端一个服务器.客户端从键盘输入读取一个字符串,发送到服务器. 服务器接收客户端发送的字符串,反转之后发回客户端.客户端接收并打印. * 客户端*/ import java.io.*; import java.net.*; public class Test10_Client { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.0.

loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)

#include "lrs.h" vuser_init(){ char *ip; int handler; //编写获取LR分配的Vuser IP函数,将IP保存在ip变量中. ip=lr_get_vuser_ip(); if(ip) lr_vuser_status_message("the ip address is %s:",ip); else lr_vuser_status_message("IP spooler disabled"); /

OPC协议解析-关于OPC协议的几个问题

1    什么是OPC协议? 为了便于自动化行业不同厂家的设备和应用程序能相互交换数据,定义了一个统一的接口函数,就是OPC协议规范.有了OPC就可以使用统一的方式去访问不同设备厂商的产品数据. OPC基金会前前后后规定了不同的接口定义,如下: ? OPC DA (Data Access, exchange of real-time values) ? OPC A&E (Alarms & Events, exchange of alarms and events) ? OPC HDA (H

OPC协议解析-OPC UA OPC统一架构

1    什么是OPC UA 为了应对标准化和跨平台的趋势,为了更好的推广OPC,OPC基金会近些年在之前OPC成功应用的基础上推出了一个新的OPC标准-OPC UA.OPC UA接口协议包含了之前的 A&E, DA,OPC XML DA or HDA,只使用一个地址空间就能访问之前所有的对象,而且不受WINDOWS平台限制,因为它是从传输层Scoket以上来定义的,这点后面会提到,导致了灵活性和安全性比之前的OPC都提升了. 2    OPC UA的优势 1)一个通用接口集成了之前所有OPC的

Android客户端向服务器传递图片(使用Http协议)

使用Http协议向服务器传递图片,那么就要首先了解Http协议这个报文里边的信息格式: web端传递图片一般都是使用表单的形式来传递的,通过post的形式传递的,在这里要使用到两个jar包,分别是:commons-fileupload.jar和commons-io.jar这俩jar包. 下边来说一说Http协议上传文件头文件的格式: 其实我们这种前后台的交互是用的HTTP协议.而http协议默认是传的字符串.所以我们上传文件的话要加enctype = "multipart/form-data&q

时间服务器通讯协议

目录 第1章通讯协议    1 1.1 RFC-868    1 1.2 time/UDP    2 1.3 NTP    3 1.3.1 客户端给服务器发送请求    3 1.3.2 服务器给客户端的回复    5 1.3.3 网络延时    5 第1章通讯协议 通过访问时间服务器,就可以获得精准的时间.Windows7自带访问时间服务器的功能,如下图所示: 这里就存在一个问题了:如何才能获得时间服务器time.windows.com上的时间?这就需要了解时间服务器的通讯协议了. 1.1 RF

android客户端与服务器交互数据(基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合)

在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP已经提供了基于android版本的jar包 首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包 然后新建android项目 以

JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. 网络分层除了OSI模型分层,还有TCP/IP模型分层,将网络划分为四层,应用层.传输层.网际层

Linux 下 简单客户端服务器通讯模型(TCP)

原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include <stdio.h> #include <unistd.h> #inclu