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

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16402682.html】到电脑端继续下载(重复下载不扣费)。

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(如何在C中实现OPC数据访问.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

如何在C中实现OPC数据访问.docx

1、如何在C中实现OPC数据访问如何在C#中实现OPC数据访问.txt41滴水能穿石,只因为它永远打击同一点。42火柴如果躲避燃烧的痛苦,它的一生都将黯淡无光。 本文由zxx1987187贡献 pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 如何在 C#中实现 OPC 数据访问 How to accomplish data accessing through OPC by C# Getting-started Edition (2009 年 03 月 摘 要 本文主要讲述了在 C#语言环境下,编程实现通过 SimaticNet 提供的 OPC Server,

2、访问 PLC 中数据的步骤。此方法同样适用于 WinCC 作为 OPC Server 时的数据访问。 关键词 SimaticNet、C#、OPC、WinCC Key Words SimaticNet、C#、OPC、WinCC IA&DT Service & Support Page 2-47 如何在C#中实现OPC数据访问 1 1、概述 4 1.1 OPC介绍 4 1.2 OPC的读写方式 5 1.3 OPC访问接口方式 6 2、测试环境 7 2.1 硬件要求 7 2.2 软件要求 7 3、OPC Server端组态配置 7 4、采用自定义接口过程 9 4.1 同步读写 9 4.2 异步读写

3、12 5、采用自动化接口实现过程 19 6、OPCItem的数据类型 23 7、小结 23 8、代码 23 8.1 自动化接口 23 8.2 自定义接口同步读写 28 8.3 自定义接口异步读写 34 IA&DT Service & Support Page 3-47 1、概述 1.1 OPC 介绍 OPC 是 Object Linking and Embedding Call server Reply 图 3 OPC 同步读写服务器-客户端数据流图 异步通讯时,OPC 客户程序对服务器进行请求时,OPC 客户程序请求后立刻返回,不 用等待 OPC 服务器的响应,可以进行其它操作。OPC 服务

4、器完成响应后再通知 OPC 客户 程序,如进行读操作,OPC 客户程序通知 OPC 服务器后离开返回,不等待 OPC 服务器的 读完成,而 OPC 服务器完成读后,会自动的通知 OPC 客户程序,把读结果传送给 OPC 客 户程序。因此相对于同步通讯,异步通讯的效率更高。 clien myGroup.AsyncRead( Cal serve Repl myGroup_AsyncReadComplete( 图 4 OPC 异步读服务器-客户端数据流图 IA&DT Service & Support Page 5-47 订阅方式时,OPC 客户程序对服务器进行请求时,OPC 客户程序操作后立刻返回

5、,不 用等待 OPC 服务器的操作,可以进行其它操作, OPC 服务器的 Group 组在组内有数据发 生改变时,自动根据更新周期刷新相应的客户端数据,如下图,客户端只向 OPC 服务发送 一次请求,之后不再对服务器请求。 client myGroup.IsSubscribed server Subscribe Notify myGroup_DataChange( Notify myGroup_DataChange( 图 5 OPC 同步读服务器-客户端数据流图 OPC 写数有两种方式:同步、异步。区别与上面讲的机制一样,在生产应用中,如果写 数据参与控制,一般采用同步方式。 1.3 OPC

6、访问接口方式 OPC 主要包含两种接口:CUSTOM 标准接口和 OLE 自动化标准接口,自定义接口是 服务商必须提供的,而自动化接口则是可选的。 自定义接口是一组 COM 接口,主要用于采用 C+语言的应用程序开发; 自动化接口是一组 OLE 接口,主要用于采用 VB,DELPHI,Excel 等基于脚本编程语 言的应用程序开发。 图 6 自定义接口和自动化接口 IA&DT Service & Support Page 6-47 许多 OPC 服务器,包括 OPC.SimaticNet,是在 COM 平台开发的,从而对于基 于.NET 框架下的 C#语言,作为客户端程序语言访问 OPCSer

7、ver,需要解决两个平台间无缝 迁移的问题。OPC 基金会对会员提供了 OpcRcw 动态链接库,OPC NET COM 包装器和 OPC NET API,将 OPC 复杂的规范封状成简单易用的 C#类 ,可以比较容易地实现数据访 问。 本文中通过实验,逐步讲解了通过 C#编写客户端程序,访问 OPC.SimaticNet,对 PLC 数据进行读写的实现过程。自定义接口及自动化接口都进行了测试,但基于 C#的语言 特性,建议采用自定义接口访问,同时有很多 OPCServer 服务商,对外是不提供自动化接 口的,西门子的 SimaticNet 及 WinCC 的 OPCServer 都提供自动化

8、接口。 2、测试环境 2.1 硬件要求 采用 400 系列 PLC,通过以太网连接到安装有 simaticNet 的计算机上。 computer:windows 2003 server192.168.0.102 CPU:CPU414-3PN 416-3FR05-0AB0192.168.0.1 2.2 软件要求 computer: S 2007 Visual studio 2005 Step7 V5.4 SP4 3、OPC Server 端组态配置 IA&DT Service & Support Page 7-47 在 CPU 中定义 DB 块:DB10 配置 PC Station,参考 其它文

9、档。 如上图建立连接 S7_connection_1,然后在 OPC Scout 测试连接的正确性。 IA&DT Service & Support Page 8-47 从上面可以看到数据访问都是正常的。 4、采用自定义接口过程 4.1 同步读写 建立同步读写工程:Sync_RW 测试中,对 db10.dbw0 及 db10.dbw2 读写操作,在 Form 窗口做如下设计: Control Button: Button: Button: Button: name Btn_Conn Btn_Read Btn_Write Btn_DisConn Text Conn Read Write disC

10、onn IA&DT Service & Support Page 9-47 TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: Txt_R1_Value Txt_R1_Quality Txt_R1_TimeStamp Txt_R2_Value Txt_R2_Quality Txt_R2_TimeStamp Txt_W1 Txt_W2 Txt_WriteStatus 第一步,添加下面命名空间: /定义变量 IA&DT Service & Support Page 10-47 svrCom

11、ponenttyp = Type.GetTypeFromProgID(OPC.SimaticNet, 192.168.0.102。 ServerObj = (OpcRcw.Da.IOPCServerActivator.CreateInstance(svrComponenttyp。 /OPC.SimaticNet, 192.168.0.102是 OPCServer 名称及所在 computer 地址 / CreateInstance 创建一个 OPCSerer 的实例 ServerObj.AddGroup(/增加相应的组,定义组的特性,并输出组的句柄 IOPCSyncIO2Obj = (IOPC

12、SyncIOMyobjGroup1。 /为组同步读写定义句柄 IOPCGroupStateMgtObj = (IOPCGroupStateMgtMyobjGroup1。 /组管理对象 ItemArray0.szAccessPath = 。 ItemArray0.szItemID = S7:S7 connection_1DB10,INT0。 /地址,不同数据类型表示方法不同 ItemArray0.bActive = 1。/是否激活 ItemArray0.hClient = 1。/标示ID,不同的Item不一样 ItemArray0.dwBlobSize = 0。 ItemArray0.pBlob

13、 = IntPtr.Zero。 ItemArray0.vtRequestedDataType = 2。 (OpcRcw.Da.IOPCItemMgtMyobjGroup1.AddItems(2, ItemArray, out pResults, out pErrors。 /将定义的 OPCTtem 加入组内,注意数量 这里需要注意两个地方,对于 hClient 每个 Item 是不一样的。 根据读写的数据类型,需更改 vtRequestedDataType 的值,具体区分在后面 说明。 第四步,同步读数据 private void Btn_Read_Click(object sender, E

14、ventArgs e IOPCSyncIO2Obj.Read(OPCDATASOURCE.OPC_DS_DEVICE, 2, ItemServerHandle, out pItemValues, out pErrors。/读数据 Txt_R1_Value.Text = String.Format(0, pItemState0.vDataValue。/读值 Txt_R1_Quality.Text = GetQuality(pItemState0.wQuality。/质量码 DateTime dt = ToDateTime(pItemState0.ftTimeStamp。 Txt_R1_TimeS

15、tamp.Text = dt.ToString(。/读取时间 在这里要注意 pItemValues 返回指向值信息的指针,要通过 OPCITEMSTATE pItemState 获得信息,其中 OPCITEMSTATE 是一个结构体,包含值,质量码,时间 等。 public struct OPCITEMSTATE public FILETIME ftTimeStamp。 public int hClient。 IA&DT Service & Support Page 11-47 public object vDataValue。 public short wQuality。 public sh

16、ort wReserved。 第五步,同步写数据 private void Btn_Write_Click(object sender, EventArgs e IOPCSyncIO2Obj.Write(2, ItemServerHandle, values, out pErrors。 这里注意,如果数据类型不正确,数据是不能正确写入的。 第六步,注销相应实例 private void Btn_Disconn_Click(object sender, EventArgs e 参考第 8 节代码。 4.2 异步读写 注意,订阅也是 异步方式。 建立异步读写工程 测试中,对 db10.dbw0 及

17、 db10.dbw2 读写操作,在 Form 窗口做如下设计: Control IA&DT Service & Support name Text Page 12-47 Button: Button: Button: Button: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: TextBox: Btn_Conn Btn_Read Btn_Write Btn_DisConn Txt_R1_V

18、alue Txt_R1_Quality Conn Read Write disConn Txt_R1_TimeStamp Txt_R2_Value Txt_R2_Quality Txt_R2_TimeStamp Txt_R3_Value Txt_R3_Quality Txt_R3_TimeStamp Txt_R4_Value Txt_R4_Quality Txt_R4_TimeStamp Txt_W1 Txt_W2 Txt_WriteStatus CheckBox: CHK_Btn IA&DT Service & Support Page 13-47 第一步,添加下面命名空间: /定义变量 s

19、vrComponenttyp = Type.GetTypeFromProgID(OPC.SimaticNet, 192.168.0.102。 ServerObj = (OpcRcw.Da.IOPCServerActivator.CreateInstance(svrComponenttyp。 /OPC.SimaticNet, 192.168.0.102是 OPCServer 名称及所在 computer 地址 / CreateInstance 创建一个 OPCSerer 的实例 ServerObj.AddGroup(/增加相应的组,定义组的特性,并输出组的句柄 IOPCAsyncIO2Obj =

20、 (IOPCAsyncIO2MyobjGroup1。 /为组异步读写定义句柄 IOPCGroupStateMgtObj = (IOPCGroupStateMgtMyobjGroup1。 /组管理对象 与同步不同,考虑增加如下语句: pIConnectionPointContainer = (IConnectionPointContainerMyobjGroup1。 /定义特定组的异步调用连接 Guid iid = typeof(IOPCDataCallback.GUID。 / 为所有的异步调用创建回调 pIConnectionPointContainer.FindConnectionPoint

21、(ref iid, out pIConnectionPoint。 / 为 OPC Server 的 连 接 点 与 客 户 端 接 收 点 之 间 建 立 连 接 pIConnectionPoint.Advise(this, out dwCookie。 ItemArray0.szAccessPath = 。 ItemArray0.szItemID = S7:S7 connection_1DB10,INT0。 /地址,不同数据类型表示方法不同 ItemArray0.bActive = 1。/是否激活 ItemArray0.hClient = 1。/标示ID,不同的Item不一样 ItemArra

22、y0.dwBlobSize = 0。 ItemArray0.pBlob = IntPtr.Zero。 IA&DT Service & Support Page 14-47 ItemArray0.vtRequestedDataType = 2。 (OpcRcw.Da.IOPCItemMgtMyobjGroup1.AddItems(4, ItemArray, out pResults, out pErrors。 /将定义的 OPCTtem 加入组内,注意数量 这里同样需要注意两个地方,对于 hClient 每个 Item 是不一样的。 根据读写的数据类型,需更改 vtRequestedDataTy

23、pe 的值,定义如上文。 另外,要注意理解异步调用时的服务器与客户端反馈关系。 第四步,异步读数据方式 private void btn_Read_A_Click(object sender, System.EventArgs e IOPCAsyncIO2Obj.Read(4,ItemServerHandle,2,out nCancelid,out pErrors。 /异步读,nCancelid、dwTransactionID 都是为了客户端服务器的对应 调用异步读回调函数 public virtual void OnReadComplete( System.Int32 dwTransid ,

24、 System.Int32 hGroup , System.Int32 hrMasterquality , System.Int32 hrMastererror , System.Int32 dwCount , int phClientItems , /读数据句柄 object pvValues , /返回值 short pwQualities , /返回质量码 OpcRcw.Da.FILETIME pftTimeStamps , /返回时间戳 int pErrors /错误码 Txt_R1_Value.Text = String.Format(0, pvValues0。 Txt_R1_Quality.Text = GetQuality(pwQualities0。 DateTime dt = ToDateTime(pftTimeStamps0。 Txt_R1_TimeStamp.Text = dt.ToString(。 编译执行,程序会几方面的报错。 第五步,订阅方式读回调函数及实现 COM 映射 上面程序会有以下几种情况的报错: IA&DT Service & Support Page 15-47 问题 1:程序执行后,弹出如下错误,Add group 报错 主要原

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2