————————————————
版权声明:本文为CSDN博主「lgbisha」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lgbisha/article/details/82898228

1. 列举某Server下的所有OPC连接

  ServerList serverList = new ServerList("10.1.5.123", "freud",
    "password", "");

  Collection<ClassDetails> classDetails = serverList
    .listServersWithDetails(new Category[] {
    Categories.OPCDAServer10, Categories.OPCDAServer20,
    Categories.OPCDAServer30 }, new Category[] {});

  for (ClassDetails cds : classDetails) {
    System.out.println(cds.getProgId() + "=" + cds.getDescription());
  }

2.列举连接下的所有Group和Item

  public static void main(String[] args) throws Exception {
    ConnectionInformation ci = new ConnectionInformation();
    ci.setHost("10.1.5.123");
    ci.setDomain("");
    ci.setUser("freud");
    ci.setPassword("password");
    ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");

    Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());

    server.connect();

    dumpTree(server.getTreeBrowser().browse(), 0);
    dumpFlat(server.getFlatBrowser());

    server.disconnect();
  }

  private static void dumpFlat(final FlatBrowser browser)
      throws IllegalArgumentException, UnknownHostException, JIException {
      for (String name : browser.browse()) {
        System.out.println(name);
      }
  }

  private static void dumpTree(final Branch branch, final int level) {

    for (final Leaf leaf : branch.getLeaves()) {
      dumpLeaf(leaf, level);
    }

    for (final Branch subBranch : branch.getBranches()) {
      dumpBranch(subBranch, level);
      dumpTree(subBranch, level + 1);
    }
  }

  private static String printTab(int level) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < level; i++) {
    sb.append("\t");
    }
    return sb.toString();
  }

  private static void dumpLeaf(final Leaf leaf, final int level) {
    System.out.println(printTab(level) + "Leaf: " + leaf.getName() + ":"
      + leaf.getItemId());
  }

  private static void dumpBranch(final Branch branch, final int level) {
    System.out.println(printTab(level) + "Branch: " + branch.getName());
  }

3.Item的同步查询

  public static void main(String[] args) throws Exception {

    ConnectionInformation ci = new ConnectionInformation();
    ci.setHost("10.1.5.123");
    ci.setDomain("");
    ci.setUser("freud");
    ci.setPassword("password");
    ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");

    Server server = new Server(ci,
    Executors.newSingleThreadScheduledExecutor());

    server.connect();

    Group group = server.addGroup();
    Item item = group.addItem("Random.Real5");

    Map<String, Item> items = group.addItems("Random.Real1",
      "Random.Real2", "Random.Real3", "Random.Real4");

    dumpItem(item);

    for (Entry<String, Item> temp : items.entrySet()) {
      dumpItem(temp.getValue());
    }

    server.dispose();
  }

  private static void dumpItem(Item item) throws JIException {
    System.out.println("[" + (++count) + "],ItemName:[" + item.getId()
      + "],value:" + item.read(false).getValue());
  }

  private static int count;

4.Item的异步查询

  private static final int PERIOD = 100;

  private static final int SLEEP = 2000;

  public static void main(String[] args) throws Exception {

  ConnectionInformation ci = new ConnectionInformation();
  ci.setHost("10.1.5.123");
  ci.setDomain("");
  ci.setUser("freud");
  ci.setPassword("password");
  ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");

  Server server = new Server(ci,
  Executors.newSingleThreadScheduledExecutor());

  server.connect();

  AccessBase access = new SyncAccess(server, PERIOD);

  access.addItem("Random.Real5", new DataCallback() {
  private int i;

  public void changed(Item item, ItemState itemstate) {
    System.out.println("[" + (++i) + "],ItemName:[" + item.getId()
      + "],value:" + itemstate.getValue());
    }
  });

  access.bind();
  Thread.sleep(SLEEP);
  access.unbind();
  server.dispose();
  }

5.Item的发布订阅查询

  private static final int PERIOD = 100;

  private static final int SLEEP = 2000;

  public static void main(String[] args) throws Exception {

    ConnectionInformation ci = new ConnectionInformation();
    ci.setHost("10.1.5.123");
    ci.setDomain("");
    ci.setUser("freud");
    ci.setPassword("password");
    ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");

    Server server = new Server(ci,
    Executors.newSingleThreadScheduledExecutor());

    server.connect();

    AccessBase access = new Async20Access(server, PERIOD, false);

    access.addItem("Random.Real5", new DataCallback() {

    private int count;

    public void changed(Item item, ItemState itemstate) {
      System.out.println("[" + (++count) + "],ItemName:["
      + item.getId() + "],value:" + itemstate.getValue());
      }
    });

    access.bind();
    Thread.sleep(SLEEP);
    access.unbind();
    server.dispose();
  }

