码迷,mamicode.com
首页 > 数据库 > 详细

OPCServer Modbus使用和配置

时间:2016-05-07 18:06:19      阅读:1730      评论:0      收藏:0      [点我收藏+]

标签:

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

     

    技术分享

 

      打开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();
        }

    }
}

 

OPCServer Modbus使用和配置

标签:

原文地址:http://www.cnblogs.com/ike_li/p/5468658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!