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服务器的数据(最高效简洁版)「建议收藏」

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 运算放大器工作原理

    运算放大器工作原理运算放大器工作原理作者:何富和时间:2015-03-22来源:电子产品世界  运算放大器基本上可以算得上是模拟电路的基本需要了解的电路之一,而要想更好用好运放,透彻地了解运算放大器工作原理是无可避免,但是运放攻略太多,那不妨来试试这篇用电路图作为主线的文章来带你领略运算放大器的工作原理吧。本文引用地址:http://www.eepw.com.cn/article/271351.htm1.运算放

  • 用什么代替整流桥mb10f_kbl10整流桥

    用什么代替整流桥mb10f_kbl10整流桥编辑-ZMB10F是在MB10S系列基础上根据用户需求开发生产的新型号。从参数功能上看,MB10F就像是瘦身成功的MB10S,那么哪个比较好?ASEMI整流桥MB10S和MB10F详细对比:整流桥MB10S和MB10F的电气参数相同:正向电流(Io)为1A,反向电压为1000V,正向电压(VF)为1.0V,采用GPP芯片材料,其中有4个芯片,芯片尺寸为46MIL,其浪涌电流Ifsm为30A,漏电流(Ir)为5uA,工作温度为-40~+150℃,恢复时间(Trr)为500ns,有4条引线在里面

  • sbc音频编解码是什么_编解码算法工程师

    sbc音频编解码是什么_编解码算法工程师转自:https://blog.csdn.net/wzz4420381/article/details/48676921原作者:wzz4420381 1.SBC算法简介SBC是subbandcode的缩写,也可称为子带编码 在A2DP协议中,SBC算法是默认支持的 蓝牙SBC算法是一种以中等比特率传递高质量音频数据的低计算复杂度的音频编码算法1.1算法基本框图SB…

  • android中彻底退出App的办法「建议收藏」

    android中彻底退出App的办法「建议收藏」所谓的“彻底退出App”的含义是包括释放所有Appnew出来的东西,比如说某些正在运行的线程、定时器之类的。需要注意的是:finish()方法是作用于Activity,因此,即使finish了app的最后一个Activity,app在运行过程中new出来的那些线程什么的仍然有可能在运行(如果没有明显的代码导致它们退出的话)。因此,要所谓”彻底退出“,个人的看法是在最后一个finish()…

  • 呼叫中心坐席应用软件对企业有何帮助?[通俗易懂]

    呼叫中心坐席应用软件对企业有何帮助?[通俗易懂]企业纷纷建设属于自己的呼叫中心系统,主要是解决目前呼叫中心存在的一些问题,如:成本高、管理难、转化低、客户投诉、服务差等。下面我们就详细了解呼叫中心坐席应用软件能位企业解决什么问题。1、企业通过呼叫中心坐席应用软件可以帮助坐席人员减轻工作负担,充分提高客服人员的工作效率。用预先录制或TTS文本转语音技术,合成先进的IVR文件自助配置,IVR流程配置中用户可根据自己的业务需求设置。2、当客户来电话时,电脑屏幕上自动弹出客户的基本资料,同时显示该客户所有已发生的服务记录。…

  • 技术趋势:是什么让MVC悄然消失的?「建议收藏」

    技术趋势:是什么让MVC悄然消失的?

发表回复

您的电子邮箱地址不会被公开。

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