本代码是一个基于OPCAutomation的OPC连接程序,通过此程序可以连接OPC服务器并读取OPCItem的值。程序的主要功能包括:
- 连接到指定的OPC服务器
- 断开连接
- 读取指定OPCItem的值
- 定时读取OPCItem的值
- 暂停/继续读取OPCItem的值
程序使用了OPCAutomation库,在程序中实例化了OPCServer和OPCBrowser,通过OPCServer.Connect方法连接到指定的OPC服务器,并创建一个新的OPCGroup和OPCItem对象。OPCItem.Read方法可以获取到指定OPCItem的值。程序使用了Timer控件来定时读取OPCItem的值。
此程序仅提供基本的OPC连接和读取功能,如需扩展可以根据需要添加相应的代码。
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;
namespace OPC连接
{
public partial class Form1 : Form
{
private OPCGroup opcGroup;
private OPCItem opcItem;
public Form1()
{
InitializeComponent();
}
private OPCServer opcServer = new OPCServer();
private OPCBrowser opcBrowser = null;
private void ConnectOPCServer()
{
string ip = textBox1.Text.Trim();
string serverName = comboBox1.Text.Trim();
try
{
if ((OPCServerState)opcServer.ServerState == OPCServerState.OPCDisconnected)
{
opcServer.Connect(serverName, ip);
if ((OPCServerState)opcServer.ServerState == OPCServerState.OPCRunning)
{
opcBrowser = opcServer.CreateBrowser();
MessageBox.Show("连接成功!");
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void DisconnectOPCServer()
{
try
{
if ((OPCServerState)opcServer.ServerState == OPCServerState.OPCRunning)
{
opcServer.Disconnect();
opcGroup = null;
opcItem = null;
opcBrowser = null;
MessageBox.Show("断开成功!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
ConnectOPCServer();
}
private void button2_Click(object sender, EventArgs e)
{
DisconnectOPCServer();
}
private bool _stopReading = false;
private bool _pauseReading = false;
private void button3_Click(object sender, EventArgs e)
{
try
{
string opcItemName = textBox4.Text.Trim(); // 获取要读取的 OpcItem 名称
opcGroup = opcServer.OPCGroups.Add("NewGroup"); // 创建一个新的 OPCGroup
opcGroup.IsActive = true; // 激活该组
opcItem = opcGroup.OPCItems.AddItem(opcItemName, 1); // 添加一个 OPCItem
object value; // 声明一个用于储存 OPCItem 值的变量
object quality;
object timestamp;
opcItem.Read(1, out value, out quality, out timestamp); // 读取 OPCItem 值
textBox2.Text = value.ToString();
timer1.Interval = 500;
timer1.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (_stopReading) // 如果标志位为 true,则停止获取数据
{
timer1.Enabled = false;
return;
}
if (_pauseReading) // 如果标志位为 true,则暂停获取数据
{
return;
}
object value; // 声明一个用于储存 OPCItem 值的变量
object quality;
object timestamp;
opcItem.Read(1, out value, out quality, out timestamp); // 读取 OPCItem 值
textBox2.Text = value.ToString();
}
private void button4_Click(object sender, EventArgs e)
{
_pauseReading = !_pauseReading;
if (_pauseReading)
{
button4.Text = "继续获取数据";
}
else
{
button4.Text = "暂停获取数据";
}
}
}
}
实现效果,以连接组态王为例:
文章来源:https://www.toymoban.com/news/detail-811550.html
文章来源地址https://www.toymoban.com/news/detail-811550.html
到了这里,关于c#通过opcautomation获取opc服务器数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!