OPC 通讯 Demo

  • 以jeasyopc为例, 导入jeasyopc相关的类和资源文件(注:由于.dll文件限制只能在32位系统上运行)
    这里写图片描述

  • 下载测试服务端软件,(opc相关的机器配置见https://wenku.baidu.com/view/c9b6aca6b0717fd5360cdc55.html)
    这里写图片描述

  • 可以用OPC 的客户端软件先测试一下,是否能成功读取
    这里写图片描述

  • 编写测试demo, 进行测试

opc读取demo

package com.opc.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.Properties;

import javafish.clients.opc.JEasyOpc;
import javafish.clients.opc.asynch.AsynchEvent;
import javafish.clients.opc.asynch.OpcAsynchGroupListener;
import javafish.clients.opc.component.OpcGroup;
import javafish.clients.opc.component.OpcItem;

/**
 * OPC demo
 */
public class Test6 implements OpcAsynchGroupListener {

    // 执行
    public static void main(String[] args) throws Exception {
        Test6 t = new Test6();

        //构造参数 : IP //OPCServer名称 //任意
        JEasyOpc jopc = new JEasyOpc("127.0.0.1", "Knight.OPC.Server.Demo",
                "JOPC1");

        JEasyOpc.coInitialize(); 
        jopc.connect();
        // (用户组的标识名称),开始活动的组(true 开始 false 不开始) 默认true,刷新组的时间 毫秒,默认 0.0f
        OpcGroup group = new OpcGroup("", true, 3000, 0.0f);

        group.addItem(new OpcItem("b.b.b", true, ""));
        jopc.addGroup(group);
        group.addAsynchListener(t); // 添加监听

        jopc.run();

        jopc.terminate();
        JEasyOpc.coUninitialize();

    }

    public void getAsynchEvent(AsynchEvent event) {
        ArrayList<OpcItem> list = event.getOPCGroup().getItems();
        for (Iterator<OpcItem> it = list.iterator(); it.hasNext();) {
            OpcItem opcItem = it.next();
            String key = opcItem.getItemName().trim();
            String value = opcItem.getValue().toString().trim();
            String itemName = opcItem.getItemName();

            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            System.out.println("时间 : " + df.format(new Date())
                    + " --> plc数据监听: " + key + " --> " + value);

        }
    }

}



opc 写入demo

package com.opc.test;

import javafish.clients.opc.JOpc;
import javafish.clients.opc.component.OpcGroup;
import javafish.clients.opc.component.OpcItem;
import javafish.clients.opc.exception.ConnectivityException;
import javafish.clients.opc.variant.Variant;

public class Test4 {

    public static void main(String[] args) throws Exception {
        // 有了jeasyopc,一切操作都简单的很,如下:
        // 第一步,初始化
        JOpc.coInitialize();
        // 第二步,建立一个JOpc对象,三个参数,分别是OpcServer的IP,Server的name,还有JOpc的name
        JOpc jopc = new JOpc("127.0.0.1", "Knight.OPC.Server.Demo", "JOPC1");
        // 第三步,建立连接
        jopc.connect();
        // 第四步,新建一个OPC的group和item,并把item加到group中
        OpcGroup group = new OpcGroup("group", true, 500, 0.0f);
        // 前提 opc的服务店,必须有该点位
        OpcItem item = new OpcItem("f.f.f", true, "");
        group.addItem(item);
        // 第五步,
        jopc.addGroup(group);
        jopc.registerGroup(group);
        jopc.registerItem(group, item);
        // 第六步
        item.setValue(new Variant(0.02f));
        jopc.synchWriteItem(group, item);
        // 最后,该释放的全释放掉
        jopc.unregisterItem(group, item);
        jopc.unregisterGroup(group);
        JOpc.coUninitialize();
    }

    public static void run() throws Exception {
        // 有了jeasyopc,一切操作都简单的很,如下:
        // 第一步,初始化
        JOpc.coInitialize();
        // 第二步,建立一个JOpc对象,三个参数,分别是OpcServer的IP,Server的name,还有JOpc的name
        JOpc jopc = new JOpc("127.0.0.1", "Knight.OPC.Server.Demo", "JOPC1");
        // 第三步,建立连接
        jopc.connect();
        // 第四步,新建一个OPC的group和item,并把item加到group中
        OpcGroup group = new OpcGroup("group", true, 500, 0.0f);
        OpcItem item = new OpcItem("f.f.f", true, "");
        group.addItem(item);
        // 第五步,
        jopc.addGroup(group);
        jopc.registerGroup(group);
        jopc.registerItem(group, item);
        // 第六步,写入数据,此处以float类型的0.04f,写入f.f.f地址
        // 写入的数据都需要填入Variant类的构造参数中
        item.setValue(new Variant(0.04f));
        jopc.synchWriteItem(group, item);
        // 最后,该释放的全释放掉
        jopc.unregisterItem(group, item);
        jopc.unregisterGroup(group);
        JOpc.coUninitialize();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值