Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Version>10.0.1</Version>
<Version>10.0.2</Version>
<RootNamespace>BootstrapBlazor.OpcDa</RootNamespace>
</PropertyGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
namespace BootstrapBlazor.OpcDa;

/// <summary>
/// 扩展方法类
/// <para lang="zh">扩展方法类</para>
/// <para lang="en">Extension methods</para>
/// </summary>
internal static class Extensions
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,44 @@
// Website: https://www.blazor.zone or https://argozhang.github.io/

using BootstrapBlazor.OpcDa;
using Microsoft.Extensions.DependencyInjection.Extensions;
using System.Runtime.Versioning;

namespace Microsoft.Extensions.DependencyInjection;

/// <summary>
/// OpcDaServer 服务扩展类
/// <para lang="zh">OpcDaClient 服务扩展类</para>
/// <para lang="en">OpcDaClient service extension class</para>
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// 增加 OpcDaServer 操作服务
/// <para lang="zh">增加 OpcDaClient 操作服务</para>
/// <para lang="en">Adds the OpcDa client service</para>
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
[SupportedOSPlatform("windows")]
public static IServiceCollection AddOpcDaClient(this IServiceCollection services)
{
services.TryAddSingleton<OpcDaClient>();
services.TryAddSingleton<IOpcDaClient>(provider => provider.GetRequiredService<OpcDaClient>());
return services;
}

/// <summary>
/// <para lang="zh">增加 OpcDaClient 操作服务</para>
/// <para lang="en">Adds the OpcDa client service</para>
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
[Obsolete("Use AddOpcDaClient instead.")]
[SupportedOSPlatform("windows")]
public static IServiceCollection AddOpcDaServer(this IServiceCollection services)
{
services.AddSingleton<IOpcDaServer, OpcDaServer>();
services.TryAddSingleton<OpcDaServer>();
services.TryAddSingleton<IOpcDaClient>(provider => provider.GetRequiredService<OpcDaServer>());
services.TryAddSingleton<IOpcDaServer>(provider => provider.GetRequiredService<OpcDaServer>());
return services;
}
}
89 changes: 89 additions & 0 deletions src/extensions/BootstrapBlazor.OpcDa/IOpcDaClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// Website: https://www.blazor.zone or https://argozhang.github.io/

namespace BootstrapBlazor.OpcDa;

/// <summary>
/// <para lang="zh">OpcDa 客户端接口</para>
/// <para lang="en">OpcDa client interface</para>
/// </summary>
public interface IOpcDaClient : IDisposable
{
/// <summary>
/// <para lang="zh">获得 OPC Server 是否已连接</para>
/// <para lang="en">Gets whether the client is connected to the OPC Server</para>
/// </summary>
bool IsConnected { get; }

/// <summary>
/// <para lang="zh">获得 OPC Server 名称</para>
/// <para lang="en">Gets the OPC Server name</para>
/// </summary>
string? ServerName { get; }

/// <summary>
/// <para lang="zh">连接到 OPC Server</para>
/// <para lang="en">Connects to an OPC Server</para>
/// </summary>
/// <param name="serverName"></param>
/// <returns></returns>
bool Connect(string serverName);

/// <summary>
/// <para lang="zh">断开当前连接</para>
/// <para lang="en">Disconnects the current connection</para>
/// </summary>
void Disconnect();

/// <summary>
/// <para lang="zh">取消订阅</para>
/// <para lang="en">Cancels a subscription</para>
/// </summary>
/// <param name="subscription"></param>
void CancelSubscription(IOpcSubscription subscription);

/// <summary>
/// <para lang="zh">创建订阅</para>
/// <para lang="en">Creates a subscription</para>
/// </summary>
/// <param name="name">订阅名称</param>
/// <param name="updateRate">更新频率 默认 1000 毫秒</param>
/// <param name="active">是否激活 默认 true</param>
/// <returns></returns>
IOpcSubscription CreateSubscription(string name, int updateRate = 1000, bool active = true);

/// <summary>
/// <para lang="zh">读取 Item 值</para>
/// <para lang="en">Reads item values</para>
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
HashSet<OpcReadItem> Read(params HashSet<string> items);

/// <summary>
/// <para lang="zh">写入 Item 值</para>
/// <para lang="en">Writes item values</para>
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
HashSet<OpcWriteItem> Write(params HashSet<OpcWriteItem> items);

/// <summary>
/// <para lang="zh">浏览 OPC Server 中的位号(即数据项或者标签)</para>
/// <para lang="en">Browses tags in the OPC Server</para>
/// </summary>
/// <param name="name"></param>
/// <param name="filters"></param>
/// <param name="position"></param>
/// <returns></returns>
OpcBrowseElement[] Browse(string name, OpcBrowseFilters filters, out OpcBrowsePosition? position);

/// <summary>
/// <para lang="zh">继续浏览 OPC Server 中的位号(即数据项或者标签)</para>
/// <para lang="en">Continues browsing tags in the OPC Server</para>
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
OpcBrowseElement[] BrowseNext(OpcBrowsePosition position);
}
72 changes: 4 additions & 68 deletions src/extensions/BootstrapBlazor.OpcDa/IOpcDaServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,74 +5,10 @@
namespace BootstrapBlazor.OpcDa;

