收藏 分销(赏)

(C#)OPC客户端源码.doc

上传人:丰**** 文档编号:3138149 上传时间:2024-06-19 格式:DOC 页数:28 大小:337.50KB
下载 相关 举报
(C#)OPC客户端源码.doc_第1页
第1页 / 共28页
(C#)OPC客户端源码.doc_第2页
第2页 / 共28页
(C#)OPC客户端源码.doc_第3页
第3页 / 共28页
(C#)OPC客户端源码.doc_第4页
第4页 / 共28页
(C#)OPC客户端源码.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、【转】(C#)OPC客户端源码 转载申明 申明:本文为转载,如需转载本文,请获取原文作者大尾巴狼啊的同意,谢谢合作!转自:大尾巴狼啊原文出处:前几天我就发布过这篇文章,可惜的是,发布后代码有的却看不到,后来我就删了,至今不明白什么原因- -!关于C+、VB来开发OPC客户端的资料网上有很多,但C#的至今没发现有多少。由于近期项目的需要,就开发了OPC客户端的一个模块。在我想来,程序员挺累的,原因我很累。所以我想大家也很累嘿嘿。特别是刚接手OPC客户端开发的前几天,天天盯住显示器,百度、GOOGLE不停的搜索。每天早上醒来,眼睛都瑟瑟的。从事3年以上软件开发的朋友们,估计都会腰酸背痛吧!反正我是

2、这样的。不说那么多废话了,贴上源码,让需要的同行看看吧,代码的质量并不高,就当做抛砖引玉吧!1、枚举本地服务器2、获取服务器信息3、列出了服务器上Tag4、可以设置组的属性5、读写功能6、可进行远程连接(DCOM需配置)先看图:引用类库:OPC服务器:开发工具:当前环境:源码:Code/摘要/程式使用C#.NET2005编写/引用类库OPCDAAuto.dll/OPCServer采用KEPWare/在windowsxpsp2、sp3、windows2003上测试通过/完成于:2008年12月31日/测试于:2009年01月05日/作者:潇洒草/Email:zhkai868/QQ:4464902

3、9/如分发,请保留此摘要。/鄙视那些拿代码当宝贝的人,鄙视那些你不拿源码换就不稀罕你的人,鄙视那些自私的人。/别人看到你的代码,你能死啊?对你有多大威胁啊?强烈鄙视/如果你是这样的人,赶紧关了。偶不欢迎。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Collections;usingOP

4、CAutomation;namespaceOPC测试通过publicpartialclassMainFrom:FormpublicMainFrom()InitializeComponent();#region私有变量/OPCServerObject/OPCServerKepServer;/OPCGroupsObject/OPCGroupsKepGroups;/OPCGroupObject/OPCGroupKepGroup;/OPCItemsObject/OPCItemsKepItems;/OPCItemObject/OPCItemKepItem;/主机IP/stringstrHostIP=;/

5、主机名称/stringstrHostName=;/连接状态/boolopc_connected=false;/客户端句柄/intitmHandleClient=0;/服务端句柄/intitmHandleServer=0;#endregion#region方法/枚举本地OPC服务器/privatevoidGetLocalServer()/获取本地计算机IP,计算机名称IPHostEntryIPHost=Dns.Resolve(Environment.MachineName);if(IPHost.AddressList.Length0)strHostIP=IPHost.AddressList0.T

6、oString();elsereturn;/通过IP来获取计算机名称,可用在局域网内IPHostEntryipHostEntry=Dns.GetHostByAddress(strHostIP);strHostName=ipHostEntry.HostName.ToString();/获取本地计算机上的OPCServerNametryKepServer=newOPCServer();objectserverList=KepServer.GetOPCServers(strHostName);foreach(stringturnin(Array)serverList)cmbServerName.It

7、ems.Add(turn);cmbServerName.SelectedIndex=0;btnConnServer.Enabled=true;catch(Exceptionerr)MessageBox.Show(枚举本地OPC服务器出错:+err.Message,提示信息,MessageBoxButtons.OK,MessageBoxIcon.Warning);/创建组/privateboolCreateGroup()tryKepGroups=KepServer.OPCGroups;KepGroup=KepGroups.Add(OPCDOTNETGROUP);SetGroupProperty(

8、);KepGroup.DataChange+=newDIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);KepGroup.AsyncWriteComplete+=newDIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete);KepItems=KepGroup.OPCItems;catch(Exceptionerr)MessageBox.Show(创建组出现错误:+err.Message,提示信息,MessageBoxButtons.

9、OK,MessageBoxIcon.Warning);returnfalse;returntrue;/设置组属性/privatevoidSetGroupProperty()KepServer.OPCGroups.DefaultGroupIsActive=Convert.ToBoolean(txtGroupIsActive.Text);KepServer.OPCGroups.DefaultGroupDeadband=Convert.ToInt32(txtGroupDeadband.Text);KepGroup.UpdateRate=Convert.ToInt32(txtUpdateRate.Te

10、xt);KepGroup.IsActive=Convert.ToBoolean(txtIsActive.Text);KepGroup.IsSubscribed=Convert.ToBoolean(txtIsSubscribed.Text);/列出OPC服务器中所有节点/privatevoidRecurBrowse(OPCBrowseroPCBrowser)/展开分支oPCBrowser.ShowBranches();/展开叶子oPCBrowser.ShowLeafs(true);foreach(objectturninoPCBrowser)listBox1.Items.Add(turn.ToS

11、tring();/获取服务器信息,并显示在窗体状态栏上/privatevoidGetServerInfo()tsslServerStartTime.Text=开始时间:+KepServer.StartTime.ToString()+;tsslversion.Text=版本:+KepServer.MajorVersion.ToString()+.+KepServer.MinorVersion.ToString()+.+KepServer.BuildNumber.ToString();/连接OPC服务器/OPCServerIP/OPCServer名称privateboolConnectRemote

12、Server(stringremoteServerIP,stringremoteServerName)tryKepServer.Connect(remoteServerName,remoteServerIP);if(KepServer.ServerState=(int)OPCServerState.OPCRunning)tsslServerState.Text=已连接到-+KepServer.ServerName+;else/这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档tsslServerState.Text=状态:+KepServer.ServerState.ToSt

13、ring()+;catch(Exceptionerr)MessageBox.Show(连接远程服务器出现错误:+err.Message,提示信息,MessageBoxButtons.OK,MessageBoxIcon.Warning);returnfalse;returntrue;#endregion#region事件/写入TAG值时执行的事件/voidKepGroup_AsyncWriteComplete(intTransactionID,intNumItems,refArrayClientHandles,refArrayErrors)lblState.Text=;for(inti=1;i=

14、NumItems;i+)lblState.Text+=Tran:+TransactionID.ToString()+CH:+ClientHandles.GetValue(i).ToString()+Error:+Errors.GetValue(i).ToString();/每当项数据有变化时执行的事件/处理ID/项个数/项客户端句柄/TAG值/品质/时间戳voidKepGroup_DataChange(intTransactionID,intNumItems,refArrayClientHandles,refArrayItemValues,refArrayQualities,refArrayT

15、imeStamps)/为了测试,所以加了控制台的输出,来查看事物ID号/Console.WriteLine(*+TransactionID.ToString()+*);for(inti=1;i=NumItems;i+)this.txtTagValue.Text=ItemValues.GetValue(i).ToString();this.txtQualities.Text=Qualities.GetValue(i).ToString();this.txtTimeStamps.Text=TimeStamps.GetValue(i).ToString();/选择列表项时处理的事情/privatev

16、oidlistBox1_SelectedIndexChanged(objectsender,EventArgse)tryif(itmHandleClient!=0)this.txtTagValue.Text=;this.txtQualities.Text=;this.txtTimeStamps.Text=;ArrayErrors;OPCItembItem=KepItems.GetOPCItem(itmHandleServer);/注:OPC中以1为数组的基数inttemp=newint20,bItem.ServerHandle;ArrayserverHandle=(Array)temp;/移除

17、上一次选择的项KepItems.Remove(KepItems.Count,refserverHandle,outErrors);itmHandleClient=1234;KepItem=KepItems.AddItem(listBox1.SelectedItem.ToString(),itmHandleClient);itmHandleServer=KepItem.ServerHandle;catch(Exceptionerr)/没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。itmHandleClient=0;txtTagValue.Text=Errorox;txtQual

18、ities.Text=Errorox;txtTimeStamps.Text=Errorox;MessageBox.Show(此项为系统保留项:+err.Message,提示信息);/载入窗体时处理的事情/privatevoidMainFrom_Load(objectsender,EventArgse)GetLocalServer();/关闭窗体时处理的事情/privatevoidMainFrom_FormClosing(objectsender,FormClosingEventArgse)if(!opc_connected)return;if(KepGroup!=null)KepGroup.D

19、ataChange-=newDIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);if(KepServer!=null)KepServer.Disconnect();KepServer=null;opc_connected=false;/【按钮】设置/privatevoidbtnSetGroupPro_Click(objectsender,EventArgse)SetGroupProperty();/【按钮】连接服务器/privatevoidbtnConnLocalServer_Click(objectsender,EventA

20、rgse)tryif(!ConnectRemoteServer(txtRemoteServerIP.Text,cmbServerName.Text)return;btnSetGroupPro.Enabled=true;opc_connected=true;GetServerInfo();RecurBrowse(KepServer.CreateBrowser();if(!CreateGroup()return;catch(Exceptionerr)MessageBox.Show(初始化出错:+err.Message,提示信息,MessageBoxButtons.OK,MessageBoxIcon

21、.Warning);/【按钮】写入/privatevoidbtnWrite_Click(objectsender,EventArgse)OPCItembItem=KepItems.GetOPCItem(itmHandleServer);inttemp=newint20,bItem.ServerHandle;ArrayserverHandles=(Array)temp;objectvalueTemp=newobject2,txtWriteTagValue.Text;Arrayvalues=(Array)valueTemp;ArrayErrors;intcancelID;KepGroup.Asyn

22、cWrite(1,refserverHandles,refvalues,outErrors,2009,outcancelID);/KepItem.Write(txtWriteTagValue.Text);/这句也可以写入,但并不触发写入事件GC.Collect();#endregion自动化接口API文档:关于DCOM的配置:有需要的留下EMAIL。update:1、例子代码下载地址:点击下载2、客户端连接OPC服务器注意事项:a、本例采用的OPCDAAuto.dll版本是2.2.5.20。b、需要使用“regsvr32 /s OPCDAAuto.dll”命令在客户端计算机上注册这个程序集。c

23、、首先保证客户机和服务器的网络是联通的。Tag标签: opc,OPC客户端,C#开发OPC,OPC远程访问,OPC服务器远程访问,OPC源码badnewfish关注 - 0粉丝 - 0关注博主4 0 0 (请您对文章做出评价) 上一篇:异步Socket【转】 下一篇:【转】c# xml添加 删除 修改数据posted on 2009-01-13 16:10 badnewfish 阅读(3374) 评论(52) 编辑 收藏 所属分类: OPC 评论1605778 #1楼 219.239.36.* 回复引用 想要文档和源码,谢谢! 2009-01-13 16:26 | 小毛未注册用户 #2楼 22

24、1.232.69.* 回复引用 想要文档和源码,请问下timestemp能作为item的value改变的依据么? 2009-01-22 13:27 | lordfish_sl未注册用户 #3楼楼主 回复引用查看 lordfish_sl转的文章,你自己研究一下! 2009-02-02 09:49 | badnewfish #4楼 58.49.110.* 回复引用 楼主发份资料给我,谢谢,赞共享精神,谁说java才开源:) 2009-02-04 12:03 | tensai未注册用户 #5楼楼主 回复引用查看 tensai你的邮件地址发不出去 2009-02-04 17:46 | badnewfi

25、sh #6楼 159.226.77.* 回复引用 楼主我也需要文档和源码!谢谢! 2009-02-09 09:50 | HHH未注册用户 #7楼楼主 回复引用查看 HHH老大,你的阅读能力有限啊! 2009-02-10 09:29 | badnewfish #8楼 221.215.132.* 回复引用 你好博主: 可以发送给我一份文档和代码吗? 谢谢! 我的email是: 2009-02-19 14:44 | guojian未注册用户 #9楼 61.183.133.* 回复引用 你好,想要你的代码和文档,谢谢 2009-02-27 09:07 | zhippy未注册用户 #10楼 60.174

26、.132.* 回复引用 zhenghan01 需要代码和文档,谢谢楼主 2009-02-27 23:38 | zhenghan未注册用户 #11楼 221.223.47.* 回复引用 谢谢楼主 我的课题也需要代码和文档 30514gyf 2009-02-28 01:15 | siren未注册用户 #12楼 58.218.185.* 回复引用 博主你好! 自动化接口API文档和关于DCOM的配置:能发一份给我么? 最近在研究OPC,麻烦你了,不感激! 邮箱:yantongdong 2009-03-02 11:09 | yantongdong未注册用户 #13楼 219.242.110.* 回复引

27、用 博主,麻烦发一份啊,不胜感激,邮箱:kbl81716 2009-03-02 15:07 | 迷离无间未注册用户 #14楼 58.17.231.* 回复引用 感谢! 我邮箱是:cmy8653 2009-03-02 22:28 | cmy #15楼 210.77.87.* 回复引用 麻烦发一份啊,不胜感激,最好可以发DCOM的配置的文档和OPC服务器,OPC服务器:你这个挺多items的我需要一个多点的items的服务器来测试一下。 datianyo 2009-03-03 16:58 | 特尼未注册用户 #16楼 121.229.101.* 回复引用 谢谢博主!资料很好!可能的话给我一份参考下,麻烦了!comapple 2009-03-04 09:59 | Zoo1234未注册用户 #17楼 60.19.219.* 回复引用 你好我现在站在研究想看看一看,可以给我发一份吗 2009-03-05 10:49 | 庄子未注册用户 #18楼 59.46.

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服