高分悬赏:opc sever,opc client,opc da关于OPC的疑问,opc服务器和客户端完成opc的写入和读取

高分悬赏:opc sever,opc client,opc da关于OPC的疑问,opc服务器和客户端完成opc的写入和读取,第1张

个人理解:

举个简单的例子吧。比如我公司用的ABB DCS,有专门的上位机软件Digivis,可以实现现场数据读和写;同时,这个DCS也提供了OPC访问接口,我们自己也做了一个OPC Client也实现了对现场数据的读和写。

1、如果没有ABB DCS的底层驱动(原生组态软件),是无法实现PC与现场硬件的通讯的,那就不会有OPCServer了。

2、先有了ABB DCS的原生软件,将现场数据采集过来,然后在将这些数据通过OPC Server发布出去。

又比如Siemens S7 200的PLC,你能直接连接其OPC么?不能。因为它根本没这个接口。你得需要先使用Wincc与PLC建立连接,然后通过Wincc的OPCServer将数据发布出来,你才能使用OPC Client与该PLC通讯。OPC的出现就是为了解决我们用户访问各类控制器而提供的一个标准接口,它避免了用户去编写各类复杂甚至加密了的底层驱动。 其实组态王什么的工控软件,它就是编写了各类底层通讯驱动,所以,只有OPC Client是不行的。

数据库客户端 与 数据库之间进行数据对接是,必须有数据库对应的 ODBC ,这样一来,客户端才能访问到数据库的数据,并建立连接。一般客户端安装的时候,都会把与数据连接的相关东西装上的,不用单独安装的,如果没有,那只能下载安装了。注:odbc只是连接数据库形式中的一种。

可以使用office里的Excel进行改变,具体方法如下:

OPC(OLE for process control)作为标准软件接口,可以使各个生产商的设备和应用程序就能以统一的方式连接起来。WinCC既可以用作OPC服务器提供数据,又可以作为OPC客户机访问其他OPC服务器中的数据。WinCC集成的OPC服务器使得过程数据可由其它应用程序(OPC客户机)访问。在Excel中可以通过VBA脚本建立OPC客户端,并通过OPC接口读取WinCC中的数据,并将修改的数据写入WinCC。

办公软件是指可以进行文字处理、表格制作、幻灯片制作、图形图像处理、简单数据库的处理等方面工作的软件。办公软件朝着 *** 作简单化,功能细化等方向发展。办公软件的应用范围很广,大到社会统计,小到会议记录,数字化的办公,离不开办公软件的鼎力协助。另外,政府用的电子政务,税务用的税务系统,企业用的协同办公软件,这些都属于办公软件。

一准备工作:

下载opc基金会的OPC Proxy DLL然后按照说明进行安装。这些动态库是opc程序运行所必须的。

1 将下列文件拷贝至要运行OPC服务器和OPC客户端的机器上的SYSTEM32目录下

copy opcproxydll C:\WINDOWS\system32

copy opccomn_psdll C:\WINDOWS\system32

copy opc_aepsdll C:\WINDOWS\system32

copy opchda_psdll C:\WINDOWS\system32

copy aprxdistexe C:\WINDOWS\system32

copy opcenumexe C:\WINDOWS\system32

2 注册这些 dll 文件

REGSVR32 opcproxydll

REGSVR32 opccomn_psdll

REGSVR32 opc_aepsdll

REGSVR32 opchda_psdll

3 如果在windows 系统(\WINDOWS \system32)目下不存在actxprxydll,运行aprxdistexe

4 安装 opcenumexe

opcenum /regserver

二opcserver开发

1 新建vc工程。比如建一个控制台工程。在工程中包含如下头文件

#include "opcdah"

#include "opc_aeh"

#include "WTOPCsvrAPIh"

#include "WtOPCsvrEXTapih"

以上头文件在例子程序中都能找到,拷贝到自己的工程下。

WTOPCsvrAPIh是开发包动态库提供的导出函数文件。里面有每个函数的具体说明,调用的时候看一下说明。

2 在cpp中定义一个GUID这个guid是用来标识opcserver的唯一id可以通过 *** 作系统的工具生成,也可以编一个。格式如下。

const GUID

CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}};

