zoukankan      html  css  js  c++  java
  • 关于OPC Client 编写2

    最近在搞到一个OPC动态库OPCAutomation.dll,该动态库在http://www.kepware.com/可下载,下面介绍如何用C#进行OPC Client开发。

    1.新建C#应用程序,命名为OPC Client,将OPCAutomation.dll引用,如图。
    using OPCAutomation;


    2. 定义OPC的三个接口类OPCServer类、OPCGroup类和OPCItem类;

    OPCServer KepServer;
    OPCGroups KepGroups;
    OPCGroup KepGroup;
    OPCItems KepItems;
    OPCItem KepItem;

    3. 枚举网络OPC服务器

    枚举OPC服务器用到GetOPCServers()函数

    //获取计算机IP,计算机名称
    IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);
    if (IPHost.AddressList.Length > 0)
    {
    strHostIP = IPHost.AddressList[0].ToString();
    }
    else
    {
    return;
    }
    //通过IP来获取计算机名称,可用在局域网内

    IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP);
    strHostName = ipHostEntry.HostName.ToString();//获取本地计算机上的OPCServerName
    try
    {
    KepServer = new OPCServer();
    object serverList = KepServer.GetOPCServers(strHostName);


    //枚举网络所有OPC服务器并写入ComboBox控件


    foreach (string turn in (Array)serverList)
    {
    cmbServerName.Items.Add(turn);
    }


    cmbServerName.SelectedIndex = 0;
    btnConnServer.Enabled = true;
    }
    catch (Exception err)
    {
    MessageBox.Show("枚举本地OPC服务器出错:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
    4. 连接OPC服务器
    try
    {
    KepServer.Connect(remoteServerName, remoteServerIP);


    if (KepServer.ServerState == (int)OPCServerState.OPCRunning)
    {
    tsslServerState.Text = "已连接到-" + KepServer.ServerName + " ";
    }
    else
    {
    //这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档
    tsslServerState.Text = "状态:" + KepServer.ServerState.ToString() + " ";
    }

    }
    catch (Exception err)
    {
    MessageBox.Show("连接远程服务器出现错误:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    return false;
    }

    5. 创建组和列出OPC服务器中所有节点
    //创建组
    try
    {
    KepGroups = KepServer.OPCGroups;
    KepGroup = KepGroups.Add("OPCDOTNETGROUP");
    SetGroupProperty();
    KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
    KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete);
    KepItems = KepGroup.OPCItems;
    }
    catch (Exception err)
    {
    MessageBox.Show("创建组出现错误:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    return false;
    }

    //列出OPC服务器中所有节点


    //展开分支
    oPCBrowser.ShowBranches();
    //展开叶子
    oPCBrowser.ShowLeafs(true);
    foreach (object turn in oPCBrowser)
    {
    listBox1.Items.Add(turn.ToString());
    }

  • 相关阅读:
    PHP 基础复习 2018-06-21
    PHP 基础复习 2018-06-17
    php 基础复习 2018-06-20
    [Android] ImageView.ScaleType设置图解
    Android中滑屏实现----触摸滑屏以及Scroller类详解 .
    Android Scroller简单用法 --View滚动
    Android下如何理解onMeasure,onLayout的过程
    ( 转)从四分钟到两秒——谈谈客户端性能优化的一些最佳实践
    8种形式的Android Dialog使用举例
    Android加载图片导致内存溢出(Out of Memory异常)
  • 原文地址:https://www.cnblogs.com/zjoch/p/4333046.html
Copyright © 2011-2022 走看看