ImageVerifierCode 换一换
格式:DOC , 页数:28 ,大小:337.50KB ,
资源ID:3138149      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3138149.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文((C#)OPC客户端源码.doc)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

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

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

2、3年以上软件开发的朋友们,估计都会腰酸背痛吧!反正我是这样的。 不说那么多废话了,贴上源码,让需要的同行看看吧,代码的质量并不高,就当做抛砖引玉吧!   1、枚举本地服务器 2、获取服务器信息 3、列出了服务器上Tag 4、可以设置组的属性 5、读\写功能 6、可进行远程连接(DCOM需配置) 先看图: 引用类库: OPC服务器: 开发工具: 当前环境:   源码:   Code ///摘要 ///程式使用C#.NET 2005 编写 ///引用类库OPCDAAuto.dll ///OPCServer采用KEPWare ///在w

3、indows xp sp2、sp3、windows 2003上测试通过 ///完成于:2008年12月31日 ///测试于:2009年01月05日 /// ///作者:潇洒草 ///Email:zhkai868@ ///QQ:44649029 ///  ///如分发,请保留此摘要。 ///鄙视那些拿代码当宝贝的人,鄙视那些你不拿源码换就不稀罕你的人,鄙视那些自私的人。 ///别人看到你的代码,你能死啊?对你有多大威胁啊?强烈鄙视~~~ ///如果你是这样的人,赶紧关了。。偶不欢迎。。 using System; using System.Collections.Gen

4、eric; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Collections; using OPCAutomation; namespace OPC测试通过 {     public partial class MainFrom : Form     {         public MainFrom()    

5、     {             InitializeComponent();         }         #region 私有变量         /// 

        /// OPCServer Object         ///          OPCServer KepServer;         ///          /// OPCGroups Object         ///          OPCGroups KepGroups;        

6、 /// 

        /// OPCGroup Object         ///          OPCGroup KepGroup;         ///          /// OPCItems Object         ///          OPCItems KepItems;         ///          /// OPCItem Object         ///          OPCItem KepItem;

7、         /// 

        /// 主机IP         ///          string strHostIP = "";         ///          /// 主机名称         ///          string strHostName = "";         ///          /// 连接状态         ///          bool opc_connected = false;

8、        /// 

        /// 客户端句柄         ///          int itmHandleClient = 0;         ///          /// 服务端句柄         ///          int itmHandleServer = 0;         #endregion         #region 方法         ///          /// 枚举本地OPC服务器         ///

9、 

        private void GetLocalServer()         {             //获取本地计算机IP,计算机名称             IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);             if (IPHost.AddressList.Length > 0)             {                 strHostIP = IPHost.AddressList[0].ToString();         

10、    }             else             {                 return;             }             //通过IP来获取计算机名称,可用在局域网内             IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP);             strHostName=ipHostEntry.HostName.ToString();             //获取本地计算机上的OPCServerName             tr

11、y             {                 KepServer = new OPCServer();                 object serverList = KepServer.GetOPCServers(strHostName);                 foreach (string turn in (Array)serverList)                 {                     cmbServerName.Items.Add(turn);                 }        

12、         cmbServerName.SelectedIndex = 0;                 btnConnServer.Enabled = true;             }             catch(Exception err)             {                 MessageBox.Show("枚举本地OPC服务器出错:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);             }         }     

13、    /// 

        /// 创建组         ///          private bool CreateGroup()         {             try             {                 KepGroups = KepServer.OPCGroups;                 KepGroup = KepGroups.Add("OPCDOTNETGROUP");                 SetGroupProperty();              

14、   KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);                 KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete);                 KepItems = KepGroup.OPCItems;             }             catch

15、 (Exception err)             {                 MessageBox.Show("创建组出现错误:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);                 return false;             }             return true;         }         /// 

        /// 设置组属性         ///          p

16、rivate void SetGroupProperty()         {             KepServer.OPCGroups.DefaultGroupIsActive =Convert.ToBoolean(txtGroupIsActive.Text);             KepServer.OPCGroups.DefaultGroupDeadband = Convert.ToInt32(txtGroupDeadband.Text);             KepGroup.UpdateRate = Convert.ToInt32(txtUpdateRate.

17、Text);             KepGroup.IsActive = Convert.ToBoolean(txtIsActive.Text);             KepGroup.IsSubscribed =Convert.ToBoolean(txtIsSubscribed.Text);         }         /// 

        /// 列出OPC服务器中所有节点         ///          ///          priva

18、te void RecurBrowse(OPCBrowser oPCBrowser)         {             //展开分支             oPCBrowser.ShowBranches();             //展开叶子             oPCBrowser.ShowLeafs(true);             foreach (object turn in oPCBrowser)             {                 listBox1.Items.Add(turn.ToString());       

19、      }         }         /// 

        /// 获取服务器信息,并显示在窗体状态栏上         ///          private void GetServerInfo()         {             tsslServerStartTime.Text ="开始时间:"+ KepServer.StartTime.ToString()+"    ";             tsslversion.Text ="版本:"+ KepServer.MajorVersion.ToStr

20、ing() + "." + KepServer.MinorVersion.ToString()+"."+KepServer.BuildNumber.ToString();         }         /// 

        /// 连接OPC服务器         ///          /// OPCServerIP         /// OPCServer名称        

21、 private bool ConnectRemoteServer(string remoteServerIP, string remoteServerName)         {             try             {                 KepServer.Connect(remoteServerName, remoteServerIP);                 if (KepServer.ServerState == (int)OPCServerState.OPCRunning)                 {      

22、               tsslServerState.Text = "已连接到-" + KepServer.ServerName + "   ";                 }                 else                 {                     //这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档                     tsslServerState.Text = "状态:" + KepServer.ServerState.ToString() + "   ";          

23、       }             }             catch (Exception err)             {                 MessageBox.Show("连接远程服务器出现错误:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);                 return false;             }             return true;         }         #endregion   

24、      #region 事件         /// 

        /// 写入TAG值时执行的事件         ///          ///          ///          ///          ///          void KepGroup

25、AsyncWriteComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array Errors)         {             lblState.Text = "";             for (int i = 1; i <= NumItems; i++)             {                 lblState.Text += "Tran:" + TransactionID.ToString() + "   CH:" + ClientHandles.

26、GetValue(i).ToString() + "   Error:" + Errors.GetValue(i).ToString();             }         }         /// 

        /// 每当项数据有变化时执行的事件         ///          /// 处理ID         /// 项个数         /// 

27、lientHandles">项客户端句柄         /// TAG值         /// 品质         /// 时间戳         void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Arra

28、y Qualities, ref Array TimeStamps)         {             //为了测试,所以加了控制台的输出,来查看事物ID号             //Console.WriteLine("********"+TransactionID.ToString()+"*********");             for (int i = 1; i <= NumItems; i++)             {                 this.txtTagValue.Text = ItemValues.GetValue(i).ToS

29、tring();                 this.txtQualities.Text = Qualities.GetValue(i).ToString();                 this.txtTimeStamps.Text = TimeStamps.GetValue(i).ToString();             }         }         /// 

        /// 选择列表项时处理的事情         ///          /// 

30、am>         ///          private void listBox1_SelectedIndexChanged(object sender, EventArgs e)         {             try             {                 if (itmHandleClient != 0)                 {                     this.txtTagValue.Text = "";                     thi

31、s.txtQualities.Text ="";                     this.txtTimeStamps.Text = "";                     Array Errors;                     OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);                     //注:OPC中以1为数组的基数                     int[] temp = new int[2] { 0, bItem.ServerHandle };  

32、                   Array serverHandle = (Array)temp;                     //移除上一次选择的项                     KepItems.Remove(KepItems.Count, ref serverHandle, out Errors);                 }                 itmHandleClient = 1234;                 KepItem = KepItems.AddItem(listBox1.SelectedItem.ToSt

33、ring(), itmHandleClient);                 itmHandleServer = KepItem.ServerHandle;             }             catch(Exception err)             {                 //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。                 itmHandleClient = 0;                 txtTagValue.Text = "Error ox";               

34、  txtQualities.Text = "Error ox";                 txtTimeStamps.Text = "Error ox";                 MessageBox.Show("此项为系统保留项:"+err.Message,"提示信息");             }         }         /// 

        /// 载入窗体时处理的事情         ///          private void MainFrom_Load(object sender, Ev

