opc

news/2024/10/30 9:25:30/

终于还有一个就写完了,这次是opc,同样需要模拟器,这里使用的是MatrikonOPCSimulation,其实具体怎么做参考网上的内容完全足够https://openscada.atlassian.net/wiki/display/OP/HowToStartWithUtgard,只不过想记录一下自己学过的东西,所以还是自己写一下。

使用opc协议不仅需要导入jar包,还要关闭防火墙,否则会出现错误,不知道有没有更好的办法,有待以后去解决。

import java.net.UnknownHostException;
import java.util.concurrent.Executors;import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.core.JIVariant;
import org.openscada.opc.lib.common.AlreadyConnectedException;
import org.openscada.opc.lib.common.ConnectionInformation;
import org.openscada.opc.lib.common.NotConnectedException;
import org.openscada.opc.lib.da.AccessBase;
import org.openscada.opc.lib.da.AddFailedException;
import org.openscada.opc.lib.da.DataCallback;
import org.openscada.opc.lib.da.DuplicateGroupException;
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.SyncAccess;public class opcUtil {public void read() {ConnectionInformation conn = new ConnectionInformation();conn.setHost("127.0.0.1");conn.setDomain("WORKGROUP");conn.setUser("计算机的用户名");conn.setPassword("计算机的密码");conn.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");conn.setProgId("Matrikon.OPC.Simulation.1");String itemId = "Bucket Brigade.Int4";Server server = new Server(conn,Executors.newSingleThreadScheduledExecutor());try {server.connect();AccessBase access;access = new SyncAccess(server, 500);access.addItem(itemId, new DataCallback() {@Overridepublic void changed(Item item, ItemState state) {try {System.out.println(state.getValue().getObjectAsInt());} catch (Exception e) {e.printStackTrace();}}});access.bind();Thread.sleep(500);access.unbind();} catch (JIException e) {System.out.println(String.format("%08X: %s", e.getErrorCode(),server.getErrorMessage(e.getErrorCode())));} catch (IllegalArgumentException e1) {e1.printStackTrace();} catch (UnknownHostException e1) {e1.printStackTrace();} catch (AlreadyConnectedException e1) {e1.printStackTrace();} catch (NotConnectedException e) {e.printStackTrace();} catch (DuplicateGroupException e) {e.printStackTrace();} catch (AddFailedException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}private class DataCallbackDump implements DataCallback {Object value;public DataCallbackDump(Object value) {this.value = value;}@Overridepublic void changed(Item item, ItemState state) {JIVariant write = new JIVariant((Integer) value);try {item.write(write);} catch (JIException e) {e.printStackTrace();}}}public void write() {ConnectionInformation conn = new ConnectionInformation();conn.setHost("127.0.0.1");conn.setDomain("WORKGROUP");conn.setUser("计算机的用户名");conn.setPassword("计算机的密码");conn.setClsid("F8582CF2-88FB-11D0-B850-00C0F0104305");conn.setProgId("Matrikon.OPC.Simulation.1");String itemId = "Bucket Brigade.Int4";Server server = new Server(conn,Executors.newSingleThreadScheduledExecutor());final Object object = 5;// final JIVariant value = new JIVariant("6");try {server.connect();AccessBase access;access = new SyncAccess(server, 500);DataCallbackDump dcd = new DataCallbackDump(object);access.addItem(itemId, dcd);access.bind();Thread.sleep(500);access.unbind();} catch (JIException e) {System.out.println(String.format("%08X: %s", e.getErrorCode(),server.getErrorMessage(e.getErrorCode())));} catch (IllegalArgumentException e1) {e1.printStackTrace();} catch (UnknownHostException e1) {e1.printStackTrace();} catch (AlreadyConnectedException e1) {e1.printStackTrace();} catch (NotConnectedException e) {e.printStackTrace();} catch (DuplicateGroupException e) {e.printStackTrace();} catch (AddFailedException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {opcUtil util = new opcUtil();util.write();util.read();}}



http://www.ppmy.cn/news/445484.html

相关文章

【Appium+python】特殊键盘事件处理-国产机型的搜索处理。

问题原因及概述 在编写脚本的时候,发现华为、OPPE等国产手机无法处理 driver.keyevent(66)# 84搜索键 66回车键 导致PyCharm 反复报错 解决方案 国产机大多为厂商修改后的第三方浏览器,缺失大部分键盘事件处理的方法,特别是华为系列手机…

综合设计一个OPPE主页--页面的插件引用(animate.css)--d动画的使用--滚轮或鼠标到该位置时,才有动画的切换---所以我们需要用jquery监听鼠标滚轮的滚动事件

Animate.css | A cross-browser library of CSS animations. 里面有许多css的效果 首先使用 animate.css文件 link rel"stylesheet" type"text/css" href"css/animate.css"> 给指定的元素添加动画样式名: 就存在了相应的动画样式…

蜂鸣器实现一盏灯灭的同时蜂鸣器响

蜂鸣器响一下灭一下 #include<reg52.h> sbit fmP2^3; //代表P2.3 delay(int xms) { int i,j; for(ixms;i>0;i--) for(j112;j>0;j--); } void main() { while(1) { fm0; //使蜂鸣器响起 delay(500); fm1; delay(500); } }实现蜂鸣器和流水灯同时亮同时响 #…

商务车改装后,有哪些情况会导致异响?

一、开车时出现了异响&#xff0c;主要由这些情况导致。 &#xff08;1&#xff09;像商务车&#xff0c;二排基本都升级成了航空座椅&#xff0c;可能是出厂就有问题&#xff0c;拼接处没做好&#xff0c;导致座椅来回磨蹭。另外固定航空座椅螺丝没拧好&#xff0c;车子开动后…

不看后悔:GL8商务车改装有异响该怎么解决

汽车改装中所有的车友最关心的问题就是汽车改装后有异响怎么办&#xff1f;那异响的问题&#xff0c;其实很复杂。我在这给大家大致的分享一下如何解决异响的问题。 我们解决异响主要从三方面解决&#xff1a;产品&#xff0c;技术和细节。 首先产品&#xff0c;产品有很多&am…

万用表蜂鸣器档の响一声

讲故事 之前几个星期的事了&#xff0c;今天有点时间&#xff0c;记录一下。 焊完样板&#xff0c;用万用表蜂鸣器档测一下有没有短路&#xff0c;响了一声&#xff0c;听到响就把表笔拿开了&#xff0c;当时也不知道是只响一声然后不响&#xff0c;于是以为短路了&#xff0…

30万元可以投资哪些实业?

问题非常好&#xff0c;我是一名创业者&#xff0c;尝试回答。 30万元可以投资哪些实业&#xff1f;对于有意投资实体经济的人&#xff0c;我非常推崇&#xff0c;这里介绍几个项目供参考。 一&#xff0c;小型生活用纸加工厂 这个项目具体投资方案在我的头条文章里有详细阐…

按键的长按与短按让蜂鸣器响一下

最近我用标准库和stm32写了一个关于&#xff0c;多个按键的长按与短按&#xff0c;伴随蜂鸣器响一下的小实验&#xff0c;和大家分享一下&#xff01; 按键的思路框架&#xff1a; 这个框架是我从网上找到的&#xff0c;便于大家理解。 void Key_Scan(void) {static uint8_t cn…