3 在工程中加入对WtOPCSvr动态库的连接。

WTOPCsvr动态库的有关文件都在之前的例子包里面能找到。

WTOPCsvrlib WTOPCsvrdll是对应lib和dll

4 初始化

(1)调用UpdateRegistry()函数完成注册。下面是一个调用参考例子代码

BOOL COPCSimSvrApp::InitInstance()

{

TCHAR szTokens[] = _T("-/ ");

CString HelpPath;

CString SvrName, SvrDescrip;

int i;

HelpPath = AfxGetApp()->m_pszHelpFilePath;

i = HelpPathReverseFind('\\');

HelpPath = HelpPathLeft(i+1);

HelpPath += "OPCSIMSVREXE";

//

// Self-Registration code

// (look for cmdline options to register & unregister server)

//

SvrName = "WinTECHOPCServer";

SvrDescrip = "WinTECH Software OPC Server Simulator";

CString tempCmdLine(m_lpCmdLine);

LPTSTR lpszToken = _tcstok(tempCmdLineGetBuffer(1), szTokens);

while (lpszToken != NULL)

{

if (_tcsicmp(lpszToken, _T("UnregServer"))==0)

{

UnregisterServer ((BYTE )&CLSID_OPCSimSvr, SvrName);

return (FALSE);

}

else if (_tcsicmp(lpszToken, _T("RegServer"))==0)

{

UpdateRegistry ((BYTE )&CLSID_OPCSimSvr,

SvrName,

SvrDescrip,

HelpPath);

return (FALSE);

}

lpszToken = _tcstok(NULL, szTokens);

}

(2)调用InitWTOPCsvr完成开发包dll初始化。

以上两个步骤不可颠倒。

5 创建item

这里的item是服务器所有的item,这些item通过opc库户端能浏览到。创建item的函数为CreateTag()

Opc有两种地址空间形式:扁平和多层结构的。

比如调用创建的点为item1、item2、item3这类结构就是扁平的。各个点类似与文件系统中的文件。

比如调用创建的点为testitem1、testitem2、testitem3这种点名,开发包会自动形成多层的点结构。Test类似与文件系统中的文件夹,item类似与文件系统中的文件夹下的文件。扁平式和多层结构在客户端浏览点名时体现。

多层结构的点名之间默认是用“”分隔。为了简单可以将我们的opcserver设计为扁平结构。

创建一个点时会返回一个handle用来标识这个点。我们程序需要自己建立这个handle和数据库中保存设备实时值的对应关系。这部分可以参考例子代码。

6 建立一个定时器采集设备数据

定时从数据库中取得各个handle对应的item的值。然后比较各个item的值是否和上一次读取的值有变化,如果有变化调用UpdateTagToList放入对应的队列。开发包会自动将变化的值送到客户端。

大致流程为

(1) 从数据库中采集一遍所有点的实时值。

(2) 调用StartUpdateTags()

(3) 循环读取每个item在数据库中的数据,和上一次读取到的进行比较。如果有变化调用UpdateTagToList()

(4) 最用调用EndUpdateTags()完成所有item的更新。

7 客户端控制

客户端写tag的值的时候,在opcserver是通过一个回调函数来响应的。

在服务器端必须调用EnableWriteNotification()来指定写值的回调函数。回调函数的格式为:

typedef VOID (CALLBACK WRITENOTIFYPROC)(HANDLE, VARIANT, DWORD);

然后在回调函数内部实现从HANDLE指定的tag写到具体的控制设备对应的变量中。

8 其它常用函数

RequestDisconnect()一般在opcserver在关闭时调用,用来通知客户端opcserver自己要关闭。

NumbrClientConnections()用来计算当前有多少个客户端连接到了opcserver

UninitWTOPCsvr()程序退出时清理

SetVendorInfo()设置厂商信息

三opc客户端测试

下面以本机opcquickclientexe为例说明服务器和客户端之间的应用关系。

1 运行opcquickclientexe

2 点击edit->new server connection 菜单。d出server properties对话框。从中展开opc data access server version 20会浏览到本机安装的所有opcserver。选中我们自己开发的opcserver,点击确定。完成与服务器的连接

3 点击edit->new group 用默认值添加组。

4 点击edit->new item d出如下对话框。(下图是一个多层结构地址空间的例子,单层的更简单)选中左侧的某个父节点,右侧会显示出各个子tag。选中要向opcserver查询的tag,点击add leaves。然后点击ok

5 在客户端主界面上能看到刚才要查询的tag。它会自动跟随opcserver端数据的变化而变换。

6 右键要控制的tag,在菜单中选择同步写或者异步写(一般建议用异步,避免阻塞客户端的正常运行)。键入要写入的值。查看设备上是否动作。从而检验opcserver是否编写的正确。

WInCC的实时数据会默认存储到本地的SQL Server中进行归档,当然wincc也可以作为opc 的server 将自己的实时数据给到opc 的client,那么你也可以在opc client上将从wincc中获得的数据存储到其他数据库中。

也可以用wincc的选件工业数据桥

>

Wincc 本身自带集成的SQL数据库,视版本不同而有所不同。所有历史数据都可以存在变量归档中。如果需要制作报表等,可利用用户归档。如果是因第三方需要则可通过OPC协议进行通讯。

现在西门子推出PH(Process Historian)取代了原来的CAS(中央归档服务器),同步推出了Information Server(信息服务器)。PH服务器就是基于SQL Server2008R2 SP1,但区别商用数据库,这种是定制版,结构上有所差别,支持TimeStamp毫秒级别。你可以通过直接访问PH来获取你所需数据。你可以到西门子自动化官网查找相关资料或咨询西门子客服。所以你没必要做这种重复性的工作,而且也得不到你想要的数据,还是利用PH服务器这种结构为妙。

一个数据库体系结构图如果放到以前,大概我还是不会去关注OPC到底是什么,认为只要能够应用数据库就行了。今天自己却好好地去了解了一下OPC。

首先OPC是什么的?

OPC(OLE for Process Control)是一种通信标准。

我们在编写程序时,可能会出现与其他应用程序或硬件设备的信息交互的情况。如果我们没有一种统一的通信标准,每个程序或硬件设备都有自己的一套信息输入输出的方式,那么信息交互就会很麻烦。对于编程人员来说,就需要针对每一个需要交互的应用程序、每一个硬件设备编写大量的驱动程序来进行连接和信息交互。

就像是很多交互的马路,如果没有一套统一的交通法规,我们虽然可以通行,但肯定会有很多的麻烦和问题。

数据交互的路线就好比这些马路,我们也必须给数据交互一个统一的标准,这便出现了OPC。

OPC为硬件设备与软件程序之间的通信建立一个接口标准,提供了一种标准的数据访问机制。

所以说OPC既不是硬件,也不是软件。它就是一套标准的数据存取规范。

其次OPC又包含什么呢?

OPC由两部分组成:OPC服务器和OPC客户端。

OPC服务器是一个软件应用程序或标准驱动程序。一些硬件商家或是软件商家,有专门开发这类驱动程序的,可以根据需要将此类驱动程序安装在电脑上。它充当OPC客户端与数据源之间的翻译器(此处的数据源可以是某个硬件设备,某个控制器或某个应用程序)。

OPC客户端也是一个软件应用程序,更确切的说是一个应用程序中的软件模块。(一般情况OPC客户端被嵌入应用程序之中,目的在于使这些应用程序自然支持OPC接口)

最后OPC服务器与OPC客户端又是如何工作的呢?

OPC客户端先是将应用程序的数据请求转换成OPC请求发送给OPC服务器,OPC服务器向数据源发起读取或写入数据请求。

OPC服务器获取数据源输出的数据,并将其翻译成支持一个或多个OPC数据访问规范形式的数据,发送给OPC客户端。OPC客户端再将获取的数据转换成应用程序本地的通信格式。

以上便为OPC服务器与OPC客户端的工作原理。

以上就是关于高分悬赏:opc sever,opc client,opc da关于OPC的疑问,opc服务器和客户端完成opc的写入和读取全部的内容,包括:高分悬赏:opc sever,opc client,opc da关于OPC的疑问,opc服务器和客户端完成opc的写入和读取、客户端跟数据库如何进行数据对接、office如何访问opc里的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9833816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存