zoukankan      html  css  js  c++  java
  • Java语言开发OPC之Utgard的数据访问方式

    来源:https://www.cnblogs.com/ioufev/articles/9894452.html

    原文链接:https://blog.csdn.net/yingzai1010/article/details/76154856/
    基于opc对象的特征及关系的Utgard的使用

    1.同步读取某个点位的值

    • Item项的read()方法

    Server server = new Server(BaseConfiguration.getCLSIDConnectionInfomation(), Executors.newSingleThreadScheduledExecutor()); 
    server.connect(); 
    Group group = server.addGroup(); 
    Item item = group.addItem(“Random.Real5”); 
    System.out.println(“ItemName:[” + item.getId()+ “],value:” + item.read(false).getValue());
    

    2.基于AccessBase的Utgard的使用

    2.1 循环同步读取

    使用SyncAccess类隔时间段地进行同步读取数据 ,它实现了Runnable接口,实际上通过另一个线程进行同步读,具体代码如下:

    public static void syncRead(Server server) throws Exception {
        final String itemId = “Random.Int2”;
        // 每隔1秒同步读 
        AccessBase access = new SyncAccess(server, 1000);
        access.addItem(itemId, new DataCallback() {@
            Override
            public void changed(Item item, ItemState itemState) {
                System.out.println(itemState);
            }
        });
        // start reading 
        access.bind();
        // wait a little bit 
        Thread.sleep(5 * 1000);
        // stop reading 
        access.unbind();
    }
    

    2.2 循环异步读取

    使用Async20Access类隔时间段地进行异步读取数据,它实现了IOPCDataCallback接口,基于事件回调的实现,具体代码如下:

    public static void asyncRead(Server server) throws Exception {
        final String itemId = “Random.Int2”;
        // 第三个参数用于设置初始化时是否执行访问 
        AccessBase access = new Async20Access(server, 1000, false);
        access.addItem(itemId, new DataCallback() {@
            Override
            public void changed(Item item, ItemState itemState) {
                System.out.println(“ >>> Asynchronized read: value = ”+itemState.getValue());
            }
        });
        access.bind();
        Thread.sleep(5 * 1000);
        access.unbind();
    }
    

    数据读取方式

    来源:OPC-(三)-OPC主要功能

    同步访问

    OPC服务器把按照OPC应用程序的要求得到的数据访问结果作为方法的参数返回给OPC应用程序,OPC应用程序在结果被返回为止一直必须处于等待状态。

    异步访问

    OPC服务器接到OPC应用程序的要求后,几乎立即将方法返回。OPC应用程序随后可以进行其他处理。当OPC服务器完成数据访问时,触发OPC应用程序的异步访问完成事件,将数据访问结果传送给OPC应用程序。OPC应用程序在VB的事件处理程序中接受从OPC服务器传送来的数据。

    订阅方式数据采集

    并不需要OPC应用程序向OPC服务器要求,就可以自动接到从OPC服务器送来的变化通知的订阅方式数据采集(Subscription)。服务器按一定的更新周期(UpdateRate)更新OPC服务器的数据缓冲器的数值时,如果发现数值有变化时,就会以数据变化事件(DataChange)通知OPC应用程序。如果OPC服务器支持不敏感带(DeadBand),而且OPC标签的数据类型是模拟量的情况,只有现在值与前次值的差的绝对值超过一定限度时,才更新缓冲器数据并通知OPC应用程序。由此可以无视模拟值的微小变化,从而减轻OPC服务器和OPC应用程序的负荷。

    上述的OPC功能可以总结为如下表:

    三种方式的性能总结:

  • 相关阅读:
    spring-boot整合dubbo:Spring-boot-dubbo-starter
    基于Spring的轻量级工作流框架
    Spring多种加载Bean方式简析
    Spring Dubbo 开发笔记
    基于Spring开发——自定义标签及其解析
    Navicat连接MySQL8.0亲测有效
    学习Python中遇到的各种错误
    字符串转字典
    set(待整理)
    C++中虚析构的作用
  • 原文地址:https://www.cnblogs.com/zouhao/p/13997187.html
Copyright © 2011-2022 走看看