以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();
}
}