栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

wincc数据opc上传mysql

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

wincc数据opc上传mysql

C#通过opc读取wincc数据的例子

【核心代码】

using OPCAutomation;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Net;

using System.Text;

using System.Windows.Forms;

namespace OPCDemo

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

#region 私有变量

/// 

/// OPCServer Object

/// 

OPCServer KepServer;

/// 

/// OPCGroups Object

/// 

OPCGroups KepGroups;

/// 

/// OPCGroup Object

/// 

OPCGroup KepGroup;

/// 

/// OPCItems Object

/// 

OPCItems KepItems;

/// 

/// OPCItem Object

/// 

OPCItem[] KepItem;

/// 

/// 主机IP

/// 

string strHostIP = "";

/// 

/// 主机名称

/// 

string strHostName = "";

/// 

/// 连接状态

/// 

bool opc_connected = false;

/// 

/// 客户端句柄

/// 

int itmHandleClient = 0;

/// 

/// 服务端句柄

/// 

int itmHandleServer = 0;

#endregion

#region 方法

/// 

/// 枚举本地OPC服务器

/// 

private void GetLocalServer()

{

//获取本地计算机IP,计算机名称

IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);

if (IPHost.AddressList.Length > 0)

{

strHostIP = IPHost.AddressList[0].ToString();

}

else

{

return;

}

//通过IP来获取计算机名称,可用在局域网内

IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP);

strHostName = ipHostEntry.HostName.ToString();

//获取本地计算机上的OPCServerName

try

{

KepServer = new OPCServer();

object serverList = KepServer.GetOPCServers(strHostName);

foreach (string turn in (Array)serverList)

{

cmbServerName.Items.Add(turn);

}

cmbServerName.SelectedIndex = 0;

// btnConnServer.Enabled = true;

}

catch (Exception err)

{

MessageBox.Show("枚举本地OPC服务器出错:" err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

}

/// 

/// 设置组属性

/// 

private void SetGroupProperty()

{

KepServer.OPCGroups.DefaultGroupIsActive = true;

KepServer.OPCGroups.DefaultGroupDeadband = 0;

KepServer.OPCGroups.DefaultGroupUpdateRate = 200;

KepGroup.UpdateRate = 150;

KepGroup.IsActive = true;

KepGroup.IsSubscribed = true;//使用订阅功能

}

private void Form1_Load(object sender, EventArgs e)

{

KepItem = new OPCItem[4];

GetLocalServer();

}

/// 

/// 每当项数据有变化时执行的事件

/// 

/// 处理ID

/// 项个数

/// 项客户端句柄

/// TAG值

/// 品质

/// 时间戳

void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)

{

//为了测试,所以加了控制台的输出,来查看事物ID号

//Console.WriteLine("********" TransactionID.ToString() "*********");

for (int i = 1; i <= NumItems; i )

{

MessageBox.Show(ClientHandles.GetValue(i).ToString() " _ " ItemValues.GetValue(i).ToString());

//Console.WriteLine("********" ItemValues.GetValue(i).ToString() "*********");

//this.txtTagValue.Text = ItemValues.GetValue(i).ToString();

//this.txtQualities.Text = Qualities.GetValue(i).ToString();

//this.txtTimeStamps.Text = TimeStamps.GetValue(i).ToString();

}

}

/// 写入TAG值时执行的事件

/// 

/// 

/// 

/// 

/// 

void KepGroup_AsyncWriteComplete(int TransactionID, int NumItems, ref Array ClientHandles, ref Array Errors)

{

}

/// 

/// 创建组

/// 

private bool CreateGroup()

{

try

{

KepGroups = KepServer.OPCGroups;

KepGroup = KepGroups.Add("ceshi");

SetGroupProperty();

KepGroup.DataChange = new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);

KepGroup.AsyncWriteComplete = new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete);

//添加组成员

{

KepItems = KepGroup.OPCItems;

KepItem[0] = KepItems.AddItem("test2_bool",0);

KepItem[1] = KepItems.AddItem("test1_int", 1);

}

}

catch (Exception err)

{

MessageBox.Show("创建组出现错误:" err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return false;

}

return true;

}

/// 

/// 列出OPC服务器中所有节点

/// 

/// 

private void RecurBrowse(OPCBrowser oPCBrowser)

{

//展开分支

oPCBrowser.ShowBranches();

//展开叶子

oPCBrowser.ShowLeafs(true);

foreach (object turn in oPCBrowser)

{

listBox1.Items.Add(turn.ToString());

}

}

/// 

/// 连接OPC服务器

/// 

/// OPCServerIP

/// OPCServer名称

private bool ConnectRemoteServer(string remoteServerIP, string remoteServerName)

{

try

{

KepServer.Connect(remoteServerName, remoteServerIP);

if (KepServer.ServerState == (int)OPCServerState.OPCRunning)

{

lbl1.Text = "已连接到-" KepServer.ServerName "   ";

}

else

{

//这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档

lbl1.Text = "状态:" KepServer.ServerState.ToString() "   ";

}

}

catch (Exception err)

{

MessageBox.Show("连接远程服务器出现错误:" err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);

return false;

}

return true;

}

private void btnConnLocalServer_Click_1(object sender, EventArgs e)

{

try

{

// OPC.SimaticHMI.CoRtHmiRTm.1

// OPCServer.WinCC.1

if (!ConnectRemoteServer("127.0.0.1", txtConStr.Text))

{

return;

}

opc_connected = true;

RecurBrowse(KepServer.CreateBrowser());

if (!CreateGroup())

{

MessageBox.Show("创建组失败!");

return;

}

}

catch (Exception err)

{

MessageBox.Show("初始化出错:" err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

if (!opc_connected)

{

return;

}

if (KepGroup != null)

{

KepGroup.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);

}

if (KepServer != null)

{

KepServer.Disconnect();

KepServer = null;

}

opc_connected = false;

}

private void bntWrite_Click(object sender, EventArgs e)

{

Random rd = new Random();

KepItem[1].Write(rd.Next(100, 500));

}

}

}

#endregion

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号