opc 带有session
现在使用java来做工控系统的几种方式:
知识储备:
一、OPC Server端目前常见的有以下几种协议:
参考博客:
https://www.cnblogs.com/ioufev/articles/9697717.html
https://www.cnblogs.com/ioufev/articles/9697890.html
二、DOCM的配置
可以参考https://www.cnblogs.com/ioufev/p/9365919.html
三、OPCServer服务器属性
java 获取OPCServer的方式有两种,
1、jeasyopc:适用于32位操作系统
2、Utgrad :可跨平台

可以根据具体情况具体分析,相比较对于初次接触来说jeasyopc相对简单。
四、试验模拟OPC
1、实验用模拟OPCServer(50M):MatrikonOPC
2、实际OPCServer使用(450M,中文):KEPServer V6
Utgard:
官网:http://openscada.org/projects/utgard/
博客参考
https://www.cnblogs.com/ioufev/articles/9894452.html
https://elfasd.iteye.com/blog/2064410
JeasyOPC:
博客参考:
https://blog.csdn.net/qq_33720460/article/details/78478430
https://blog.csdn.net/wangzhi291/article/details/45029799
https://blog.csdn.net/diyu122222/article/details/77645668
五:本人只采用了UtgradUt开发用例
/**
* OPCServer 客户端连接
*/
public class UtgrandClient {
private final String LOCAL_HOST="10.0.0.17";//OPCServer服务器IP
private final String USER_NAME ="OPCServer";//DOCM配置时OPCServer的用户名
private final String PASS_WORD ="Admin123";//密码
private final String CLS_ID ="7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729";//cls_id
private final String DOMAIN ="";
private int count;
Server server =null;
public void utGrandReadData(){
System.out.print("*********************************");
System.out.print("************启动加载配置项*********");
System.out.print("*********************************");
final ConnectionInformation ci =new ConnectionInformation();
ci.setHost(LOCAL_HOST);
ci.setUser(USER_NAME);
ci.setPassword(PASS_WORD);
ci.setClsid(CLS_ID);
ci.setDomain(DOMAIN);
if (ci.getClsid() !=null ){
JISession session = JISession.createSession ( ci.getDomain (),ci.getUser (),ci.getPassword () );
session.setGlobalSocketTimeout ((int) System.currentTimeMillis());
session.useSessionSecurity(true);
server =new Server(ci,Executors.newSingleThreadScheduledExecutor());
}else if (ci.getProgId () !=null){
JISession session = JISession.createSession ( ci.getDomain (), ci.getUser (), ci.getPassword () );
session.setGlobalSocketTimeout ((int) System.currentTimeMillis());
session.useSessionSecurity(true);
server =new Server(ci,Executors.newSingleThreadScheduledExecutor());
}
try {
server.connect();
Group group = server.addGroup("VC");
Item item = group.addItem("k.k.k");
// Map items = group.addItems("Random.Real1",
// "Random.Real2", "Random.Real3", "Random.Real4");
dumpItem(item);
// for (Entry temp : items.entrySet()) {
// dumpItem(temp.getValue());
// }
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取监测点
* @param item
* @throws JIException
*/
private void dumpItem(Item item)throws JIException {
System.out.println("[" + (++count) +"],ItemName:[" + item.getId()
+"],value:" + item.read(true).getValue());
}
}
/**
* 使用线程来控制 opc client连接,优化运行机内存。(48小时测试内存无增长)
*/
public class ThreadUtgrad {
private Date date;//对象锁
private boolean flag =false;//控制唤醒或等待线程
public ThreadUtgrad() {
date =new Date();
}
public ThreadUtgrad(Date date){
this.date = date;
}
public void run() {
while(true){
synchronized(date){
if(flag){
try {
Thread.sleep(500);
}catch (InterruptedException e) {
e.printStackTrace();
}
date.notify();
flag =false;
}
}
}
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
class PrintMessageextends Thread{
@Override
public void run() {
UtgrandClient utgrandClient =new UtgrandClient();
while(true){
synchronized(date){
if(!flag){
try {
flag =true;
date.wait();
}catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("0.5秒的消息");
utgrandClient.utGrandReadData();
}
}
}
}
@PostConstruct
public void startUtgrandClient() {
Date date =new Date();
//打印5秒消息的线程
ThreadUtgrad threadUtgrad =new ThreadUtgrad(date);
PrintMessage printMessage = threadUtgrad.new PrintMessage();
printMessage.start();
threadUtgrad.run();
// //不影响打印线程的7秒消息线程
// new Thread(new Runnable(){
//
// @Override
// public void run() {
// while(true){
// try {
// Thread.sleep(7000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println("7秒的消息");
// }
//
// }
//
// }).start();
}
作者:MartinX_c56e
链接:https://www.jianshu.com/p/afb45f585731
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
opc 带有session的更多相关文章
- php中session原理及安全性问题
有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制 我们先简单的了解一些http的知识,从而理解该协议 ...
- ASP.NET中的Session怎么正确使用
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- session 安全相关
有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制.我们先简单的了解一些http的知识,从而理解该协议的无 ...
- php中session机制的详解
[补充]session_start()要放在php最前面,header()函数也要放在session_start()之后. [读了下面的文章转载的文章后自己的理解]: 1,通过phpinfo()函数可 ...
- ASP.NET中的Session怎么正确使用[转]
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...
- Session的工作机制详解和安全性问题(PHP实例讲解)
我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. ...
- 集群session的一致性
一. 何为session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分配一个唯一的会话标识(sessio ...
- 【译文】漫谈ASP.NET中的Session
最近这两天被一个Web Farm环境下的Session处理问题虐得很痛苦,网上到处找解决方案,在无意中翻看到这篇文章,感觉很不错,顺手查了一下,貌似没有现成的译文,于是一咬牙一跺脚把这篇文章翻译出来了 ...
- 【转】你必须了解的Session的本质
有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制.我们先简单的了解一些http的知识,从而理解该协议的无 ...
随机推荐
- SimpleThreadPool极简版
package com.dwz.concurrency.chapter13; import java.util.ArrayList; import java.util.LinkedList; impo ...
- web后端开发语言Java和PHP的比较
理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果,尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,支持 ...
- 从客户端中检测到有潜在危险的 request.form值
这里只说ASP.NET MVC的解决方法,ASP.NET已经不碰了. 给控制器加上[ValidateInput(false)]特性即可忽略含有HTML标记的内容. [HttpPost] [Valida ...
- Oracle12c-ADG搭建
实验环境: 角色 IP hostname CDB name db_unique_name pdb name 版本 主 192.168.0.115 Node11 cdb1 cdb_p pdb1 12.2 ...
- Django ManyToManyField.through_fields 和
示例: from django.db import models class Person(models.Model): name = models.CharField(max_length=50) ...
- jaxb生成cdata块
1.需要添加一个适配器: import javax.xml.bind.annotation.adapters.XmlAdapter; public class AdapterCDATA extends ...
- js原生ajax与jquery的ajax的用法区别
什么是ajax和原理? AJAX 是一种用于创建快速动态网页的技术. 通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据 XMLHttpRequest对象的基本属性: onre ...
- Codeforces Round #588 (Div. 2) D题【补题ING】
思路:先找出现次数>=2数.然后在取跑所有数,需要考虑一般情况(当一个人比另一个人的ai小且他们的与运算等于小的那个人的ai那么可以知道大的那个人必定强于ai小的那个人). 则可以用位运算实现判 ...
- 签名/加密_Java_hutool( 01 代码实现 )
本文档不讲解签名/加密相关的理论知识, 仅列出通过Java实现的方式. 待处理: Hutool含有很多工具的封装, 有时间需要好好研究一下(https://blog.csdn.net/moshowga ...
- 浏览器事件环(EventLoop)
1. 基础知识 1. js语言特点 1. js语言是单线程语言,主线程是单线程.如UI渲染,脚本加载是主线程任务. 2. js语言采用事件循环(EventLoop)机制. 2. 同步任务: 不被引擎挂 ...