您现在的位置是:群英 > 开发技术 > 编程语言
C#开发OPC Server服务器的方法及过程是什么
Admin发表于 2022-11-01 17:32:461293 次浏览
这篇文章给大家介绍了“C#开发OPC Server服务器的方法及过程是什么”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“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;i<10;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服务器的方法及过程是什么已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注群英网络,群英网络将为大家推送更多相关知识点的文章。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-05-17 11:50:53 
摘要:本篇文章给大家带来的内容是关于html5的drag和drop的用法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
2021-11-12 17:02:16 
摘要:这篇文章给大家分享的是PHP里fopen生成文件出现中文乱码如何解决的方法。一般在php中会使用fopen进行生成文件,但是当文件名存在中文时保存文件会出现中文乱码,很多新手不知道该怎样解决,不必慌,解决这个问题并不难,有需要的朋友接下来一起跟随小编看看具体的解决方法吧。
2022-08-31 17:23:51 
摘要:​本文主要给大家介绍js是如何创建、删除、追加及替换元素节点的,希望对需要的朋友有所帮助!
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部