OPCServer Modbus使用和配置

一,安装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();
        }

    }
}
时间: 2024-10-27 00:38:02

OPCServer Modbus使用和配置的相关文章

IhyerDB modBus采集器配置.

近期查了一下ihyerDB-modbus采集器的相关配置,由于没有相关的modbus设备,于是今天上午根据网上的线索下载了Modbus Slave(modbus从站仿真器).笔记本也没有串口,于是下载了Virtual Serial Port Driver 7.2虚拟串口.一切准备就绪就开始仿真实验了. 1.下载Modbus Slave:http://down1.cr173.com/soft1/ModbusSlave.rar 2.下载Virtual Serial Port Driver 7.2:h

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

BA-siemens-insight在win7下如何配置opc接口

一.运行环境:win7(OPC接口在win_xp下配置需安装插件,不好意思没搞定,现在只有win7系统32位下的教程了) 由于OPC(OLE for Process Control)建立在Microsoft的COM(COmponent Model)基础上,并且OPC的远程通讯依赖Microsoft的DCOM(Distribute COM),安全方面则依赖Microsof的Windows安全设置. 通过网络相互通信,OPC Server(OPC服务端)和OPCClient(OPC客户端)所在的操作

modbus rtu 协议转DLT645-2007和DLT645-1997电表协议转换器定制,

现场会碰到现场数据为Modbus协议,但是后台系统为DLT645协议系统,本模块支持将工业ModbusRtu协议转换为电表国标协议DLT645协议,支持1997和2007俩种标准,只需要进行简单的配置,就可以实现Modbus 协议转DLT645协议,方便客户将modbus数据接入到645电表系统中. 有需要请联系: QQ:2315590764 技术支持邮箱:2315590764#qq.com modbus rtu 协议转DLT645-2007和DLT645-1997电表协议转换器定制,,布布扣,

EasyARM i.mx287学习笔记——通过modbus tcp控制GPIO

0 前言 本文使用freemodbus协议栈,在EasyARM i.mx287上实现了modbus tcp从机. 在该从机中定义了线圈寄存器.当中线圈寄存器地址较低的4位和EasyARM的P2.4至P2.5关联,通过modbus指令可控制GPIO的输出.本文改动自freemodbus 演示样例LINUXTCP.经过简单的改动也可用于其它Linux开发板. [相关博文] [EasyARM i.mx28学习笔记--文件IO方式操作GPIO] [EasyARM i.mx28学习笔记--安装和使用tft

MSP430WARE++的使用3:modbus模块的调用方法

MSP430WARE++的使用3:modbus模块的调用方法 MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设.本文将介绍modbus模块驱动程序的调用方法. 1.硬件原理图 使用modbus模块驱动程序需要与MSP430单片机的UART0端口相连接. 2.使用方法 a.加入驱动程序 选中modbus文件夹,右键点击"Exclude from Build"即可. modbus驱动程序由多个个文件组成,如下图所示.其中RSP1_config.hpp

OPC测试常用的OPCClient和OPCServer软件推荐

OPC测试常用的OPCClient和OPCServer软件推荐 董维康_MES专家  发布于:2013-04-30 各位在进行OPC通讯时,常会遇到两种情况: 1)使用一个OPCClient在同一台计算机上连接远程计算机上的多个OPCServer时,发现某个OPCServer是通畅的,但其他的OPCServer却无论如何都不通.不知该如何定位问题了? 2)多个厂家的OPCClient连接同一计算机上的OPCServer,发现有的OPCClient通了,有的不通,有的能获取数据,有的不能获取数据.

开放型Modbus/TCP 规范

修订版 1.0,1999 年3 月29 日Andy SwalesSchneider 电气公司[email protected]目录目录............................................................................................................................ 21.该规范的发展概况...............................................

我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)

我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp) 分类: [自动化]2007-07-19 10:04 34038人阅读 评论(38) 收藏 举报 vb嵌入式dostcp语言医疗 其实很早就想写写关于Modbus的开发历程,但牵扯项目较多,不同语言版本较多,头绪繁杂,一时不知从何写起.最近的医疗项目的通信部分,重新调整为Modbus协议,并且内容几乎涵盖了Modbus的方方面面(Rtu/Tcp,Slave/Client相关开发),所以更坚定了写Modbus信心,今天