# OpcUaHelper
![Build status](https://img.shields.io/badge/Build-Success-green.svg) [![NuGet Status](https://img.shields.io/nuget/v/OpcUaHelper.svg)](https://www.nuget.org/packages/OpcUaHelper/) ![NuGet Download](https://img.shields.io/nuget/dt/OpcUaHelper.svg) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](http://shang.qq.com/wpa/qunwpa?idkey=2278cb9c2e0c04fc305c43e41acff940499a34007dfca9e83a7291e726f9c4e8) [![NetFramework](https://img.shields.io/badge/Language-C%23%207.0-orange.svg)](https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/) [![Visual Studio](https://img.shields.io/badge/Visual%20Studio-2017-red.svg)](https://www.visualstudio.com/zh-hans/) ![License status](https://img.shields.io/badge/License-LGPL3.0-yellow.svg) ![copyright status](https://img.shields.io/badge/CopyRight-Richard.Hu-brightgreen.svg)
一个通用的二次封装的opc ua客户端类库,基于.net 4.6.1创建,基于官方opc ua基金会跨平台库创建,方便的实现和OPC Server进行数据交互。本类库每个几个月就同步官方的类库。
## 免责声明
OpcUa相关的组件版权归OPC UA基金会所有,使用本库时请遵循OPC UA基金会的授权规则。
1. 非商用情况,如果你的项目仅仅是自己公司使用的,那么需要注册为OPC基金会的成员,否则,必须开源。
2. 商用都是需要额外授权的,请联系OPC基金会。
## FormBrowseServer
在开发客户端之前,需要使用本窗口来进行查看服务器的节点状态,因为在请求服务器的节点数据之前,必须知道节点的名称,而节点的名称可以通过这个窗口获取。以下演示实例化操作
```
OpcUaHelper.Forms.FormBrowseServer formBrowseServer = new Forms.FormBrowseServer( );
formBrowseServer.ShowDialog( );
```
当然你可以固定住这个地址,传入地址即可,此处为示例:
```
OpcUaHelper.Forms.FormBrowseServer formBrowseServer = new Forms.FormBrowseServer( "opc.tcp://127.0.0.1:62541/SharpNodeSettings/OpcUaServer" );
formBrowseServer.ShowDialog( );
```
界面效果如下,包含了节点的查看,订阅操作,双击值表格,还可以修改服务器的值(如果这个节点支持修改的话),查看节点的信息:
![Picture](https://raw.githubusercontent.com/dathlin/OpcUaHelper/master/Imgs/Monitor.png)
## Server Prepare
如果你没有opc ua的服务器的话,可以参照本示例的服务器,本示例的服务器是项目 [SharpNodeSettings](https://github.com/dathlin/SharpNodeSettings) 的示例。可以直接下载这个项目运行服务器软件。
或者选择在线的客户端测试: opc.tcp://118.24.36.220:62547/DataAccessServer
## OpcUaClient
实例化操作
```
OpcUaClient m_OpcUaClient = new OpcUaClient();
```
设置匿名连接
```
m_OpcUaClient.UserIdentity = new UserIdentity( new AnonymousIdentityToken( ) );
```
设置用户名连接
```
m_OpcUaClient.UserIdentity = new UserIdentity( "user", "password" );
```
使用证书连接
```
X509Certificate2 certificate = new X509Certificate2( "[证书的路径]", "[密钥]", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable );
m_OpcUaClient.UserIdentity = new UserIdentity( certificate );
```
设置完连接的权限之后,就可以真正的启动连接操作了,连接的操作必须要放到try...catch...之前,必须使用async标记方法
```
private async void button1_Click( object sender, EventArgs e )
{
// connect to server, this is a sample
try
{
await m_OpcUaClient.ConnectServer( "opc.tcp://127.0.0.1:62541/SharpNodeSettings/OpcUaServer" );
}
catch (Exception ex)
{
ClientUtils.HandleException( "Connected Failed", ex );
}
}
```
### Read/Write Node
如果我们想要读取上图节点浏览器的温度数据,节点字符串为
```
ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/温度
```
类型为Int16, 所以我们使用下面的方法读取
```
try
{
short value = m_OpcUaClient.ReadNode<short>( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/温度" );
}
catch(Exception ex)
{
ClientUtils.HandleException( this.Text, ex );
}
```
你也可以使用异步读取,只是外面的方法上需要使用async标记
```
try
{
short value = await m_OpcUaClient.ReadNodeAsync<short>( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/温度" );
}
catch (Exception ex)
{
ClientUtils.HandleException( this.Text, ex );
}
```
接下来写入节点操作,如果该节点的权限不支持写的话,就会触发异常
```
try
{
m_OpcUaClient.WriteNode( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/温度", (short)123 );
}
catch (Exception ex)
{
ClientUtils.HandleException( this.Text, ex );
}
```
批量读取的操作,分为类型不一致和类型一致两种操作,下面都做个示例
```
try
{
// 添加所有的读取的节点,此处的示例是类型不一致的情况
List<NodeId> nodeIds = new List<NodeId>( );
nodeIds.Add( new NodeId( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/温度" ) );
nodeIds.Add( new NodeId( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/风俗" ) );
nodeIds.Add( new NodeId( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/转速" ) );
nodeIds.Add( new NodeId( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/机器人关节" ) );
nodeIds.Add( new NodeId( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/cvsdf" ) );
nodeIds.Add( new NodeId( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/条码" ) );
nodeIds.Add( new NodeId( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/开关量" ) );
// dataValues按顺序定义的值,每个值里面需要重新判断类型
List<DataValue> dataValues = m_OpcUaClient.ReadNodes( nodeIds.ToArray() );
// 如果你批量读取的值的类型都是一样的,比如float,那么有简便的方式
List<string> tags = new List<string>( );
tags.Add( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/风俗" );
tags.Add( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/转速" );
// 按照顺序定义的值
List<float> values = m_OpcUaClient.ReadNodes<float>( tags.ToArray() );
}
catch (Exception ex)
{
ClientUtils.HandleException( this.Text, ex );
}
```
批量写入的操作如下:
```
try
{
// 此处演示写入一个short,2个float类型的数据批量写入操作
bool success = m_OpcUaClient.WriteNodes( new string[] {
"ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/温度",
"ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/风俗",
"ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/转速"},
new object[] {
(short)1234,
123.456f,
123f
} );
if (success)
{
// 写入成功
}
else
{
// 写入失败,一个失败即为失败
}
}
catch (Exception ex)
{
ClientUtils.HandleException( this.Text, ex );
}
```
### Read History
```
try
{
// 此处演示读取历史数据的操作,读取8月18日12点到13点的数据,如果想要读取成功,该节点是支持历史记录的
List<float> values = m_OpcUaClient.ReadHistoryRawDataValues<float>( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/转速",
new DateTime( 2018, 8, 18, 12, 0, 0 ), new DateTime( 2018, 8, 18, 13, 0, 0 ) ).ToList( );
// 列表数据可用于显示曲线之类的操作
}
catch (Exception ex)
{
ClientUtils.HandleException( this.Text, ex );
}
```
### Read Attribute
本类库支持读取一个节点的相关的所有的属性,主要包含了值,描述,名称,权限等级,等等操作
```
try
{
OpcNodeAttribute[] nodeAttributes = m_OpcUaClient.ReadNoteAttributes( "ns=2;s=Devices/分厂一/车间二/ModbusTcp客户端/温度" );
foreach (var item in nodeAttributes)
{
Console.Write( string.Format( "{0,-30}", item.Name )
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
opc Client OPC Server/OPCClient OPCServer 客户端/服务端程序/kepserver源码 1、有使用java开发opc client 源码 2、c++开发 opc server、opc client源码 3、满足数据采集的opc da协议、opc ua协议 有源码,有封装好的工具,供大家使用
资源详情
资源评论
资源推荐
收起资源包目录
opc Client OPC Server/OPCClient OPCServer 客户端/服务端程序/kepserver源码 (144个子文件)
packages.config 7KB
packages.config 7KB
App.config 2KB
app.config 929B
App.config 184B
App.config 184B
OpcUaClient.cs 48KB
ClientUtils.cs 47KB
ReferenceNodeManager.cs 46KB
BrowseTreeCtrl.cs 45KB
FormBrowseServer.cs 44KB
FormUtils.cs 39KB
FormBrowseServer.designer.cs 24KB
ReferenceServerUtils.cs 18KB
FilterDeclaration.cs 16KB
Browser.cs 15KB
Form1.Designer.cs 14KB
Form1.cs 13KB
Resources.Designer.cs 11KB
FormConnectSelect.Designer.cs 11KB
ReferenceServer.cs 11KB
DiscoverServerDlg.cs 8KB
DiscoverServerDlg.designer.cs 8KB
ExceptionDlg.cs 7KB
ExceptionDlg.designer.cs 7KB
Resources.Designer.cs 3KB
Resources.Designer.cs 3KB
Resources.Designer.cs 3KB
ReferenceServerConfiguration.cs 2KB
FormConnectSelect.cs 2KB
Namespaces.cs 2KB
Program.cs 2KB
OpcUaStatusEventArgs.cs 2KB
TreeViewEx.cs 1KB
AssemblyInfo.cs 1KB
AssemblyInfo.cs 1KB
AssemblyInfo.cs 1KB
AssemblyInfo.cs 1KB
Program.cs 1KB
Settings.Designer.cs 1KB
Settings.Designer.cs 1KB
Settings.Designer.cs 1KB
Program.cs 542B
Program.cs 513B
SampleUse.cs 193B
OpcUaHelper.csproj 23KB
OpcUaHelper.Demo.csproj 20KB
OpcUaServerSample.csproj 4KB
OpcUaHelper.Tool.csproj 3KB
OpcUaHelper.Standard.csproj 2KB
OpcUaHelper.NetCoreDemo.csproj 469B
Opc.Ua.Core.dll 5.46MB
BouncyCastle.Crypto.dll 2.44MB
Newtonsoft.Json.dll 639KB
System.Reflection.Metadata.dll 442KB
Opc.Ua.Server.dll 359KB
Microsoft.AspNetCore.Server.Kestrel.dll 279KB
System.Net.Http.dll 259KB
System.Collections.Immutable.dll 177KB
Microsoft.AspNetCore.Hosting.dll 110KB
System.Numerics.Vectors.dll 109KB
Opc.Ua.ServerControls.dll 92KB
Microsoft.AspNetCore.Http.dll 80KB
Microsoft.AspNetCore.WebUtilities.dll 67KB
Microsoft.AspNetCore.Http.Abstractions.dll 65KB
Microsoft.Net.Http.Headers.dll 65KB
System.Text.Encodings.Web.dll 63KB
Opc.Ua.Configuration.dll 61KB
Microsoft.Extensions.DependencyInjection.dll 44KB
Microsoft.Extensions.Logging.Abstractions.dll 43KB
Microsoft.Extensions.FileSystemGlobbing.dll 38KB
System.Diagnostics.DiagnosticSource.dll 35KB
Microsoft.Extensions.DependencyInjection.Abstractions.dll 34KB
System.Runtime.InteropServices.RuntimeInformation.dll 32KB
Microsoft.Extensions.FileProviders.Physical.dll 31KB
Microsoft.AspNetCore.Http.Features.dll 30KB
Microsoft.Extensions.Primitives.dll 28KB
System.Buffers.dll 27KB
System.Threading.Tasks.Extensions.dll 25KB
Microsoft.Extensions.Configuration.dll 24KB
Microsoft.AspNetCore.Server.Kestrel.Https.dll 22KB
Microsoft.Extensions.Options.dll 21KB
System.Runtime.CompilerServices.Unsafe.dll 20KB
Microsoft.AspNetCore.Hosting.Abstractions.dll 20KB
Microsoft.Extensions.Configuration.EnvironmentVariables.dll 19KB
Microsoft.Extensions.Configuration.Abstractions.dll 19KB
Microsoft.Extensions.Logging.dll 18KB
Microsoft.Extensions.FileProviders.Abstractions.dll 18KB
Microsoft.Extensions.ObjectPool.dll 17KB
Microsoft.Extensions.PlatformAbstractions.dll 16KB
Microsoft.AspNetCore.Hosting.Server.Abstractions.dll 15KB
Opc.Ua.CertificateGenerator.exe 1.09MB
Opc.Ua.CertificateGenerator.exe 1.09MB
loading.gif 2KB
.gitattributes 2KB
.gitignore 4KB
UserInterfaceEditor_5845.ico 10KB
RegistryEditor_5838.ico 10KB
WindowsForm_817.ico 10KB
ClassIcon.ico 5KB
共 144 条
- 1
- 2
戒酒的李白丶丶
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
- (源码)基于Java和MySQL的学生信息管理系统.zip
- (源码)基于ASP.NET Core的零售供应链管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1