C#开发OPC Server服务器的方法及过程是什么
OPC Server服务器服务器的开发比较繁琐,本示例采用C#提供了一种简单快速实现OPCServer的方法,已经在工程项目中应用,希望对大家有用。
1、需要的DLL
首选将需要dll放置您的开发目录下,本示例放在工程目录下的bin\x86\debug目录下
需要的dll如下图:
2、添加引用
在VS的项目中添加对FKOPCSrvApi的引用
然后在源码文件中添加 using FKOPCSrvApi;
3、OPC Server 接口开发
(1)注册OPC服务器
OPCSvrHelper.RegisterOPCSrv(string path,string UUID,
string OPCServerName)
此函数为静态函数,只注册一次即可,不用每次启动软件都注册。
参数含义如下:
l path – 为本exe的路径
l UUID – OPC服务器的唯一识别码,可自行设定
l OPCServerName – OPC服务器的名称
(2)启动OPC服务器
InitOPCServer(string UUID)
(3)创建OPC 组及OPC Tag
CreateTag(string groupName,string tagName,object defaultVal,bool isWriteable)
l groupName – OPC组名
l tagName – OPC Tag名
l defaultVal – OPC Tag的默认值
l isWriteable – 是否可写
(4)更新OPC Tag的值
UpDateTagVal(string groupName,string tagName,object val)
本函数可以实现对指定组名和Tag的值进行更新
l groupName – OPC组名
l tagName – OPC Tag名
l val – 更新的值
注意:若指定的groupName和tagName不存在,则会触发异常
(5)注销OPC服务器
OPCSvrHelper.UnRegisterOPCSrv(UUID, string OPCServerName)
静态函数
l UUID – OPC服务器的唯一识别码,可自行设定
l OPCServerName – OPC服务器的名称
(6)读取OPC Tag值
object ReadTag(string groupName,string tagName)
l groupName – OPC组名
l tagName – OPC Tag名
返回:object类型的值
注意:若指定的groupName和tagName不存在,则会触发异常
(7)删除OPC Tag
RemvoeTag(string groupName,string tagName)
l groupName – OPC组名
l tagName – OPC Tag名
(8)客户端写Tag值更新事件
事件名:TagWritedByClientEvt
事件原型:
delegate void TagWritedByClientDelegate(string TagName, Object Value, UInt32 ResultCode)
TagName -- OPC组名.OPCTag名
Value – 更新的值
ResultCode – 信号质量
4、注意事项
(1)用VS新建的项目必须为x86,否则在64位计算机会出现异常
(2)在测试时,若您的计算机没有安装组态软件,可能需要首先安装OPC国际组态提供的“OPC Core Components Redistributable”,本安装包在源码文件中附带。
5、测试
可以用组态软件直接测试,组态软件新建OPC客户端,搜索OPC服务器。若没有组态软件,可以用我们免费提供的OPC客户端测试软件,测试您新建的OPC服务器是否正确。
下图为OPC客户端软件截图:
OPC客户端测试软件使用方法:
(1)在“服务器”列表中找到您的新建的OPC服务器名,这里名称为“MyOPCServer”;
(2)然后点击“连接”按钮;
(3)若成功的后,会在右侧出现OPC组及OPCTag,双击Opc Tag,会将Tag添加到右侧的监测窗口内,并且数据会实时变化。
(4)可以在此软件的左下侧写OPCTag的值进行测试
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 FKOPCSrvApi;
namespace OPCSrvTest
{
public partial class Form1 : Form
{
OPCSvrHelper _myOPCSvrHelper = null;
Timer timer = new Timer();
bool opcStart = false;
string opcgroupname = "MyOPCSrvGroup";
//OPC组名
string opcServerName = "MyOPCServer2";
//OPC服务器名称
string UUID = "F61323FD-77CE-4AB6-930F-E3E6DFF8BBED";
//OPC服务器的唯一ID
public Form1()
{
InitializeComponent();
timer.Interval = 2000;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
/// summary>
/// 注册并启动OPC服务器,然后添加OPC组及OPC项
/// /summary>
/// param name="sender">
/param>
/// param name="e">
/param>
private void button_StartOPCSrv_Click(object sender, EventArgs e)
{
string path=System.Windows.Forms.Application.ExecutablePath;
//exe的路径
OPCSvrHelper.RegisterOPCSrv(path, UUID, opcServerName);
//注册OPC服务器
_myOPCSvrHelper = new OPCSvrHelper();
_myOPCSvrHelper.InitOPCServer(UUID);
//初始化启动OPC服务器
//注册OPC Tag值更新事件(由客户端写入)
_myOPCSvrHelper.TagWritedByClientEvt += new TagWritedByClientDelegate(_myOPCSvrHelper_TagWritedByClientEvt);
//添加OPC Tag
for (int i = 0;
i10;
i++)
{
string tagName = string.Format("MyTag{
0}
",i+1);
_myOPCSvrHelper.CreateTag(opcgroupname, tagName, "", true);
//创建OPC Tag
}
opcStart = true;
}
/// summary>
/// 客户端写OPC Tag值更新事件
/// /summary>
/// param name="TagName">
OPC组名.OPCTag名/param>
/// param name="Value">
更新的值/param>
/// param name="ResultCode">
信号质量/param>
void _myOPCSvrHelper_TagWritedByClientEvt(string TagName, object Value, uint ResultCode)
{
//throw new NotImplementedException();
this.Invoke((EventHandler)(delegate
{
label_Info.Text = string.Format("{
0}
值更新为{
1}
{
2}
", TagName, Value,DateTime.Now);
}
));
}
/// summary>
/// 定时更新Tag
/// /summary>
/// param name="sender">
/param>
/// param name="e">
/param>
void timer_Tick(object sender, EventArgs e)
{
//throw new NotImplementedException();
if (opcStart &
&
_myOPCSvrHelper != null)
{
for (int i = 0;
i 10;
i++)
{
string tagName = string.Format("MyTag{
0}
", i + 1);
Random rd = new Random();
object val = rd.Next(100);
_myOPCSvrHelper.UpDateTagVal(opcgroupname, tagName, val);
//更新OPC Tag
}
}
}
/// summary>
/// 注销OPC服务器
/// /summary>
/// param name="sender">
/param>
/// param name="e">
/param>
private void button_RemoveOPCSrv_Click(object sender, EventArgs e)
{
if(_myOPCSvrHelper != null)
{
OPCSvrHelper.UnRegisterOPCSrv(UUID, opcServerName);
}
}
/// summary>
/// 读取Tag的值
/// /summary>
/// param name="sender">
/param>
/// param name="e">
/param>
private void button_Read_Click(object sender, EventArgs e)
{
try
{
if(_myOPCSvrHelper != null)
{
object val = _myOPCSvrHelper.ReadTag(textBox_OPCGroupName.Text,textBox_TagName.Text);
MessageBox.Show(val.ToString());
}
}
catch (System.Exception err)
{
MessageBox.Show(err.Message);
}
}
}
}
感谢各位的阅读,以上就是“C#开发OPC Server服务器的方法及过程是什么”的内容了,通过以上内容的阐述,相信大家对C#开发OPC Server服务器的方法及过程是什么已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注网络,网络将为大家推送更多相关知识点的文章。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C#开发OPC Server服务器的方法及过程是什么
本文地址: https://pptw.com/jishu/651867.html
