Skip to content

Commit 38cdd4e

Browse files
committed
refactor: 完善 Browse 功能
1 parent ccb76af commit 38cdd4e

4 files changed

Lines changed: 56 additions & 43 deletions

File tree

src/extensions/BootstrapBlazor.OpcDa/IOpcDaServer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public interface IOpcDaServer : IDisposable
6969
/// <param name="filters"></param>
7070
/// <param name="position"></param>
7171
/// <returns></returns>
72-
OpcBrowseElement[] Browse(string name, OpcBrowseFilters filters, out OpcBrowsePosition position);
72+
OpcBrowseElement[] Browse(string name, OpcBrowseFilters filters, out OpcBrowsePosition? position);
7373

7474
/// <summary>
7575
/// 浏览 OPC Server 中的位号 (即数据项或者标签)

src/extensions/BootstrapBlazor.OpcDa/Mock/MockOpcDaServer.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,20 @@ public HashSet<OpcWriteItem> Write(params HashSet<OpcWriteItem> items)
7373
public OpcBrowseElement[] Browse(string name, OpcBrowseFilters filters, out OpcBrowsePosition? position)
7474
{
7575
position = null;
76-
return [];
76+
return [
77+
new OpcBrowseElement()
78+
{
79+
Name ="Channel1",
80+
IsItem = false,
81+
HasChildren = true
82+
},
83+
new OpcBrowseElement()
84+
{
85+
Name ="Channel2",
86+
IsItem = false,
87+
HasChildren = true
88+
}
89+
];
7790
}
7891

7992
/// <summary>

src/extensions/BootstrapBlazor.OpcDa/OpcBrowseElement.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,30 @@ public class OpcBrowseElement
1414
/// <summary>
1515
/// 获得/设置 节点名称
1616
/// </summary>
17-
public string Name => _element.Name;
17+
public string Name { get; set; }
1818

1919
/// <summary>
2020
/// 获得/设置 是否是数据项
2121
/// </summary>
22-
public bool IsItem => _element.IsItem;
22+
public bool IsItem { get; set; }
2323

2424
/// <summary>
2525
/// 获得/设置 是否有子节点
2626
/// </summary>
27-
public bool HasChildren => _element.HasChildren;
27+
public bool HasChildren { get; set; }
2828

29-
internal OpcBrowseElement(BrowseElement element)
29+
/// <summary>
30+
/// 构造函数
31+
/// </summary>
32+
public OpcBrowseElement()
3033
{
31-
_element = element;
34+
Name = "";
3235
}
3336

34-
private readonly BrowseElement _element;
37+
internal OpcBrowseElement(BrowseElement element)
38+
{
39+
Name = element.Name;
40+
IsItem = element.IsItem;
41+
HasChildren = element.HasChildren;
42+
}
3543
}

src/extensions/BootstrapBlazor.OpcDa/OpcDaServer.cs

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -46,41 +46,6 @@ public bool Connect(string serverName)
4646
return IsConnected;
4747
}
4848

49-
/// <summary>
50-
/// <inheritdoc/>
51-
/// </summary>
52-
/// <param name="name"></param>
53-
/// <param name="filters"></param>
54-
/// <param name="position"></param>
55-
/// <returns></returns>
56-
public OpcBrowseElement[] Browse(string name, OpcBrowseFilters filters, out OpcBrowsePosition position)
57-
{
58-
if (_server is not { IsConnected: true })
59-
{
60-
throw new InvalidOperationException("OPC Server is not connected.");
61-
}
62-
63-
var results = _server.Browse(new ItemIdentifier(name), filters.ToFilters(), out var pos);
64-
position = new OpcBrowsePosition(pos);
65-
return results.Select(element => new OpcBrowseElement(element)).ToArray();
66-
}
67-
68-
/// <summary>
69-
/// <inheritdoc/>
70-
/// </summary>
71-
/// <param name="position"></param>
72-
/// <returns></returns>
73-
public OpcBrowseElement[] BrowseNext(OpcBrowsePosition position)
74-
{
75-
if (_server is not { IsConnected: true })
76-
{
77-
throw new InvalidOperationException("OPC Server is not connected.");
78-
}
79-
80-
var pos = position.Position;
81-
return _server.BrowseNext(ref pos).Select(element => new OpcBrowseElement(element)).ToArray();
82-
}
83-
8449
/// <summary>
8550
/// 断开连接方法
8651
/// </summary>
@@ -176,6 +141,33 @@ private Opc.Da.Server GetOpcServer()
176141
return _server;
177142
}
178143

144+
/// <summary>
145+
/// <inheritdoc/>
146+
/// </summary>
147+
/// <param name="name"></param>
148+
/// <param name="filters"></param>
149+
/// <param name="position"></param>
150+
/// <returns></returns>
151+
public OpcBrowseElement[] Browse(string name, OpcBrowseFilters filters, out OpcBrowsePosition? position)
152+
{
153+
var server = GetOpcServer();
154+
var results = server.Browse(new ItemIdentifier(name), filters.ToFilters(), out var pos);
155+
position = new OpcBrowsePosition(pos);
156+
return results.Select(element => new OpcBrowseElement(element)).ToArray();
157+
}
158+
159+
/// <summary>
160+
/// <inheritdoc/>
161+
/// </summary>
162+
/// <param name="position"></param>
163+
/// <returns></returns>
164+
public OpcBrowseElement[] BrowseNext(OpcBrowsePosition position)
165+
{
166+
var server = GetOpcServer();
167+
var pos = position.Position;
168+
return server.BrowseNext(ref pos).Select(element => new OpcBrowseElement(element)).ToArray();
169+
}
170+
179171
/// <summary>
180172
/// Dispose 方法
181173
/// </summary>

0 commit comments

Comments
 (0)