/// <summary>
/// OpcDaServer 接口定义
/// <para lang="zh">OpcDaServer 兼容接口</para>
/// <para lang="en">Compatibility interface for OpcDaServer</para>
/// </summary>
public interface IOpcDaServer : IDisposable
[Obsolete("Use IOpcDaClient instead.")]
public interface IOpcDaServer : IOpcDaClient
{
/// <summary>
/// 获得 OPC Server 是否已连接
/// </summary>
bool IsConnected { get; }

/// <summary>
/// 获得 OPC Server 名称
/// </summary>
string? ServerName { get; }

/// <summary>
/// 连接到 OPC Server 方法
/// </summary>
/// <param name="serverName"></param>
/// <returns></returns>
bool Connect(string serverName);

/// <summary>
/// 断开连接方法
/// </summary>
void Disconnect();

/// <summary>
/// 取消订阅方法
/// </summary>
/// <param name="subscription"></param>
void CancelSubscription(IOpcSubscription subscription);

/// <summary>
/// 创建订阅方法
/// </summary>
/// <param name="name">订阅名称</param>
/// <param name="updateRate">更新频率 默认 1000 毫秒</param>
/// <param name="active">是否激活 默认 true</param>
/// <returns></returns>
IOpcSubscription CreateSubscription(string name, int updateRate = 1000, bool active = true);

/// <summary>
/// 读取 Item 值方法
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
HashSet<OpcReadItem> Read(params HashSet<string> items);

/// <summary>
/// 读取 Item 值方法
/// </summary>
/// <param name="items"></param>
/// <returns></returns>
HashSet<OpcWriteItem> Write(params HashSet<OpcWriteItem> items);

/// <summary>
/// 浏览 OPC Server 中的位号 (即数据项或者标签)
/// </summary>
/// <param name="name"></param>
/// <param name="filters"></param>
/// <param name="position"></param>
/// <returns></returns>
OpcBrowseElement[] Browse(string name, OpcBrowseFilters filters, out OpcBrowsePosition? position);

/// <summary>
/// 浏览 OPC Server 中的位号 (即数据项或者标签)
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
OpcBrowseElement[] BrowseNext(OpcBrowsePosition position);
}
6 changes: 4 additions & 2 deletions src/extensions/BootstrapBlazor.OpcDa/IOpcItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
namespace BootstrapBlazor.OpcDa;

/// <summary>
///
/// <para lang="zh">OpcDa 数据项接口</para>
/// <para lang="en">OpcDa item interface</para>
/// </summary>
public interface IOpcItem
{
/// <summary>
///
/// <para lang="zh">获得 数据项名称</para>
/// <para lang="en">Gets the item name</para>
/// </summary>
string Name { get; }
}
15 changes: 10 additions & 5 deletions src/extensions/BootstrapBlazor.OpcDa/IOpcSubscription.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,32 @@
namespace BootstrapBlazor.OpcDa;

