utgard是一个开源的项目,基于j-interop做的,用于和OPC SERVER通讯。
j-interop是纯java封装的用于COM/DCOM通讯的开源项目,这样就不必使用JNI
首先说下环境:
我的电脑是WIN7 64操作系统
eclipse3.3
OPC SERVER采用 samtatic net
本文目的:通过utgard与OPC SERVER通讯,从而达到控制PLC的功能。
下面是程序配置:
1、导入jar包
2、测试main程序(附件中的Test.java)
import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executors; import org.jinterop.dcom.common.JIException; import org.jinterop.dcom.core.JIVariant; import org.openscada.opc.lib.common.ConnectionInformation; import org.openscada.opc.lib.da.Group; import org.openscada.opc.lib.da.Item; import org.openscada.opc.lib.da.ItemState; import org.openscada.opc.lib.da.Server; import org.openscada.opc.lib.da.browser.Branch; import org.openscada.opc.lib.da.browser.Leaf; public class Test { public static void main ( final String[] args ) throws Throwable { // create connection information final ConnectionInformation ci = new ConnectionInformation (); ci.setHost("127.0.0.1"); ci.setDomain(""); // ci.setProgId("Matrikon.OPC.Simulation.1"); ci.setProgId("OPC.SimaticNET"); //s7 注意 使用progId必须要求dcom配置正确 //ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");//other //ci.setClsid("B6EACB30-42D5-11D0-9517-0020AFAA4B3C");// simatic S7 ci.setUser("Administrator"); ci.setPassword("asd3839729"); // create a new server final Server server = new Server ( ci, Executors.newSingleThreadScheduledExecutor () ); try { server.connect (); Group group = server.addGroup ( "group" ); // group is initially active ... just for demonstration group.setActive ( true ); // Add a new item to the group final Item item = group.addItem ( "S7:[@LOCALSERVER]DB1,W0" ); String[] test = new String[]{"S7:[@LOCALSERVER]DB1,W2","S7:[@LOCALSERVER]DB1,W1"}; Map<String,Item> map = new HashMap<String,Item>(); map = group.addItems(test); System.out.println(map.keySet()); for(String s : map.keySet()){ Item it = map.get(s); System.out.println(s + " =============== " + it.read(true).getValue().getObjectAsUnsigned().getValue()); } // Items are initially active ... just for demonstration item.setActive ( true ); item.write(new JIVariant("121")); System.out.println(item.read(true).getValue().getObjectAsUnsigned().getValue() + " <------=="); // Add some more items ... including one that is already existing // final Map<String, Item> items = group.addItems ( "Saw-toothed Waves.Int2", "Saw-toothed Waves.Int4" ); } catch ( final JIException e ) { System.out.println ( String.format ( "%08X: %s", e.getErrorCode (), server.getErrorMessage ( e.getErrorCode () ) ) ); } } }
注:
a:诸如S7:[@LOCALSERVER]DB1,W0是我通过在本地OPC SERVER中定义的PLC地址,通过OPC SCOUT可以定义、查看
b:ProgId 其实就是注册表中的名称,对应的值就是Clsid 这些可以在注册表中找到,这里我的progid是OPC.SimaticNET,就是通过这个名称找到了它的值B6EACB30-42D5-11D0-9517-0020AFAA4B3C
需要注意的是,如果使用OPC.SimaticNet,你电脑的OPC SERVER的DCOM必须配置成功,否则连接不上,也或者直接用 setClsid("B6EACB30-42D5-11D0-9517-0020AFAA4B3C"),效果一样,WIN7 64位设置OPC SERVER DCOM与XP不太一样,附件 《Win7和Win7_SP1网络OPC配置.pdf》是详细配置步骤。
最近在研究J-INTEROP与DCOM的通讯,也是刚刚接触,希望有兴趣的一起探讨探讨。
相关推荐
utgard的源码 utgard 所需的全部jar包 java 连接opc
java 语言 utgard与opc通讯示例代码。 java opc kepserver
jar包和demo...java 使用UTGard采集OPC服务上的数据.. 采集连接断开 自动重连.
opc 采集数据基于java utguard, 亲自测试,复用于多个项目,欢迎吐槽,可以复制到自己的项目或者在开发环境导入到新的项目。
java通过Utgard链接opc服务器测试类
资源名:java通过Utgard Jeasyopc 和opc服务器通讯程序源码.zip 资源类型:程序源代码 源码说明: 基于Java写的连接opc服务器程序源码 包含两种连接方式Utgard,Jeasyopc 还有说明文档和学习文档 适合人群:新手及...
java 连接opc服务源码两种方式Utgard,Jeasyopc; 亲测Utgard可远程连接opc服务只需知道opc服务器用户名密码
java通过utgard调用OPC获取点位数据,注意要csid来获取,直接用户名和密码获取有误
因为公司有需求,要调用opc服务器的数据,上传到我们自己开发的一个vr眼镜展示。所以经过几天把这个给测试好了,连接的是MatrikonOPC Server模拟服务器
java-opc-(Utgard or Jeasyopc)
java-opc(Utgard、Jeasyopc)
本来不想设置资源分的,但是坑爹的是必须设置一个,没办法就设置个最低的了!这是使用utgard开发opc服务的jar包,基本要用的都在里面,也有pom,网友可以自己打成私服仓库。
Utgard相关支持jar包,openscada相关jar包; 包含j-interop、org.openscada.opc.dcom、org.openscada.opc.lib-等
utgard用到的jar包,可以用
OPC远程连接配置工具,可以轻松配置OPC远程连接,进行OPC远程连接更加容易!
utgard方式读取opc数据DEMO。JKD32位,版本1.7
opclient jeasyopc utgard 完整例子 demo 性能对比 学习书籍 下载即可使用调试
java 连接opc服务源码两种方式Utgard,Jeasyopc; Utgard可远程连接opc服务只需知道opc服务器用户名密码,程序测试过,没有问题。