35、entArgs e)         {             GetLocalServer();         }         /// 

        /// 关闭窗体时处理的事情         ///          private void MainFrom_FormClosing(object sender, FormClosingEventArgs e)         {             if (!opc_connected)             {                 return;

36、             }             if (KepGroup != null)             {                 KepGroup.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);             }             if (KepServer != null)             {                 KepServer.Disconnect();                 K

37、epServer = null;             }             opc_connected = false;         }         /// 

        /// 【按钮】设置         ///          private void btnSetGroupPro_Click(object sender, EventArgs e)         {             SetGroupProperty();         }         ///    

38、      /// 【按钮】连接OPC服务器         /// 

        private void btnConnLocalServer_Click(object sender, EventArgs e)         {             try             {                 if (!ConnectRemoteServer(txtRemoteServerIP.Text,cmbServerName.Text))                 {                     return;

39、                }                 btnSetGroupPro.Enabled = true;                 opc_connected = true;                 GetServerInfo();                 RecurBrowse(KepServer.CreateBrowser());                 if (!CreateGroup())                 {                     return;         

40、        }             }             catch (Exception err)             {                 MessageBox.Show("初始化出错:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);             }         }         /// 

        /// 【按钮】写入         ///          private voi

41、d btnWrite_Click(object sender, EventArgs e)         {             OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);             int[] temp = new int[2] { 0, bItem.ServerHandle };             Array serverHandles=(Array)temp;             object[] valueTemp = new object[2] {"",txtWriteTagValu

42、e.Text };             Array values=(Array)valueTemp;             Array Errors;             int cancelID;             KepGroup.AsyncWrite(1,ref serverHandles,ref values,out Errors, 2009,out cancelID);             //KepItem.Write(txtWriteTagValue.Text);//这句也可以写入,但并不触发写入事件             GC.Collect(

43、);         }         #endregion     } }   自动化接口API文档: 关于DCOM的配置: 有需要的留下EMAIL。。。。 update: 1、例子代码下载地址:点击下载 2、客户端连接OPC服务器注意事项: a、本例采用的OPCDAAuto.dll版本是2.2.5.20。 b、需要使用“regsvr32 /s OPCDAAuto.dll”命令在客户端计算机上注册这个程序集。 c、首先保证客户机和服务器的网络是联通的。 Tag标签: opc,OPC客户端,C#开发OPC,OPC远程访问,OPC服务器远程访问,OPC源码

44、 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楼 221.232.69.*  回复 引用    想要

45、文档和源码,请问下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 你

46、的邮件地址发不出去 2009-02-04 17:46 | badnewfish       #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

47、 | guojian[未注册用户] #9楼 61.183.133.*  回复 引用    你好,想要你的代码和文档,谢谢 2009-02-27 09:07 | zhippy[未注册用户] #10楼 60.174.132.*  回复 引用    zhenghan01@ 需要代码和文档,谢谢楼主 2009-02-27 23:38 | zhenghan[未注册用户] #11楼 221.223.47.*  回复 引用    谢谢楼主 我的课题也需要代码和文档 30514gyf@ 2009-02-28 01:15 | siren[未注册用户] #12楼 5

48、8.218.185.*  回复 引用    博主你好! 自动化接口API文档和关于DCOM的配置:能发一份给我么? 最近在研究OPC,麻烦你了,不感激! 邮箱:yantongdong@ 2009-03-02 11:09 | yantongdong[未注册用户] #13楼 219.242.110.*  回复 引用    博主,麻烦发一份啊,不胜感激,邮箱:kbl81716@ 2009-03-02 15:07 | 迷离无间[未注册用户] #14楼 58.17.231.*  回复 引用    感谢! 我邮箱是:cmy8653@ 2009-03-02

49、 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.

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

关于我们      便捷服务       自信AI       AI导航        抽奖活动

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

关注我们 :微信公众号    抖音    微博    LOFTER 

客服