C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」

C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」想要了解更多,可以添加扣扣群143440558,免费交流,免费下载以上文件,免费了解更多编写OPC客户端,网上的资料一般是一上来就要求找OPCDAAuto.dll,其实我想说,用VS,那都是多此一举,当然,如果你是在需要,我也可以提供给您最新版OPCDAAuto.dll(v2.2.5.30)(https://download.csdn.net/download/wanghuaihu/11…

大家好,又见面了,我是你们的朋友全栈君。

想要了解更多,可以添加扣扣群143440558,免费交流,免费下载以上文件,免费了解更多

C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」

编写OPC客户端,网上的资料一般是一上来就要求找OPCDAAuto.dll,其实我想说,用VS,那都是多此一举,当然,如果你是在需要,我也可以提供给您最新版 OPCDAAuto.dll(v2.2.5.30)(https://download.csdn.net/download/wanghuaihu/11057994);

如果没有积分,无所谓,不要也罢,因为我们的vs中本来就有,为了方便大家理解学习,我新建项目为控制台程序,连接对象为Kepserver服务器,针对KepServer服务器,我已经配置好了,可以匿名登录,具体配置方法,可参看我的博文(https://blog.csdn.net/wanghuaihu/article/details/88903273)。

新建控制台程序后,引用右键选择添加引用,依次选择COM/OPC DA Automation Wrapper 2.02选中,确定。这样就把OPCAutomation 添加到了引用中了。

接着,写如下程序(所有程序如下,完整版本,稍作修改即可使用。):

using OPCAutomation;//需要手动添加
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;//需要手动添加
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{

    class Program
    {

        static void Main(string[] args)
        {

            OPCServer server = new OPCServer();

            //此处127.0.0.1字符串,为本地IP地址,也可别的电脑IP或者电脑名称;此处测试,就以本地IP测试;
            IPHostEntry host = Dns.GetHostEntry(“127.0.0.1”);

            //获取此电脑上的所有OPC服务器的ProgId,有了它,才能连接到OPC服务器。注意此处为一组OPC服务器集合,

            //而非单个,具体数量根据实际情况而定,当然,也可以是一个,我只是想说它是一个服务器的集合。
            object progIds = server.GetOPCServers(host.HostName);
            foreach (string progId in (Array)progIds)
            {

               //此处是获得单个progId,方便后面连接。
                server.Connect(progId);
            }

            //此处为常规设置,group中还有许多参数没有设置,我都采取了它的默认值,我没有特殊要求,所以不用改。
            OPCGroups groups = server.OPCGroups;
            OPCGroup group = groups.Add(“myGroup”);
            //此处必须修改,因为默认订阅功能为false;当然你也可以根据别的方式获取数据

            group.IsSubscribed = true;
            group.DataChange += Group_DataChange;

           //此处为设定需要的ItemIds,就是你需要订阅的哪些数据。

           //具体根据需求而来。

图1

            List<string> ItemIds= new List<string>()
                {

                “S7-1200.0-166.BOOL”,
                “S7-1200.0-166.BYTE”,
                “S7-1200.0-166.INT”,
                “S7-1200.0-166.WORD”,
                “S7-1200.0-166.REAL”,
                };

             //把需要订阅的项添加到group中。@

//此处由于个人的疏忽,导致各位同僚们的疑惑,我在此做出更正。谢谢 阿露法的指出。

//原为    for (int i = 0; i < progids.Count; i++)

//修改为    for (int i = 0; i < ItemIds.Count; i++)

//20191024091435
            for (int i = 0; i < ItemIds.Count; i++)
            {

                OPCItem myItem = group.OPCItems.AddItem(ItemIds[i], i);

            }

            Console.ReadKey();
        }

        private static void Group_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
        {

            //此处注意i是从1开始,因为getvalue没有0.下面输出分别为数据的ClientHandles(就是上文AddItem方法的第二个参数。),Itemvalue就是值,Qualities为质量,timestamps为时间。
            for (int i = 1; i < NumItems+1; i++)
            {

                Console.WriteLine(ClientHandles.GetValue(i).ToString() + “–” + ItemValues.GetValue(i).ToString() + “–” + Qualities.GetValue(i).ToString() + “–” + TimeStamps.GetValue(i).ToString());
            }
        }
    }
}

最终结果输出如下:

图2

 

这就是一个OPC客户端,我想应该是最简单的了。。。

 

2019.03.30增补:

想起前两天群友说,由于网络原因,OPC通讯中断了,断了之后重新连接了就不能自动恢复了,如果是这样,我们只需做小小的修改即可:

  private static void Group_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
        {

            //此处注意i是从1开始,因为getvalue没有0.下面输出分别为数据的ClientHandles(就是上文AddItem方法的第二个参数。),Itemvalue就是值,Qualities为质量,timestamps为时间。
            for (int i = 1; i < NumItems+1; i++)
            {

                try

                 {

                  Console.WriteLine(ClientHandles.GetValue(i).ToString() + “–” + ItemValues.GetValue(i).ToString() + “–” +       

                  Qualities.GetValue(i).ToString() + “–” + TimeStamps.GetValue(i).ToString());

                  }Catch(exception e)

                 {

                 }

            }
        }

 

想要了解更多,可以添加扣扣群143440558,免费交流,免费下载以上文件,免费了解更多

C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151313.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 用pycharm打包py程序_怎么打包python文件

    用pycharm打包py程序_怎么打包python文件使用Pycharm和Anancoda打包应用程序平时我们在运行Python项目时都需要在Pycharm中运行,因为里面或者Anancoda中已经导入了相应的包,库,配好了对应的环境。一般运行时不是太方便,特别是在给用户使用时,这就显得很麻烦了。所以我们需要将其单独打包出来并且能够运行。本文我以Pycharm和Anancoda打包我里面的一个计算器应用程序。开始吧!1.进入自己创建的环境安装pyinstaller首先进入命令行,win+r后输入cmd进入命令行。之后输入命令进入到自己创建的环境中,我

    2022年8月29日
    3
  • FFmpeg从入门到精通笔记之二

    FFmpeg从入门到精通笔记之二FFmpeg中常用的工具主要是ffmpeg、ffprobe、ffplay,它们分别用作多媒体的编解码工具、内容分析工具和播放器。ffmpeg常用命令ffmpeg的封装转换。ffmpeg的封装转换(转封装)功能包含在AVFormat模块中,通过libavformat库进行Mux和Demux操作.  *多媒体文件的格式有很多种,这些格式中的很多参数在Mux与Demux的操作参数中是公用的,…

    2022年6月26日
    29
  • linux下rar包的解压方法

    linux下rar包的解压方法一widonds下打包rar文件并上传二下载并安装rar软件三rar命令语法四具体例子五更多命令查看帮助一.widonds下打包rar文件并上传yuminstalllrzszrztest.rar二、下载并安装rar软件2.1下载mkdir-p/home/oldboy/toolscd/home/oldboy/toolswgethttp://www.rarlab.c

    2022年7月11日
    28
  • python调用数组里某一个元素_python中数组用法

    python调用数组里某一个元素_python中数组用法##Python数组注意:Python不具有对数组的内置支持,但是可以使用[Python列表](https://www.w3schools.com/python/python_lists.asp)代替。注意:此页面显示了如何将LISTS用作数组,但是,要在Python中使用数组,您必须导入一个库,例如[NumPylibrary](https://www.w3schools.com/python…

    2022年8月13日
    11
  • 传感器低功耗设计_压力传感器

    传感器低功耗设计_压力传感器无线温度传感器是常见的传感器,广泛用于各种需要温度检测的场合。对于有线供电的传感器而言,可以实时监测来保证温度在限定范围内。而对于电池供电的温度传感器而言,如果过于频繁的读取传感器,则显然会消耗很多电

    2022年8月5日
    4
  • db4o_8.0对象数据库官方文档翻译_学习笔记一[通俗易懂]

    db4o_8.0对象数据库官方文档翻译_学习笔记一[通俗易懂]Welcomedb4o is the native Java, .NET and Mono open source object database.db4o是本地的Java,.NET和Mono的开源对象数据库.This tutorial was written to get you started with db4o as quickly as possible. Before you

    2022年7月21日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号