6.自动重连Item异步读取

  private static final int PERIOD = 100;

  private static final int SLEEP = 2000;

  public static void main(String[] args) throws Exception {

    ConnectionInformation ci = new ConnectionInformation();
    ci.setHost("10.1.5.123");
    ci.setDomain("");
    ci.setUser("freud");
    ci.setPassword("password");
    ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");

    Server server = new Server(ci,
    Executors.newSingleThreadScheduledExecutor());

    AutoReconnectController controller = new AutoReconnectController(server);

    controller.connect();

    AccessBase access = new SyncAccess(server, PERIOD);

    access.addItem("Random.Real5", new DataCallback() {
    private int i;

    public void changed(Item item, ItemState itemstate) {
      System.out.println("[" + (++i) + "],ItemName:[" + item.getId()
        + "],value:" + itemstate.getValue());
      }
    });

    access.bind();
    Thread.sleep(SLEEP);
    access.unbind();
    controller.disconnect();
  }

7.Item同步写入

  public static void main(String[] args) throws Exception {

    ConnectionInformation ci = new ConnectionInformation();
    ci.setHost("10.1.5.123");
    ci.setDomain("");
    ci.setUser("freud");
    ci.setPassword("password");
    ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");

    Server server = new Server(ci,
    Executors.newSingleThreadScheduledExecutor());

    server.connect();

    Group group = server.addGroup();
    Item item = group.addItem("Square Waves.Real4");

    final Float[] integerData = new Float[] { 1202f, 1203f, 1204f };
    final JIArray array = new JIArray(integerData, false);
    final JIVariant value = new JIVariant(array);

    item.write(value);
    Thread.sleep(2000);

    dumpItem(item);

    server.dispose();

  }

  private static void dumpItem(Item item) throws JIException {
    System.out.println("[" + (++count) + "],ItemName:[" + item.getId()
      + "],value:" + item.read(true).getValue());
  }

private static int count;

8.Item异步写入

OPC API 简介的更多相关文章

  1. Web Api 简介

    ASP.NET Web API 简介  ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP. ...

  2. ZooKeeper系列4:ZooKeeper API简介及编程

    问题导读: 1.ZooKeeper API 共包含几个包? 2.如何使用ZooKeeper API 创建zookeeper应用程序? 1)ZooKeeper API 简介   ZooKeeper AP ...

  3. WebSocket API简介

    WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chr ...

  4. 构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介

    构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介 熟悉将用于 Apache Tuscany SCA for C++ 的 API.您将通过本文了解该 API 的主要组 ...

  5. Raphael Js矢量库API简介:

    Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...

  6. 开放数据接口 API 简介与使用场景、调用方法

    此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...

  7. Monkey脚本API简介

    一.API简介 LaunchActivity(pkg_name, cl_name):启动应用的Activity.参数:包名和启动的Activity. Tap(x, y, tapDuration): 模 ...

  8. web API简介(四):客户端储存之IndexedDB API

    概述 前篇:web API简介(三):客户端储存之Web Storage API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. Index ...

  9. web API简介(三):客户端储存之Web Storage API

    概述 前篇:web API简介(二):客户端储存之document.cookie API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. W ...

随机推荐

  1. TODO:AppiumTestDistribution--CapabilityManager 类

    该类代码详见git:https://github.com/AppiumTestDistribution/AppiumTestDistribution/tree/master/src/main/java ...

  2. Linux文件系统之install(复制文件和设置文件属性)

    install命令 install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点.但是,install允许你控制目标 ...

  3. 基于 Go 的可嵌入脚本语言 zygomys

    zygomys zygomys 是一种可嵌入的脚本语言. 它是一个具有面向对象风格的现代化 Lisp,提供了一个解释器和 REPL(Read-Eval-Print-Loop:也就是说,它带有一个命令行 ...

  4. 自己编写jQuery插件之表单验证

    自己编写jQuery插件之表单验证 吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思.不想这样,不想这样,快让这种情绪消失吧,忽忽.... 表单验证在项目中用的还是比较 ...

  5. Python 练习实例2

    Python 练习实例2 题目:企业发放的奖金根据利润提成.利润(I)低https://www.xuanhe.net/于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元 ...

  6. 002_89C52_Proteus_DAC0832_输出50HZ,正弦波,三角波,矩形波,锯齿波

    (一)非常感谢:89C51与ad0832 输出正弦波,三角波,矩形波,锯齿波 (二)在上面的情况下进行程序的修改,实现50HZ的输出 (三)电路图 (三)输出方波 (四)输出锯齿波 (五)输出三角波 ...

  7. 7月清北学堂培训 Day 1

    今天是林永迪老师的讲授~ 基础算法 1. 模拟算法 面向测试算法 模拟算法的关键就是将人类语言翻译成机器语言. 要做到以下两点: 1.优秀的读题能力: 2.优秀的代码能力: 程序流程图: 读入,循环处 ...

  8. iTerm2 半透明颜色主题与字体配置

    下载iTerm2https://www.iterm2.com/ 安装. 下载这个主题https://raw.githubusercontent.com/mbadolato/iTerm2-Color-S ...

  9. Centos 查看CPU个数、核心数等信息

    总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep & ...

  10. sublime的一些记录

    { "keys": ["tab"], "command": "reindent", "context" ...