Java语言开发OPC之Utgard的数据访问方式

原文链接: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功能可以总结为如下表:

三种方式的性能总结:

posted @ 2018-09-26 09:32  ioufev  阅读(11467)  评论(11编辑  收藏  举报