OPC接口使用技巧

   OPC接口是由OPC基金会制定的,基于DCOM技术的,用于控制系统软件之间进行数据通讯的接口规范。由于其开放性和高效性,现在已被广泛应用于自动化控制领域及生产信息管理中。紫金桥软件遵照OPC接口规范实现了相应接口,大大增加紫金桥软件的开放性。在使用OPC接口驱动时,由于配置参数或者运行环境设置不当,可能达不预期的效果,有的甚至影响控制系统的稳定性。下面根据实际工作经验介绍一些OPC接口使用技巧:

   认真阅读OPC Server使用手册
   在使用OPC接口进行数据采集时一定要先阅读OPC Server的使用手册或在线帮助,因为在通讯时使用的OPC服务器名称(ProgID)及进行DCOM配置时使用的组件名称通常是由OPC Server软件提供商自己定义的,我通常会从使用手册或在线帮助上获得相关信息。

   有的OPC Server是不支持在线浏览的,通讯时使用数据项(连接项)是按着一定规范定义的,这时我们也需要阅读使用手册或在线帮助获得相关信息。例如,在从老的OPTO22系统采集数据时,它是不支持在线浏览的。通过在线帮助我们知道它的数据项定义如下所示:

   ControllerName[RefreshGroupName]:ItemType.ItemName[start-end].Field.BITn

并且在数据项字义时要填写访问路径(”OPTO_MDS_0”)。控制器名、刷写组名、项类类型等信息我们要通过控制系统竣工资料或OPTO22的组态工程中查找。

   正确配置采集周期
   由于不同的OPC Server能够支持的最快采集周期是不同的,因此在实施数据采集时我们要根据OPC Server所能提供的最嘉采集速度进行配置。大部分的OPC Server支持的采集周期不是连续的,如果我们设置的采集周期是服务器不支持的采集周期,OPC Server会使用与设定周期相近的固有周期进行通讯调度。

   通讯量控制
   在通常情况下建议使用异步方式进行通讯,因为在这种方式下客户端程序获得数据由OPC Server根据数据变化情况主动发送的,具有较高的通讯效率。在实际应用中我们可能会遇到这样的问题:与实时数据库通讯的控制系统运行负荷较满,如果不对通讯量进行控制就可能影响控制系统的正常运行(在通过APP NODE的OPC Server读取TDC3000系统的数据时就愚到过类似问题)。在这种情况下建议使用同步方式或单组同步方式执行数据采集,在这两种通讯方式下我们可以通过调整每组采集的数据项数及采集周期来控制通讯量。

   注意服务器特殊限制
   在使用OPC接口进行数据通讯时还要注意一些OPC Server的特殊限制,有的对可以连接客户端数有限制,有的对最多可访问的数据项数有限制,有的则是对每组包含的数据项数有限制。对于这些有特殊限制的服务器,如果不能正确配置通讯参数或者购买相受权,将产生通讯错误或只能采集部分数据。对于有访问客户数目限制的OPC Server,如果达到最大客户数,我们要重新购买受权增加允许访问客户数。对于有访问数据项数的OPC Server最好的方法也是重新购买受权增加允许访问数据项数,但也可以接口中提供的“单组同步”方式来增加可采集的数据点数。“单组同步”通讯方式是以牺牲通讯速度为代价的,并且在这种方式下不能进行数据回写(从客户端更新服务器的数据)。对于每组有数据项数限制的OPC Server则比较好处理,只要在接口设备定义时,将限制个数填写到“每组项数”即可。

   

   通过DCOM配置实现分布式通讯
   在实际应用中有时出于安全或运行环境的考虑不能将数据采集程序与OPC Server安装在同一台计算机上,这时我们就需要利用OPC的DCOM属性实现数据采集程序与OPC Server之间基于网络的分布式通讯。DCOM技术是自NT4.0系统以后,由操作支持的一种组件间跨计算机间的通讯技术。在实现组件时只要遵照COM规范定义接口,当服务端和客户端程序分布在不同的计算机上时,只要对服务端及客户端的DCOM属性进行相应配置就可以通过网络实现远程通讯。DCOM配置在不同的操作系统上配置方法不同,除了在Windows XP SP2系统外,其它系统即可以用指定用户进行通讯,也可以用匿名方式进行通讯。关于DCOM配置过程这里就不详细说明了,可以参考《紫金桥OPC服务器及接口》文档。

