使用C#開發OPC Server服務器源碼示例

1、須要的DLLhtml

首選將須要dll放置您的開發目錄下,本示例放在工程目錄下的bin\x86\debug目錄下服務器

 須要的dll以下圖:dom

 

2、添加引用函數

在VS的項目中添加對FKOPCSrvApi的引用測試

 

 

而後在源碼文件中添加 using FKOPCSrvApi;ui

 

 

3、OPC Server 接口開發this

(1)註冊OPC服務器url

OPCSvrHelper.RegisterOPCSrv(string path,string UUID,spa

string OPCServerName)debug

此函數爲靜態函數,只註冊一次便可,不用每次啓動軟件都註冊。

參數含義以下:

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 – 信號質量

四、注意事項

 (1)用VS新建的項目必須爲x86,不然在64位計算機會出現異常

(2)在測試時,若您的計算機沒有安裝組態軟件,可能須要首先安裝OPC國際組態提供的「OPC Core Components Redistributable」,本安裝包在源碼文件中附帶。

五、測試

 能夠用組態軟件直接測試,組態軟件新建OPC客戶端,搜索OPC服務器。若沒有組態軟件,能夠用咱們免費提供的OPC客戶端測試軟件,測試您新建的OPC服務器是否正確。

 下圖爲OPC客戶端軟件截圖:

 

 

OPC客戶端測試軟件使用方法:

(1)在「服務器」列表中找到您的新建的OPC服務器名,這裏名稱爲「MyOPCServer」;

(2)而後點擊「鏈接」按鈕;

(3)若成功的後,會在右側出現OPC組及OPCTag,雙擊Opc Tag,會將Tag添加到右側的監測窗口內,而且數據會實時變化。

(4)能夠在此軟件的左下側寫OPCTag的值進行測試

 

源碼:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-13465470625.7.MiRQWK&id=537936971499

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);
}
}


}
}

http://www.cnblogs.com/suifing/articles/6025382.html

相關文章
相關標籤/搜索