怎样用Delphi编写OPC客户端程序

怎样用Delphi编写OPC客户端程序,第1张

开发OPC 客户端程序时,首先应该生成OPC 服务器支持的OPC 对象,然后就 可以使用OPC 对象支持的属性和方法,对其进行各种 *** 作。这样使得客户程序可 以像使用自己支持的数据和功能一样,去使用服务器对象支持的数据和功能。

服务器的话要看,如果是client-server结构的DCS,服务器位于上位和控制器之间,他将你的指令和现场数据通过服务器来经过交换,服务器一般是冗余配置,如果是并行结构来说没有所谓服务器的概念,只有个工程师站,程序的下装通过工程师站,但是数据的获取和指令的下达通过 *** 作员站就行,这个好处就是当工程师站坏了的话 *** 作员站可以正常工作
OPC服务器的作用是通过OPC协议将DCS的数据取出,并开放,一般一个OPC服务器下面连接一个或多个客户端,客户端通过安装相应的软件(也支持OPC协议),来取得DCS的协议
乐拾芗逸盆然朵邢浏晔链特磊枫待谨璀楷塘丞彰

OPC
server和OPC
client的区别:
1、执行的功能不同:
OPC
Server/Client
是一套利用微软的
COM/DCOM
技术达成工业自动化资料取得的架构。OPC
Server
提供了许多的接口,Client
端通过这些接口,可以取得与
OPC
Server
相连的硬件装置的信息,而无须了解这些硬件装置的细节信息。
2、开发环境不同:
当开发OPC
Client程序时,最好使用Windows桌面程序方式,这种方式可兼容OPC
Server程序运行在Windows桌面程序方式和Windows
NT服务方式,而当开发OPC
Server程序时,最好使用Windows
NT服务方式。
3、运行的标准不同:
可以将OPC
Server看作是协议转换器,OPC
Server使用设备的专用协议与设备通信,然后使用OPC
Classic和OPC
UA规范定义的标准化格式提供对该数据的访问。通常情况下,OPC
Server在OPC
Client请求读取或写入数据之前不会执行任何 *** 作。
参考资料来源:百度百科-OPC
Server
参考资料来源:百度百科-开放平台通信

public void ListAll(Guid catid, out OpcServers[] serverslist)
{
serverslist = null;
Dispose();
Guid guid = new Guid("13486D51-4821-11D2-A494-3CB306C10000");
Type typeoflist = TypeGetTypeFromCLSID(guid);
OPCListObj = ActivatorCreateInstance(typeoflist);
ifList = (IOPCServerList)OPCListObj;
if (ifList == null)
MarshalThrowExceptionForHR(HRESULTSE_ABORT);
ifListEnumClassesOfCategories(1, ref catid, 0, ref catid, out EnumObj);
if (EnumObj == null)
MarshalThrowExceptionForHR(HRESULTSE_ABORT);
ifEnum = (IEnumGUID)EnumObj;
if (ifEnum == null)
MarshalThrowExceptionForHR(HRESULTSE_ABORT);
int maxcount = 300;
IntPtr ptrGuid = MarshalAllocCoTaskMem(maxcount 16);
int count = 0;
ifEnumNext(maxcount, ptrGuid, out count);
if (count < 1)
{ MarshalFreeCoTaskMem(ptrGuid); return; }
serverslist = new OpcServers[count];
byte[] guidbin = new byte[16];
int runGuid = (int)ptrGuid;
for (int i = 0; i < count; i++)
{
serverslist[i] = new OpcServers();
MarshalCopy((IntPtr)runGuid, guidbin, 0, 16);
serverslist[i]ClsID = new Guid(guidbin);
ifListGetClassDetails(ref serverslist[i]ClsID,
out serverslist[i]ProgID, out serverslist[i]ServerName);
runGuid += 16;
}
MarshalFreeCoTaskMem(ptrGuid);
Dispose();
}

你先得确认那个OPC服务器是OPC DA的还是OPC UA的才行,如果是早期的OPC DA服务器,肯定是不支持OPC UA的。
如果那个服务器支持OPC UA,那么只要你的客户端写的规范点,应该可以连接上。


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

原文地址: https://outofmemory.cn/zz/12912290.html

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

发表评论

登录后才能评论

评论列表(0条)

保存