如何用VB编写OPC客户端程序

如何用VB编写OPC客户端程序,第1张

 开发OPC 客户端程序时,首先应该生成OPC 服务器支持的OPC 对象,然后就 可以使用OPC 对象支持的属性和方法,对其进行各种 *** 作。这样使得客户程序可 以像使用自己支持的数据和功能一样,去使用服务器对象支持的数据和功能。在 VisualBasic60 里,是以对象为单位对OPC 服务器进行访问的。通过OPC 自动化 服务器的对象模型,可以得知OPC 自动化接口由以下四种对象所定义。1 OPCServer 服务器对象OPCServer 的一个实例,OPC 服务器自动含有一个OPC 组集合 对象,并可在其基础上生成一个OPC 浏览器对象。 OPCServer 服务器对象在使用其它OPC 对象前必须生成,也就是说在引用 其他对象之前必须先创建OPCServer。OPCServer 对象提供了对数据源访问和通 信的方法,其提供了“Connect”方法来连接OPC 自动化服务器。 主要属性: StartTime(只读属性,服务器启动运行的时间) CurrentTime(只读属性,返回服务器显示的当前时间) LastUpdateTime(对于本OPC 应用程序的最后数据更新时间) MajorVersion(只读属性,OPC 服务器的主版本号) MinorVersion(只读属性,OPC 服务器的次版本号) Bandwith(只读属性,返回OPC 服务器的不敏感区的百分比) ServerState(只读属性,返回服务器的运行状态,这个属性是比较重要的,方 便客户端程序查询服务器的状态,从而达到排除故障的目的) ServerName(只读属性,返回客户程序所要连接的服务器名,也就是OPC 服 务器的ProgID) ServerNode(服务器所在计算机名或者计算机的IP,用于连接远程的计算机) 等。 主要方法: GetOPCservers(获得己经注册的OPC 服务器的程序标识符,即ProgID) Connect(用来建立与OPC 数据存取服务器的连接) Disconnect(断开与服务器的连接) CreatBrowser(创建OPC 浏览器的对象)等。 事件: 只有一个ServerShutDown(关闭服务器,这个事件在服务器即将关闭之前发 生,OPC 服务器以此通知OPC 客户程序预告即将关闭,OPC 客户程序应该在接 到此事件通知后,立即清除所有的OPC 组并断开与OPC 服务器的连接)。

准备工作:
载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定义GUIDguid用标识opcserver唯id通 *** 作系统工具编格式
const GUID
CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}};
3 工程加入WtOPCSvr态库连接
WTOPCsvr态库关文件都前例包面能找
WTOPCsvrlib WTOPCsvrdll应libdll
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 菜单dserver 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否编写确

OPC服务器的功能就是与下位机进行数据的交换,其中包含了大量的通讯程序和数据存贮程序。然后提供标准的OPC接口,供其它软件使用。程序标准化以后,其他的软件商只需开发面对服务器的程序即可,不用对不同的硬件设备开发不同的硬件驱动程序。减小了工作量,也方便了使用。

OPC是OLE for Process Control的缩写,即把OLE应用于工业控制领域。OLE原意是对象链接和嵌入,随着OLE 2的发行,其范围已远远超出了这个概念。现在的OLE包容了许多新的特征,如统一数据传输、结构化存储和自动化,已经成为独立于计算机语言、 *** 作系统甚至硬件平台的一种规范,是面向对象程序设计概念的进一步推广。OPC建立OLE规范之上,它为工业控制领域提供了一种标准的数据访问机制。

opc是什么:

OPC(OLE for Process Control)技术是指为了给工业控制系统应用程序之间的通信建立一个接口标准,在工业控制设备与控制软件之间建立统一的数据存取规范。

它给工业控制领域提供了一种标准数据访问机制,将硬件与应用软件有效地分离开来,是一套与厂商无关的软件数据交换标准接口和规程,主要解决过程控制系统与其数据源的数据交换问题,可以在各个应用之间提供透明的数据访问。

作用:

OPC诞生以前,硬件的驱动器和与其连接的应用程序之间的接口没有统一的标准。如在工厂自动化(Factory Automation,FA)领域,连接PLC等控制设备和SCADALVHMI软件需要不同的工业自动化网络系统构成。

OPC是为了不同供应厂商的设备和应用程序之间的软件接口标准化,并使其间的数据交换更加简单化的目的而提出的。它可以向用户提供不依赖于特定开发语言和开发环境的、可以自由组合使用的过程控制软件组件产品。

OPC系统是由按照应用程序(客户程序)的要求提供数据采集服务的OPC服务器,使用OPC服务器所必需的OPC接口,以及接受服务的OPC应用程序所构成。OPC服务器是利用各个供应厂商的硬件所开发的,使之可以吸收各个供应厂商硬件和系统的差异,从而实现不依赖于硬件的系统构成。

同时利用一种叫VARIANT的数据类型,可以不依赖于硬件中固有的数据类型,按照应用程序的要求提供数据格式。


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

原文地址:https://54852.com/zz/12691897.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-27
下一篇2025-08-27

发表评论

登录后才能评论

评论列表(0条)

    保存