赞
踩
java连接OPC server开源的jar有两个,jeasyopc和Utgard;
jeasyopc : 底层依赖JNI,只能跑在windows环境,不能跨平台
Utgard; 全部基于dcom具有跨平台的特性
以下是jeasyopc连接Opc server的样例;Utgard的有机会再补;
从上一篇OPC概述里,下载opc server安装,如图一个是opc server,一个是opc客户端;
demo如下图简单配置,不用像教程那么麻烦。
在Alias configuration右键 Insert Alias groups test.点击content 配置如下
通过opc explorer检查配置是否正确;可以看到能正常获取到数据f001
在client test上邮件add items配置f002
OK, server配置完毕同时通过client验证了;
通过地址下载jeasyopc相关文件https://sourceforge.net/projects/jeasyopc/
注意jeasyopc 只支持32jdk;不然报错;需要下载32位jdk;
- Exception in thread "main" java.lang.UnsatisfiedLinkError: *****\opc-demo\lib\JCustomOpc.dll:
- Can't load IA 32-bit .dll on a AMD 64-bit platform
将jar包导入工程; -Dfile 为你的jar包路径
mvn install:install-file -Dfile=jeasyopc.jar -DgroupId=javafish.clients -DartifactId=jeasy-opc -Dversion=16.05.24 -Dpackaging=jar
pom.xml新增配置
- <dependency>
- <groupId>javafish.clients</groupId>
- <artifactId>jeasy-opc</artifactId>
- <version>16.05.24</version>
- </dependency>
在项目下新建目录lib,将下载的dll JCustomOpc.dll放入进去;
在resource下建立javafish.clients.opc;新建JCustomOpc.properties,配置dll的路径
library.path = ./lib/JCustomOpc
代码比较简单,如下
- @Slf4j
- public class OpcUtils {
- static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
-
- public static void main(String[] args) {
- simpleDemo();
- }
-
- public static void simpleDemo() {
- JOpc.coInitialize();
-
- JOpc jopc = new JOpc("localhost", "Matrikon.OPC.Simulation.1", "JCustomOPC");
-
- OpcItem item1 = new OpcItem("test.f001", true, "");
- OpcGroup group = new OpcGroup("group1", true, 1000, 0.0f);
- group.addItem(item1);
- jopc.addGroup(group);
- try {
- jopc.connect();
- log.info("OPC client is connected");
- jopc.registerGroups();
- log.info("OPC Group is registere");
- } catch (ConnectivityException e2) {
- e2.printStackTrace();
- } catch (UnableAddItemException e) {
- e.printStackTrace();
- } catch (UnableAddGroupException e) {
- e.printStackTrace();
- }
- try {
- for (int i = 1; i <= 10; i++) {
- log.info("开始第{}次获取遥测数据", i);
- OpcItem responseItem = jopc.synchReadItem(group, item1);
- log.info("返回结果item:{}", responseItem);
- log.info("遥测数据时间{}, 遥测数据类型{}, 遥测数据值{}", sdf.format(responseItem.getTimeStamp().getTime()), Variant.getVariantName(responseItem.getDataType()), responseItem.getValue());
- Thread.sleep(1000);
- }
- } catch (SynchReadException e) {
- e.printStackTrace();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- JOpc.coUninitialize();
- }
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。