OPCServer Modbus使用和配置

一,安装KEPware.Enhanced.OPC.DDE.KEPServer。(PLC数据传送给KEPServer,开发的程序用OPCServer读KEPServer)

     

    

 

    设置ip地址后面是指的plc站号,此处必须和plc上站号对应。否则无法接收数据。

    

      打开quick client 查看传值情况

      

二.C#程序代码

   引用opcdaauto.dll

   在win7 64位下KepServer = new OPCServer()会出错的问题,

   检索COM 类工厂中 CLSID 为 <28e68f9a-8d75-11d1-8dc3-3c302a000000> 的组件时失败,原因是出现以下错误: 80040154

  1.一定要到C:\Windows\SysWOW64路径下打开cmd.exe运行命令文件(而不是在运行打开),注册“OPCDAAuto.dll” 输入命令: REGSVR32 OPCDAAuto.dll;即可

  2.编译工具目标要选择x86

   KepServer.Connect("KEPware.KEPServerEx.V4", "127.0.0.1");  此处ip地址是安装KEPware.Enhanced.OPC.DDE.KEPServer电脑的ip地址.

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OPCAutomation;
using System.Threading;


namespace SPCTest
{
    public partial class Form2 : Form
    {


        private OPCServer KepServer;
        private OPCGroups KepGroups;
        private OPCGroup KepGroup;

        private OPCItems KepItems;
        //轴承净重,注脂量,防尘盖压入深度,防尘盖平整度   压入OK/NG
        private OPCItem item1, item2, item3;

        public Form2()
        {
            InitializeComponent();
        }


        #region OPC Server
        private void KepServerLoad()
        {
            try
            {
                KepServer = new OPCServer();
                KepServer.Connect("KEPware.KEPServerEx.V4", "127.0.0.1");
                if (KepServer.ServerState == (int)OPCServerState.OPCRunning)
                {
                   // statusLabelConnectInfo.Text = "OPC Server连接成功";
                }
                else
                {
                   // statusLabelConnectInfo.Text = "OPC Server连接失败";
                    return;
                }
            }
            catch (Exception ex)
            {

               // statusLabelConnectInfo.Text = "OPC Server连接失败," + ex.Message;
                return;
            }

            KepGroups = KepServer.OPCGroups;
            Thread t1; // 开1个线程用于读取数据                 
            t1 = new Thread(new ThreadStart(KepProcess));
            t1.Start();

        }

        public void KepProcess()
        {
            //KepGroup = KepGroups.Add("Channel.Device.Group");
            KepGroup = KepGroups.Add("Channel1.Device1.Group");
            KepGroup.UpdateRate = 250;
            KepGroup.IsActive = true;
            KepGroup.IsSubscribed = true;
            //当KepGroup中数据发生改变的触发事件    
            KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
            KepItems = KepGroup.OPCItems;
            item1 = KepItems.AddItem("Channel1.Device1.A01", 1);
            item2 = KepItems.AddItem("Channel1.Device1.A02", 2);
            item3 = KepItems.AddItem("Channel1.Device1.A03", 3);


        }
      
        //当数据改变时触发的事件 
        public delegate void DelegateShowMessage(string str);
        
        public void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
        {
            string str = "";
            DelegateShowMessage show1 = new DelegateShowMessage(ShowMessage);
            for (int i = 1; i <= NumItems; i++)
            {
                if (ClientHandles.GetValue(i).Equals(1))
                {
                    str = "A01:" + ItemValues.GetValue(i).ToString();
                }

                if (ClientHandles.GetValue(i).Equals(2))
                {
                    str = "A02:" + ItemValues.GetValue(i).ToString();
                }

                if (ClientHandles.GetValue(i).Equals(3))
                {
                    str = "A03:" + ItemValues.GetValue(i).ToString();

                }
             
                BeginInvoke(show1, new string[] { str });
            }

         
          

        }

    
     
        public void ShowMessage(string str)
        {
            
            richTextBox1.AppendText(str+",");
          
        }

    
        #endregion

        private void Form2_Load(object sender, EventArgs e)
        {
            KepServerLoad();
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            KepServer.Disconnect();
        }

    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值