C# 链接Kep进行读取数据

开发KEP需要用到OPCDAAuto.dll文件并且需要在C盘内注册此文件才能在VS中进行引用

点此下载

1、在C:\Windows\SysWOW64\下新建目录egs29oa,复制所有的dll到这个目录下

2、右键开始,CMD以管理员模式运行(Windows PowerShell (管理员)

3、键入cd \windows\syswow64

4、在cmd里键入regsvr32 egs29oa/OPCDAAuto.dll,回车,然后提示注册成功  

5、在VS中引用

using OPCAutomation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KepReadServer
{
    class Program
    {

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

        //列出所有OPC的名称
        List<string> OpcNames = new List<string>();

        static void Main(string[] args)
        {

            new Program().Start();


            Console.ReadLine();
          
        }


        /// <summary>
        /// OPC服务器
        /// 开始抓取OPC数据
        /// </summary>
        public void Start()
        {
            try
            {


                KepServer = new OPCServer();

                KepServer.Connect("Kepware.KEPServerEX.V6", "192.168.3.122");


                //判断连接状态
                if (KepServer.ServerState == (int)OPCServerState.OPCRunning)
                {
                    SendMsg("已连接到-" + KepServer.ServerName);
                     RecurBrowse();
                }
                else
                {
                    SendMsg("状态:" + KepServer.ServerState.ToString());
                    return;
                }

                KepGroups = KepServer.OPCGroups;

                Task.Factory.StartNew(CreateGroup);

                //this.GatherData = true;

            }
            catch (Exception e)
            {
                throw e;
            }


            Console.WriteLine();
        }











        /// <summary>
        /// 列出OPC服务器中所有节点
        /// </summary>
        / <param name="oPCBrowser"></param>
        public void RecurBrowse()
        {
            //展开分支

            Console.WriteLine("列出OPC服务器中所有节点");

            var oPCBrowser = KepServer.CreateBrowser();
            oPCBrowser.ShowBranches();
            //展开叶子
            oPCBrowser.ShowLeafs(true);

            Console.WriteLine("列出OPC服务器中所有节点" + oPCBrowser.Count + "个");
            foreach (object turn in oPCBrowser)
            {
                OpcNames.Add(turn.ToString()); 
                //Console.WriteLine(turn.ToString());
            }
        }




        /// <summary>
        /// 日志
        /// </summary>
        /// <param name="m"></param>
        private void SendMsg(string m)
        {
            Console.WriteLine(m);
            //LogHelper.WriteLog(m);
        }



        /// <summary>
        /// 创建组
        /// </summary>
        private void CreateGroup()
        {
            try
            {
                KepGroups = KepServer.OPCGroups;
                //KepGroup = KepGroups.Add("OpcGroup");
                KepGroup = KepGroups.Add("ST010");
                SetGroupProperty();
   
                KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);

                KepItems = KepGroup.OPCItems;
                AddOpcItem();
            }
            catch (Exception err)
            {
                SendMsg("枚举本地OPC创建组出现错误:" + err.Message);
            }
        }




        /// <summary>
        /// 设置组属性
        /// </summary>
        private void SetGroupProperty()
        {
            KepServer.OPCGroups.DefaultGroupIsActive = true;
            KepServer.OPCGroups.DefaultGroupDeadband = 0;
            KepGroup.UpdateRate = 3000;
            KepGroup.IsActive = true;
            KepGroup.IsSubscribed = true;
        }

        /// <summary>
        /// 添加需要监听的节点
        /// </summary>
        private void AddOpcItem()
        {

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

            //    if (OpcNames[i].Contains("_Slot"))
            //    {
            //        KepItems.AddItem(OpcNames[i], i);
            //    }
            //}

            KepItems.AddItem("Channel1.ST010._Slot", 0);
            
        }


        /// <summary>
        /// 每当项数据有变化时执行的事件
        /// </summary>
        /// <param name="TransactionID">处理ID</param>
        /// <param name="NumItems">项个数</param>
        /// <param name="ClientHandles">项客户端句柄</param>
        /// <param name="ItemValues">TAG值</param>
        /// <param name="Qualities">品质</param>
        /// <param name="TimeStamps">时间戳</param>
        private void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
        {
            try
            {
                for (int i = 1; i <= NumItems; i++)
                {

                    //string temp = string.Concat(OpcNames[Convert.ToInt32(ClientHandles.GetValue(i))] + "值改变:TAG" + ItemValues.GetValue(i) + "品质" + Qualities.GetValue(i));


                    string temp = string.Concat( "值改变:" + ClientHandles.GetValue(i), "-", ItemValues.GetValue(i), "-", Qualities.GetValue(i), "-", TimeStamps.GetValue(i));
                    SendMsg(temp);

                }

            }
            catch (Exception e)
            {
                SendMsg("KepGroup_DataChange" + e.Message);
            }
        } 





    }
}

 参考:

KEPServerEX 6使用_yuell102的博客-CSDN博客_kepserverex6使用手册

客户端C#读取opc数据_凋零的老树的博客-CSDN博客_c#读取opc数据

通过kepserver实现OPC数据读写的C#实例程序_dalong10的博客-CSDN博客_kepserver读取opc

C# 连接KepService进行PLC访问,读写。_biu~zhang~go的博客-CSDN博客

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kepserver是一款常用的OPC服务器软件,可以用于读取OPC实例C。 首先,我们需要安装Kepserver软件并进行相应的配置。打开Kepserver软件,通过添加设备的方式添加OPC实例C。在添加设备的过程中,需要输入OPC服务器的地址和端口号,以及相应的访问用户名和密码。确保这些信息填写正确,然后保存配置。 接下来,我们可以在Kepserver软件中创建一个通道(Channel)。通道是用于与外部设备进行通信的虚拟通道,我们可以选择不同的通信协议来与OPC实例C进行通信。在创建通道时,需要选择适当的通信协议,并设置好通道的相关参数,如通信超时时间等。 完成通道的创建后,我们可以创建一个设备(Device)。设备是指OPC服务器所代表的具体设备或系统,我们需要将其与前面创建的通道进行关联。在创建设备时,需要选择对应的OPC实例C作为设备的驱动程序,并设置相应的设备参数。 然后,我们可以创建标签(Tag)来读取数据。标签是用来与OPC实例C中的变量进行通信的对象。我们可以为每个需要读取的变量创建一个标签,并设置好相应的读取参数,如变量的名称、数据类型、读取间隔等。 最后,我们可以通过设置好的标签进行数据读取Kepserver会自动与OPC实例C建立连接,并读取相应的数据。我们可以通过编写相关的程序或脚本来调用Kepserver的API来读取数据读取到的数据可以根据程序的需要进行进一步的处理和分析。 通过以上步骤,我们可以成功地使用Kepserver读取OPC实例C中的数据。当然,在实际操作中还需要根据具体情况进行相应的配置和调试,确保整个读取过程能够正常进行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值