紫金桥OPC接口使用技巧的更多相关文章

  1. OPC接口相关资料地址

    OPC官方网址:https://opcfoundation.org/ OPC中国官网: http://www.chinaopc.org/ ------------------------------- ...

  2. C#中泛型方法与泛型接口 C#泛型接口 List<IAll> arssr = new List<IAll>(); interface IPerson<T> c# List<接口>小技巧 泛型接口协变逆变的几个问题

    http://blog.csdn.net/aladdinty/article/details/3486532 using System; using System.Collections.Generi ...

  3. BA-siemens-insight在win7下如何配置opc接口

    一.运行环境:win7(OPC接口在win_xp下配置需安装插件,不好意思没搞定,现在只有win7系统32位下的教程了) 由于OPC(OLE for Process Control)建立在Micros ...

  4. C#接口实现技巧之借助第三方

    一个类继承了一个接口,对接口实现通常的做法---直接在这个类中对接口进行实现. 利用继承的概念,可以很巧妙地借助第三方类对接口进行实现,这种方式在实际的项目开发过程中其实用途很是比较大的,至少我们的游 ...

  5. OPC协议解析-OPC客户端与服务器通讯解析

    1      OPC服务器 OPC服务器, 是指按照OPC基金组织规定的OPC规范群开发的软件驱动.OPC服务器作为中间媒介负责从数据源读取数据再跟另外一端的客户端通信.在 OPC客户端/服务器 的结 ...

  6. OPC协议解析-关于OPC协议的几个问题

    1    什么是OPC协议? 为了便于自动化行业不同厂家的设备和应用程序能相互交换数据,定义了一个统一的接口函数,就是OPC协议规范.有了OPC就可以使用统一的方式去访问不同设备厂商的产品数据. OP ...

  7. 高并发秒杀系统--mybatis整合技巧

    mybatis实现DAO接口编码技巧 1.XML文件通过namespace命名空间关联接口类 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD ...

  8. 开发 C# OPC 客户端

    编写 opc 客户端的思路 1. 使用OPC Client浏览服务器, 查看测试代码修改后的结果. 2. 根据OPC Client搜集到的服务器信息编写代码和服务器交互 3. OPC Client 操 ...

  9. OPC服务器开发浅谈 — 服务器模型(转)

    这里主要讨论的是OPC Data Access 2.0服务器的开发,在掌握了这个最常用的OPC服务器开发之后,对其它类型的OPC服务器,如A&E.HDA等就可以触类旁通了. 一个OPC服务器的 ...

随机推荐

  1. Django WSGI,MVC,MTV,中间件部分,Form初识

    一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能 ...

  2. js 时差转换 getTimezoneOffset()

    如果我们的应用是针对世界各地的,当要把后台(服务器)存的时间展示给不同地区的用户时,这个时间应该经过时差转换. 转成用户客户端本地的时间,然后呈现给用户,即下面用到的getTimezoneOffset ...

  3. 职责链模式(Chain of Responsibility)

    一.责任链模式介绍 责任链模式:将能够处理同一类请求的对象连成一条链,使这些对象都有机会处理请求,所提交的请求沿着链传递.从而避免请求的 发送者和接受者之间的耦合关系.链上的对象逐个判断是否有能力处理 ...

  4. Java语言基础-运算符

    一丶逻辑运算符 1.&和&&的区别 (1).两个逻辑运算符的结果是一样的 (2).当第一个表达式为false时,&是会判断后边的表达式,而&&会产生短路 ...

  5. 在.NET Core中连接使用Zookeeper

    一开始找到的是ZookeeperNetEx,但是很多API都很原始,不怎么好用. 最后确定用Rabbit.Zookeeper来做,他对ZookeeperNetEx进行了封装,要简单不少. 和c语言和j ...

  6. ss-libev 源码解析local篇(4): server_recv_cb之STAGE_STREAM

    继续探索server_recv_cb,我们已经来到了STAGE_STREAM状态.如果在0.05秒的timer来之前客户端就有数据过来,server_recv_cb被调用,此时已经在stream状态就 ...

  7. keras 报错 ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("embedding_1/random_uniform:0", shape=(5001, 128), dtype=float32)'

    在服务器上训练并保存模型,复制到本地之后load_model()报错: ValueError: Tensor conversion requested dtype int32 for Tensor w ...

  8. 高并发异步uwsgi+web.py+gevent

    为什么用web.py? python的web框架有很多,比如webpy.flask.bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用 ...

  9. vue-one_demo_music

    简单的音乐盒子 利用计算属性(监听数据),解决上一首,下一首,点击切换 <!DOCTYPE html> <html lang="en"> <head& ...

  10. BZOJ2694 Lcm 【莫比乌斯反演】

    BZOJ2694 Lcm Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample I ...