




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
_1. OPC对象的分层结构 OPC数据访问提供从数据源读取和写入特定数据的手段。OPC数据访问对象是由下图所示的分层结构构成。即一个OPC服务器对象(OPCServer)具有一个作为子对象的OPC组集合对象(OPCGroups)。在这个OPC组集合对象里可以添加多个的OPC组对象(OPCGroup)。各个OPC组对象具有一个作为子对象的OPC标签集合对象(OPCItems)。在这个OPC标签集合对象里可以添加多个的OPC标签对象(OPCItem)。此外,作为选用功能,OPC服务器对象还可以包含一个OPC浏览器对象(OPCBrowser)。 OPC对象中的最上层的对象是OPC服务器。一个OPC服务器里可以设置一个以上的OPC组。OPC服务器经常对应于某种特定的控制设备。例如,某种DCS控制系统,或者某种PLC控制装置。OPC组是可以进行某种目的数据访问的多个的OPC标签的集合,例如某监视画面里所有需要更新的位号变量。正因为有了OPC组,OPC应用程序就可以以同时需要的数据为一批的进行数据访问,也可以以OPC组为单位启动或停止数据访问。此外OPC组还提供组内任何OPC标签的数值变化时向OPC应用程序通知的数据变化事件(表1-4)。2. OPC客户端搭建过程(部分代码)1) 连接服务器a) 查询服务器端主机的名字。string hostname = Dns.GetHostName();b) 初始化服务器对象,搜索主机上的服务器ID,并枚举出来。public void searchlocalsvr(string hostName)/寻找本地服务器 try OPCSvr = new OPCServer(); object serverList = OPCSvr.GetOPCServers(hostName); foreach (string server in (Array)serverList) Console.WriteLine(本地OPC服务器:0, server); catch (Exception err) Console.WriteLine(枚举本地OPC服务器出错:0, err.Message); c) 连接服务器。public void ctOPCSever(string HostName)/连接OPC服务器 string OPCSvrName; searchlocalsvr(HostName); Console.WriteLine(请输入要连接的服务器名字:); OPCSvrName = Console.ReadLine(); try OPCSvr.Connect(OPCSvrName, ); Console.WriteLine(连接服务器成功!); catch (Exception err) Console.WriteLine(连接本地OPC服务器出错:0, err.Message); 2) 创建组(OPCGroups)对象和添加数据项对象(OPCItems)public void CreateGrp()/创建组对象 try OPCGrps = OPCSvr.OPCGroups; OPCGrp = new OPCAutomation.OPCGroup2; OPCGrp0 = OPCGrps.Add(G1); OPCGrp1 = OPCGrps.Add(G2); SetGroupProperty(); /OPCGrp0.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(GroupDataChange); /OPCGrp0.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(GroupAsyncWriteComplete); OPCGrp0.AsyncReadComplete += new DIOPCGroupEvent_AsyncReadCompleteEventHandler(GroupAsyncReadComplete); Console.WriteLine(创建组成功!); catch (Exception err) Console.WriteLine(错误信息:0, err); public void SetGroupProperty() OPCSvr.OPCGroups.DefaultGroupIsActive = true;/激活组。 OPCSvr.OPCGroups.DefaultGroupDeadband = 0;/ 死区值,设为0时,服务器端该组内任何数据变化都通知组。 OPCSvr.OPCGroups.DefaultGroupUpdateRate = 200;/默认组群的刷新频率为200ms OPCGrp0.UpdateRate = 100;/刷新频率为1秒。 OPCGrp0.IsSubscribed = true;/使用订阅功能,即可以异步,默认false public void addItems()/添加数据项 OPCIts = OPCGrp0.OPCItems; OPCIt = new OPCItem4; OPCIt0 = OPCIts.AddItem(Integer.TAG_I0, 1); OPCIt1 = OPCIts.AddItem(Integer.TAG_I1, 2); /OPCIt1 = OPCIts.AddItem(Item2, 0); /OPCIt2 = OPCIts.AddItem(Item3, 0); /OPCIt3 = OPCIts.AddItem(Item4, 0); Console.WriteLine(添加数据项成功!); 3) 创建浏览器对象由于服务器端的菜单是树形结构,可以通过创建浏览器对象,一步步浏览菜单,寻找需要浏览的Item。public void CrteBrowser() string branch; OPCBrowser OPCBrsr = OPCSvr.CreateBrowser(); OPCBrsr.ShowBranches(); OPCBrsr.ShowLeafs(true); foreach (object turn in OPCBrsr) Console.WriteLine(服务端浏览: + turn.ToString(); Console.WriteLine(请需要浏览的分支:); branch = Console.ReadLine(); OPCBrsr.MoveDown(branch); OPCBrsr.ShowBranches(); OPCBrsr.ShowLeafs(true); foreach (object turn in OPCBrsr) Console.WriteLine(服务端: + turn.ToString(); 4) 读取服务器端数据信息读取服务端数据信息包括同步读取和异步读取两种方式异步读取与同步读取的区别:同步读取适合用来读取少量数据,而异步读取可以读取大量数据而对运行不影响。因为程序运行过程中,调用同步读取函数,直到数据访问结果返回到客户程序之前,客户程序都处于等待之中。异步读取在被调用后,方法几乎立即返回。OPC应用程序随后可以进行其他处理。当OPC服务器完成数据访问时,触发OPC应用程序的异步访问完成事件,将数据访问结果传送给OPC应用程序。但是可以看出同步数据访问相比起来更加容易实现,异步数据访问比较麻烦。A. 同步读取(可以直接调用Item对象的read方法,或者调用组对象的syncread方法)public void SRead(string itemid)/同步读取 object ItemValues; object Qualities; object TimeStamps; OPCIt0 = OPCIts.AddItem(itemid, 0); OPCIt0.Read(1, out ItemValues, out Qualities, out TimeStamps); Console.WriteLine(同步读取数据结果如下:); Console.WriteLine(ID:0 Vaule:1 Quality:2 Timestamp:3, OPCIt0.ItemID,Convert.ToString(ItemValues),Convert.ToString(Qualities),Convert.ToString(TimeStamps); B. 异步读取public void AsRead(string itemid)/异步读取 OPCIt0 = OPCIts.AddItem(itemid, 0); int temp = new int 0, OPCIt0.ServerHandle ; Array serverHandles = (Array)temp; Array Errors; int cancelID; OPCGrp0.AsyncRead(1, ref serverHandles, out Errors, 1, out cancelID); 异步读取并不直接输出读取结果而是调用下面的函数void GroupAsyncReadComplete(int TransactionID, int NumItems, ref System.Array ClientHandles, ref System.Array ItemValues, ref System.Array Qualities, ref System.Array TimeStamps, ref System.Array Errors) Console.WriteLine(异步读取数据结果如下:); for (int i = 1; i = NumItems; i+) Console.WriteLine(ID:0 Vaule:1Quality:2 Timestamp:3,OPCIti-1.ItemID,Convert.ToString(ItemValues.GetValue(i), Convert.ToString(Qualities.GetValue(i), Convert.ToString(TimeStamps.GetValue(i); 在异步读取函数完成之后调用本函数,输出数据读取结果。5) 断开与服务器连接断开服务器得先清除所有组对象及其下的数据项对象。publ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 先进安全培训方法课件
- 化学品节前安全培训课件
- 化学品安全管理专项培训课件
- 创建无烟医院培训课件
- 先心封堵介入课件
- 量子抗AUTH加密协议设计-洞察及研究
- 内燃机车电传动课件
- 统编版语文六年级上册 第四单元 语文园地四同步+ 公开课一等奖创新教学设计+ 学习任务单+ 分层练习
- 5搭石 +公开课一等奖创新教学设计
- 构成原子的微粒讲解
- 新生儿支气管肺炎护理查房
- 2025年芳香保健师(初级)职业技能鉴定全真试题(含解析)
- 银行外包人员管理办法
- 外贸订单发货管理办法
- 学堂在线 逻辑学概论 章节测试答案
- 招生表彰活动方案
- 2025年安徽高考地理试卷真题(含答案解析)
- 学校党组织家访活动方案
- 2025至2030中国海上风电行业深度研究及发展前景投资评估分析
- 数字媒体技术专业教学标准(高等职业教育专科)2025修订
- 正念心理治疗
评论
0/150
提交评论