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. [cf578F]Mirror Box

    构造如下一张无向图: 1.点集大小为$(n+1)(m+1)$,即所有格点 2.边集大小为$nm$,即所有镜子所连结的两个格点 对于一个确定的镜子状态,即可确定上图,那么来考虑什么样的图是合法的 结论: ...

  2. [bzoj1037]生日聚会

    dp,用f[i][j][x][y]表示i个男孩,j个女孩,以i+j为结尾的子序列男-女最多为x,女-男最多为y的合法方案数,转移到f[i+1][j][x+1][max(y-1,0)]和f[i][j+1 ...

  3. watch异步操作

    异步操作: 1.ajax, 2.定时器 3.点击事件 4.数据库操作 特点:代码不等待,后续代码会继续执行. watch:{ //watch作用监测已经存在的数据 newVal 新值,oldVal 旧 ...

  4. layui增加转圈效果

    var loadix = layer.load(1, {shade: [0.1,'#fff']}); layer.close(loadix);

  5. 【Azure API 管理】在APIM 中添加 log-to-eventhub 策略,把 Request Body 信息全部记录在Event Hub中

    问题描述 根据文档 https://docs.azure.cn/zh-cn/api-management/api-management-howto-log-event-hubs, 可以将Azure A ...

  6. c语言用指针交换两个变量

    #include<stdio.h> #include<math.h> int main(){ void swap(int a,int b); void swapPointer( ...

  7. Codeforces 997D - Cycles in product(换根 dp)

    Codeforces 题面传送门 & 洛谷题面传送门 一种换根 dp 的做法. 首先碰到这类题目,我们很明显不能真的把图 \(G\) 建出来,因此我们需要观察一下图 \(G\) 有哪些性质.很 ...

  8. 洛谷 P5331 - [SNOI2019]通信(CDQ 分治优化建图+费用流)

    题面传送门 首先熟悉网络流的同学应该能一眼看出此题的建模方法: 将每个点拆成两个点 \(in_i,out_i\),连一条 \(S\to in_i\),容量为 \(1\) 费用为 \(0\) 的边 连一 ...

  9. Latex 文档格式化

    title: "Latex 文档格式化" author: 李龙翔 date: "Nov 22, 2019" subject: "Markdown&qu ...

  10. Spring-boot -Web开发

    1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自己编写业务代码: 文件名的功能 x ...