import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.core.JIString;
import org.jinterop.dcom.core.JIVariant;
import org.openscada.opc.lib.common.ConnectionInformation;
import org.openscada.opc.lib.da.*;
import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
//172.20.10.3
public class UtgardTutorial2 {
public static void main(String[] args) throws Exception {
// 连接信息
final ConnectionInformation ci = new ConnectionInformation();
ci.setHost("172.20.10.3"); // 本机IP
ci.setDomain(""); // 域,为空就行
ci.setUser("OPCServer"); // 本机上自己建好的用户名
ci.setPassword("123456"); // 密码
// 使用MatrikonOPC Server的配置
// ci.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305"); // MatrikonOPC的注册表ID,可以在“组件服务”里看到
// final String itemId = "u.u"; // MatrikonOPC Server上配置的项的名字按实际
// 使用KEPServer的配置
ci.setClsid("7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729"); // KEPServer的注册表ID,可以在“组件服务”里看到,上面有图片说明
//final String itemId = "u.u.u"; // KEPServer上配置的项的名字,没有实际PLC,用的模拟器:simulator
//final String[] itemId = {"通道 2.设备 1.TAG1","通道 2.设备 1.TAG3", "通道 2.设备 1.TAG5"};
// 启动服务
final Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());
server.connect();
GetName.dumpTree(server.getTreeBrowser().browse(), 0);
Collection<String> itemId = GetName.dumpFlat(server.getFlatBrowser());
Iterator<String> iterator = itemId.iterator();
try {
// 连接到服务
// add sync access, poll every 500 ms,启动一个同步的access用来读取地址上的值,线程池每500ms读值一次
// 这个是用来循环读值的,只读一次值不用这样
final AccessBase access = new SyncAccess(server, 500);
// 这是个回调函数,就是读到值后执行这个打印,是用匿名类写的,当然也可以写到外面去
while(iterator.hasNext()){
access.addItem(iterator.next(), new DataCallback() {
@Override
public void changed(Item item, ItemState itemState) {
int type = 0;
try {
type = itemState.getValue().getType(); // 类型实际是数字,用常量定义的
} catch (JIException e) {
e.printStackTrace();
}
System.out.println("监控项的数据类型是:-----" + type);
System.out.println("监控项的时间戳是:-----" + itemState.getTimestamp().getTime());
System.out.println("监控项的详细信息是:-----" + itemState);
// 如果读到是short类型的值
if (type == JIVariant.VT_I2) {
short n = 0;
try {
n = itemState.getValue().getObjectAsShort();
} catch (JIException e) {
e.printStackTrace();
}
System.out.println("-----short类型值: " + n);
}
// 如果读到是字符串类型的值
if(type == JIVariant.VT_BSTR) { // 字符串的类型是8
JIString value = null;
try {
value = itemState.getValue().getObjectAsString();
} catch (JIException e) {
e.printStackTrace();
} // 按字符串读取
String str = value.getString(); // 得到字符串
System.out.println("-----String类型值: " + str);
}
// 如果读到是浮点型类型的值
if(type == JIVariant.VT_R4) {
float f = 0.0f;
try {
f = itemState.getValue().getObjectAsFloat();
} catch (JIException e) {
e.printStackTrace();
}
System.out.println("-----flaot类型值: " + f);
}
}
});
// start reading,开始读值
access.bind();
// wait a little bit,有个10秒延时
Thread.sleep(10 * 1000);
// stop reading,停止读取
access.unbind();
}
} catch (final JIException e) {
System.out.println(String.format("%08X: %s", e.getErrorCode(), server.getErrorMessage(e.getErrorCode())));
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Java实现opc通信协议代码
共34个文件
class:7个
xml:6个
java:5个
需积分: 46 20 下载量 90 浏览量
2022-08-01
20:57:30
上传
评论 1
收藏 35KB ZIP 举报
温馨提示
Java实现opc通信协议代码
资源详情
资源评论
资源推荐
收起资源包目录
opc.zip (34个子文件)
pom.xml 3KB
target
maven-status
maven-compiler-plugin
compile
default-compile
inputFiles.lst 68B
createdFiles.lst 46B
testCompile
default-testCompile
inputFiles.lst 0B
classes
GetName.class 4KB
UtgardTutorial2$1.class 3KB
META-INF
opc.kotlin_module 16B
Main.class 3KB
GetValues.class 3KB
UtgardTutorial1$1.class 2KB
UtgardTutorial2.class 3KB
UtgardTutorial1.class 2KB
maven-archiver
pom.properties 111B
generated-sources
annotations
opc-1.0-SNAPSHOT.jar 4KB
.gradle
buildOutputCleanup
buildOutputCleanup.lock 17B
cache.properties 51B
vcs-1
gc.properties 0B
checksums
checksums.lock 17B
6.1
fileHashes
fileHashes.lock 17B
fileChanges
last-build.bin 1B
vcsMetadata-1
executionHistory
executionHistory.lock 17B
gc.properties 0B
opc.iml 81B
gradle
src
test
java
main
resources
java
UtgardTutorial1.java 4KB
GetName.java 4KB
UtgardTutorial2.java 5KB
GetValues.java 1KB
Main.java 1KB
.idea
uiDesigner.xml 9KB
misc.xml 526B
jarRepositories.xml 1KB
compiler.xml 536B
workspace.xml 9KB
.gitignore 184B
共 34 条
- 1
尔玉先生
- 粉丝: 27
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0