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 监测点的更多相关文章

  1. 不同网段无法加载ArcGIS Server发布服务解决方法

    问题描述: ArcGIS Server 10发布的服务, (1)在相同网段的Desktop9.3和Engine 9.3程序下可以正常显示, (2)在不同网段Desktop9.3和Engine 9.3程 ...

  2. Cesium如何通过addImageryProvider方法加载SkylineGlobe Server发布的WMS服务

    某某某单位用SkylineGlobeServer7版本发布了好些服务,然后让我们在Cesium里都加载进来展示. 其实只要符合OGC标准的,加进来还是很容易的. 示例代码如下: function te ...

  3. Electron Browser加载iframe(webview src属性)

    browser或者webcontents 的高度与宽度比例对webview中src的页面结构也是有一定影响的

  4. ArcEngine中加载ArcGIS Server地图服务

    代码如下: private void addMapServerLayer(object sender, EventArgs e)  {             IActiveView pActiveV ...

  5. 天地图API加载ArcGIS Server服务

    发布的服务需要选择WMS功能 wmsLayer = new T.TileLayer.WMS("http://127.0.0.1:6080/arcgis/services/Demo/Defau ...

  6. Tomcat源码分析——SERVER.XML文件的加载与解析

    前言 作为Java程序员,对于Tomcat的server.xml想必都不陌生.本文基于Tomcat7.0的Java源码,对server.xml文件是如何加载和解析的进行分析. 加载 server.xm ...

  7. 加载MySQL、Oracle、SQL Server 2000、SQL Server 2005及以上版本 的加载数据库驱动程序

    2018-11-04  20:00:59 开始 //getConnection(String url, String user, String password) //url:连接数据库的URL 3 ...

  8. 老调重弹:JDBC系列之<驱动加载原理全面解析) ----转

      最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者 ...

  9. esri-leaflet入门教程(5)- 动态要素加载

    esri-leaflet入门教程(5)- 动态要素加载 by 李远祥 在上一章节中已经说明了esr-leaflet是如何加载ArcGIS Server提供的各种服务,这些都是服务本身来决定的,API脚 ...

随机推荐

  1. FZU ICPC 2020 寒假训练 5 —— 排序

    P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...

  2. 编解码再进化:Ali266 与下一代视频技术

    过去的一年见证了人类百年不遇的大事记,也见证了多种视频应用的厚积薄发.而因此所带来的视频数据量的爆发式增长更加加剧了对高效编解码这样的底层硬核技术的急迫需求. 新视频编解码标准 VVC 定稿不久之后, ...

  3. CSS学习笔记:flex布局

    目录 一.Flex布局简介 1. Flex布局的主要作用 2. Flex布局应用场景 二.Flex布局的使用 1. Flex布局的两种相关元素 2. 父项属性 2.1 flex- direction ...

  4. redis集群安装搭建

    vi redis-6379.conf   #包含通用配置 include "/usr/local/redis/conf/redis-common.conf" pidfile &qu ...

  5. 「3dmax」快速配置3DMax

    3DMax学习 1.0.认识3dmax 3dmax(3D Studio Max),版权Autodesk公司持有.是基于PC系统的三维动画渲染和制作软件,主要用于模型构建和骨骼动画制作.行业使用分布广泛 ...

  6. Unity Ioc 类型初始值设定项引发异常,The type name or alias SqlServer could not be resolved. Please check your configuration file and verify this type name.

    先看一下unity的配置信息 <unity> <typeAliases> <typeAlias alias="IDatabase" type=&quo ...

  7. [gym102832J]Abstract Painting

    考虑每一个圆即对应于区间$[x_{i}-r_{i},x_{i}+r_{i}]$,可以看作对于每一个区间,要求所有右端点严格比其小的区间不严格包含左端点 用$f_{i}$表示仅考虑右端点不超过$i$的区 ...

  8. [luogu2303]Longge的问题

    1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 ll n,ans; 5 ll phi(l ...

  9. 【TcaplusDB知识库】如何部署TcaplusDB Local 版

    [TcaplusDB知识库]部署TcaplusDB Local 版的准备操作 1. 版本介绍 TcaplusDB Local版,是为用户提供的一个满足本地开发调试的版本(基于Docker部署的可下载版 ...

  10. 回顾Servlet开发

    1.建立的文件 2.servlet package com.shao.servlet; import javax.servlet.ServletException; import javax.serv ...