/// <summary>
/// 订阅接口定义
/// <para lang="zh">OpcDa 订阅接口</para>
/// <para lang="en">OpcDa subscription interface</para>
/// </summary>
public interface IOpcSubscription
{
/// <summary>
/// 获得 订阅名称
/// <para lang="zh">获得 订阅名称</para>
/// <para lang="en">Gets the subscription name</para>
/// </summary>
public string Name { get; }

/// <summary>
/// 获得/设置 是否保留最后一个值
/// <para lang="zh">获得/设置 是否保留最后一个值</para>
/// <para lang="en">Gets or sets whether to retain the previous value</para>
/// </summary>
public bool KeepLastValue { get; set; }

/// <summary>
/// 获得/设置 数据变更回调
/// <para lang="zh">获得/设置 数据变更回调</para>
/// <para lang="en">Gets or sets the data change callback</para>
/// </summary>
Action<List<OpcReadItem>>? DataChanged { get; set; }

/// <summary>
/// 增加数据项
/// <para lang="zh">增加数据项</para>
/// <para lang="en">Adds monitored items</para>
/// </summary>
/// <param name="items"></param>
void AddItems(IEnumerable<string> items);
Expand Down
18 changes: 12 additions & 6 deletions src/extensions/BootstrapBlazor.OpcDa/OpcBrowseElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,38 @@
namespace BootstrapBlazor.OpcDa;

/// <summary>
/// 对 OpcDataServer BrowseElement 的封装类
/// <para lang="zh">OpcDataServer BrowseElement 封装类</para>
/// <para lang="en">Wrapper for OpcDataServer BrowseElement</para>
/// </summary>
public class OpcBrowseElement
{
/// <summary>
/// 获得/设置 节点名称
/// <para lang="zh">获得/设置 节点名称</para>
/// <para lang="en">Gets or sets the node name</para>
/// </summary>
public string Name { get; set; }

/// <summary>
/// 获得/设置 Item 名称
/// <para lang="zh">获得/设置 Item 名称</para>
/// <para lang="en">Gets or sets the item name</para>
/// </summary>
public string ItemName { get; set; }

/// <summary>
/// 获得/设置 是否是数据项
/// <para lang="zh">获得/设置 是否是数据项</para>
/// <para lang="en">Gets or sets whether the node is an item</para>
/// </summary>
public bool IsItem { get; set; }

/// <summary>
/// 获得/设置 是否有子节点
/// <para lang="zh">获得/设置 是否有子节点</para>
/// <para lang="en">Gets or sets whether the node has children</para>
/// </summary>
public bool HasChildren { get; set; }

/// <summary>
/// 构造函数
/// <para lang="zh">创建 OpcBrowseElement 实例</para>
/// <para lang="en">Creates an OpcBrowseElement instance</para>
/// </summary>
public OpcBrowseElement()
{
Expand Down
12 changes: 8 additions & 4 deletions src/extensions/BootstrapBlazor.OpcDa/OpcBrowseFilterType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,26 @@
namespace BootstrapBlazor.OpcDa;

/// <summary>
/// OpcDa 浏览过滤器类型枚举
/// <para lang="zh">OpcDa 浏览过滤器类型枚举</para>
/// <para lang="en">OpcDa browse filter type</para>
/// </summary>
public enum OpcBrowseFilterType
{
/// <summary>
/// 全部
/// <para lang="zh">全部</para>
/// <para lang="en">All nodes</para>
/// </summary>
All,

/// <summary>
/// 分支
/// <para lang="zh">分支</para>
/// <para lang="en">Branches</para>
/// </summary>
Branch,

/// <summary>
/// 数据项
/// <para lang="zh">数据项</para>
/// <para lang="en">Items</para>
/// </summary>
Item
}
Loading
Loading