超详细Java使用Jop读取OPC服务器数据

package javafish.clients.opc;

import javafish.clients.opc.asynch.AsynchEvent;
import javafish.clients.opc.asynch.OpcAsynchGroupListener;
import javafish.clients.opc.component.OpcGroup;
import javafish.clients.opc.component.OpcItem;
import javafish.clients.opc.exception.Asynch10ReadException;
import javafish.clients.opc.exception.Asynch10UnadviseException;
import javafish.clients.opc.exception.CoInitializeException;
import javafish.clients.opc.exception.ComponentNotFoundException;
import javafish.clients.opc.exception.ConnectivityException;
import javafish.clients.opc.exception.CoUninitializeException;
import javafish.clients.opc.exception.GroupActivityException;
import javafish.clients.opc.exception.GroupUpdateTimeException;
import javafish.clients.opc.exception.UnableAddGroupException;
import javafish.clients.opc.exception.UnableAddItemException;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;

public class AsynchReadAndGroupActivityExample {

  /**
   * @param args
   * @throws InterruptedException
   */
  public static void main(String[] args) throws InterruptedException {
    AsynchReadAndGroupActivityExample test = new AsynchReadAndGroupActivityExample();

    try {
      /**初始化服务**/
      JOpc.coInitialize();
    }
    catch (CoInitializeException e1) {
      e1.printStackTrace();
    }
    /**建立server对象jopc(IP ,OPCServer名称 ,任意)**/
    JOpc jopc = new JOpc("localhost", "KEPware.KEPServerEx.V6", "JOPC1");

    /**建立一个组((用户组的标识名称),开始活动的组(true 开始 false 不开始) 默认true,刷新组的时间 毫秒,默认 0.0f)**/
    OpcGroup group = new OpcGroup("group1", true, 20, 0.0f);

    /**name属性表示OPC服务器中的ItemID**/
    OpcItem item1 = new OpcItem("c1.d1.m1", true, "");
    OpcItem item2 = new OpcItem("c1.d1.m2", true, "");

    /**添加到组**/
    group.addItem(item1);
    group.addItem(item2);

    jopc.addGroup(group);

    try {
    /**调用JCustomOpc.connect()连接服务器**/
      jopc.connect();
      System.out.println("OPC client is connected...");
      System.out.println("OPC 服务器连接成功...");

     /** 调用JOpc.registerGroups()注册所有的组使用registerGroups()方法注册则OpcItem不用单独注册。如果调用registerGroup(OpcGroup)注册OpcGroup,则还需调用registerItem(OpcGroup,OpcItem)**/
      jopc.registerGroups();
      System.out.println("OPC groups are registered...");
      System.out.println("OPC groups 注册成功...");

      /** 调用JOpc.asynch10Read()异步读数据**/
      jopc.asynch10Read(group);
      System.out.println("OPC asynchronous reading is applied...");
      System.out.println("OPC 正在异步读取数据...");

      OpcGroup downGroup;

      /**当前时间秒数**/
      long start = System.currentTimeMillis();
      while ((System.currentTimeMillis() - start) < 10000) {
        jopc.ping();
        downGroup = jopc.getDownloadGroup();
        if (downGroup != null) {
          System.out.println(downGroup);
        }

        if ((System.currentTimeMillis() - start) >= 6000) {
          jopc.setGroupActivity(group, false);
        }
        synchronized(test) {
          /**间隔50毫秒**/
          test.wait(1000);
        }
      }

      // change activity
      jopc.setGroupActivity(group, true);

      // change updateTime
      jopc.setGroupUpdateTime(group, 100);

      start = System.currentTimeMillis();
      while ((System.currentTimeMillis() - start) < 10000) {
        jopc.ping();
        downGroup = jopc.getDownloadGroup();
        if (downGroup != null) {
          System.out.println(downGroup);
        }

        synchronized(test) {
          test.wait(2000);
        }
      }
      /**断开异步读取**/
      jopc.asynch10Unadvise(group);
      System.out.println("OPC asynchronous reading is unadvise...");
      System.out.println("OPC 断开异步读取...");
      /**断开连接**/
      JOpc.coUninitialize();
      System.out.println("Program terminated...");
      System.out.println("断开服务器连接...");
    }
    catch (ConnectivityException e) {
      e.printStackTrace();
    }
    catch (UnableAddGroupException e) {
      e.printStackTrace();
    }
    catch (UnableAddItemException e) {
      e.printStackTrace();
    }
    catch (ComponentNotFoundException e) {
      e.printStackTrace();
    }
    catch (Asynch10ReadException e) {
      e.printStackTrace();
    }
    catch (Asynch10UnadviseException e) {
      e.printStackTrace();
    }
    catch (GroupUpdateTimeException e) {
      e.printStackTrace();
    }
    catch (GroupActivityException e) {
      e.printStackTrace();
    }
    catch (CoUninitializeException e) {
      e.printStackTrace();
    }
  }

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值