使用 OPC Browser 加载 OPC Server 监测点
1,首先第一步,要连接OPC ,创建好 OPC对象。
/// <summary>
/// 连接OPC
/// </summary>
private string OPCIP=127.0.0.1;
private string OPCName=PCAuto.OPCServer;
public void Connect()
{
if (string.IsNullOrEmpty(OPCIP))
{
throw new ArgumentNullException("UaServer");
}
if (string.IsNullOrEmpty(OPCName))
{
throw new ArgumentNullException("UaServer");
}
if (CreateServer())
{
try
{
opcServer.Connect(OPCName, OPCIP);
}
catch (Exception ex)
{
MessageBox.Show("连接到OPC服务器失败!" + ex.Message);
}
}
m_IsConnected = true;
} /// <summary>
/// 创建OPC服务
/// </summary>
/// <returns></returns>
public bool CreateServer()
{
try
{
opcServer = new OPCServer();
}
catch (Exception ex)
{
MessageBox.Show("创建OPC服务出现异常:" + ex.Message);
return false;
}
return true;
}
2.窗体加载方法,我这里时winform 开发的程序。在窗体load事件加载 opc测点。使用 tree 控件。
/// <summary>
/// 测点扫描加载监测点树
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private TreeView treeView_opcItem;
private void ScanItem_Load(object sender, EventArgs e)
{
try
{
OpcDaClient opcDaClient = new OpcDaClient();
TreeNode node = new TreeNode();
OPCBrowser opcBrowser = opcDaClient.RecurBrowse();
opcDaClient.ShowInTreeView(opcBrowser, node);
treeView_opcItem.Nodes.Add(node);
TreeNodeCollection nodes = treeView_opcItem.Nodes;
GetChildNode(nodes);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
3.用到的子方法
/// <summary>
/// 创建opc节点浏览对象
/// </summary>
/// <returns></returns>
public OPCBrowser RecurBrowse()
{
try
{
return opcServer.CreateBrowser();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
/// <summary>
/// 展示OPC点号列表
/// </summary>
/// <param name="opcBrowser"></param>
/// <param name="node"></param>
public void ShowInTreeView(OPCBrowser opcBrowser, TreeNode node)
{
TreeNode treeNode = null;
opcBrowser.ShowBranches();
int count = opcBrowser.Count;
List<string> list = null;
if (opcBrowser.Count > 0)
{
list = new List<string>();
foreach (string item in opcBrowser)
{
list.Add(item);
}
foreach (string item2 in list)
{
treeNode = new TreeNode(item2);
treeNode.Tag = opcBrowser.GetItemID(item2);
node.Nodes.Add(treeNode);
opcBrowser.MoveDown(item2);
ShowInTreeView(opcBrowser, treeNode);
opcBrowser.MoveUp();
}
}
opcBrowser.ShowLeafs(Type.Missing);
int count2 = opcBrowser.Count;
foreach (string item3 in opcBrowser)
{
treeNode = new TreeNode(opcBrowser.GetItemID(item3));
treeNode.Tag = opcBrowser.GetItemID(item3);
node.Nodes.Add(treeNode);
}
}
4.获取当前节点下的子节点
private void GetChildNode(TreeNodeCollection nodes)
{
string empty = string.Empty;
foreach (TreeNode node in nodes)
{
empty = node.Text;
if (node.Nodes.Count == 0)
{
itemNameList.Add(node.Text);
}
GetChildNode(node.Nodes);
}
}
5.效果展示

使用 OPC Browser 加载 OPC Server 监测点的更多相关文章
- 不同网段无法加载ArcGIS Server发布服务解决方法
问题描述: ArcGIS Server 10发布的服务, (1)在相同网段的Desktop9.3和Engine 9.3程序下可以正常显示, (2)在不同网段Desktop9.3和Engine 9.3程 ...
- Cesium如何通过addImageryProvider方法加载SkylineGlobe Server发布的WMS服务
某某某单位用SkylineGlobeServer7版本发布了好些服务,然后让我们在Cesium里都加载进来展示. 其实只要符合OGC标准的,加进来还是很容易的. 示例代码如下: function te ...
- Electron Browser加载iframe(webview src属性)
browser或者webcontents 的高度与宽度比例对webview中src的页面结构也是有一定影响的
- ArcEngine中加载ArcGIS Server地图服务
代码如下: private void addMapServerLayer(object sender, EventArgs e) { IActiveView pActiveV ...
- 天地图API加载ArcGIS Server服务
发布的服务需要选择WMS功能 wmsLayer = new T.TileLayer.WMS("http://127.0.0.1:6080/arcgis/services/Demo/Defau ...
- Tomcat源码分析——SERVER.XML文件的加载与解析
前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...
- 加载MySQL、Oracle、SQL Server 2000、SQL Server 2005及以上版本 的加载数据库驱动程序
2018-11-04 20:00:59 开始 //getConnection(String url, String user, String password) //url:连接数据库的URL 3 ...
- 老调重弹:JDBC系列之<驱动加载原理全面解析) ----转
最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者 ...
- esri-leaflet入门教程(5)- 动态要素加载
esri-leaflet入门教程(5)- 动态要素加载 by 李远祥 在上一章节中已经说明了esr-leaflet是如何加载ArcGIS Server提供的各种服务,这些都是服务本身来决定的,API脚 ...
随机推荐
- Part 31 AngularJS page refresh problem
What is the issue : When you navigate to http://localhost/students, you will see list of students as ...
- JAVA学习(六)
今天先是把内存知识总结归纳地又学习了一遍,现在可以很清楚地描述JVM的内存是如何操作的了. 静态变量储存在方法区内存中,这个之前没有注意到,温故知新了. 如果一个引用是空的(就是指向null),那它在 ...
- 天冷了,任务栏养只猫吧「GitHub 热点速览 v.21.46」
作者:HelloGitHub-小鱼干 运动能带来热量,盘猫也是,RunCat_for_windows 是一只奔跑在任务栏的猫,一定能给你的电脑带来一丝冬日的温暖.当然送温暖的除了任务栏小猫咪之外,还有 ...
- Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现
Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...
- python接口之request测试:以json格式发送post请求,.json方法,查看响应结果的情况
json和dict python中的dict类型要转换为json格式的数据需要用到json库: import json <json> = json.dumps(<dict>) ...
- Java String 转成 二位数组
... package str; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; impo ...
- Svelte入门——Web Components实现跨框架组件复用
Svelte 是构建 Web 应用程序的一种新方法,推出后一直不温不火,没有继Angular.React和VUE成为第四大框架,但也没有失去热度,无人问津.造成这种情况很重要的一个原因是,Svelte ...
- Ubuntu 软件安装
apt 使用apt安装,需要sudo 一些命令: sudo apt-get install git deb deb软件安装方法: sudo dpkg -I xxxx.deb 我们在Windows下安装 ...
- vue项目中使用 SheetJS / js-xlsx 导出文件
1. npm install xlsx 2. 在App.vue 中引入xlsx import * as XLSX from 'xlsx'; // 数据导出导入所需要的依赖 3. 使用xlsx 3 ...
- 洛谷 P5233 - [JSOI2012]爱之项链(Polya 定理+递推)
洛谷题面传送门 首先很明显题目暗示我们先求出符合条件的戒指数量,再计算出由这些戒指能够构成的项链的个数,因此考虑分别计算它们.首先是计算符合条件的戒指数量,题目中"可以通过旋转重合的戒指视作 ...