C#连接WINCC的OPC服务器
不宜生搬硬套,理解这些语句的含义,你就明白怎么做了。
你的语句是添加条目的,用法是:组名集合名additem(条目名称)。
连wincc的服务器也是一样的写法,确认好名称就好了。
第62行的代码,DCOM既然是远程服务器,那它就应该是可以运行在另外一台机器上,然后被其他机器的客户端所使用。所以C++的客户端代码里,你可以通过编程的方式指定服务器的名称,但是对于C#来说,因为连接到DCOM服务器并激活COM对象的操作是由CLR完成的,没有办法在代码里指定。不过不用着急,指定DCOM服务器还有另外一个方式,就是修改注册表的键值,告诉本机的COM运行库,服务器在另外一台机器上,请把下面的键值添加到客户端机器的注册表里:
HKEY_CLASSES_ROOT\APPID\{5e9ddec7-5767-11cf-beab-00aa006c3606}\RemoteServerName=<机器名>
下面的是我的代码
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服务器。请教各位我该如何设置才能连接远程OPC服务器
如何使用OPC SERVER FOR INTOUCH
1、 安装OPC SERVER FOR INTOUCH
2、 运行OPC SERVER FOR INTOUCH,并为其制定INTOUCH文件所在路径。如下图
双击红框内位置,可以添加需要运行的INTOUCH路径。
3、 添加完毕后,运行INTOUCH WINDOW VIEWER。再运行server。如下图
4、 若是设置没有出错,则会出现如图所示图标
在本机上安装ITOPC client,以测试server是否创建成功。 5、 打开OPC CLIENT FOR INTOUCH,点击“OPC SERVER”按钮。如下图
在随后的OPC Server(s) listing中选择“OPC SERVER FOR INTOUCH”。如图
然后点击“connect”按钮。若连接上后会出现如下图红框内所示。
勾选$second,可以看到数据类型、当前值等信息。
6、 然后看server端得状态,如下图所示
由此可见,server和client连接成功。Server创建成功。
出自:http://wenkubaiducom/linkurl=YUkiwpOakDdcoztnAylQy9UfDLRbEzl7ffLuyp8mKpOPbTWp52H9rn88OXV_IJEkmr7IYUbrqvjLLuGYXdtgw05MjHx5jU1qqu6LyJnC31a
服务器的话要看,如果是client-server结构的DCS,服务器位于上位和控制器之间,他将你的指令和现场数据通过服务器来经过交换,服务器一般是冗余配置,如果是并行结构来说没有所谓服务器的概念,只有个工程师站,程序的下装通过工程师站,但是数据的获取和指令的下达通过操作员站就行,这个好处就是当工程师站坏了的话操作员站可以正常工作
OPC服务器的作用是通过OPC协议将DCS的数据取出,并开放,一般一个OPC服务器下面连接一个或多个客户端,客户端通过安装相应的软件(也支持OPC协议),来取得DCS的协议
0条评论