diff --git a/Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs b/Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs
deleted file mode 100644
index c9ef4a4..0000000
--- a/Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc地址解析器
- ///
- public class AddressTranslatorOpc : AddressTranslator
- {
- ///
- /// 地址转换
- ///
- /// 格式化的地址
- /// 是否为读取,是为读取,否为写入
- /// 翻译后的地址
- public override AddressDef AddressTranslate(string address, bool isRead)
- {
- throw new NotImplementedException();
- }
-
- ///
- /// 获取区域中的单个地址占用的字节长度
- ///
- /// 区域名称
- /// 字节长度
- public override double GetAreaByteLength(string area)
- {
- return 1;
- }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/ClientExtend.cs b/Modbus.Net/Modbus.Net.OPC/ClientExtend.cs
deleted file mode 100644
index d68c1c2..0000000
--- a/Modbus.Net/Modbus.Net.OPC/ClientExtend.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-using Hylasoft.Opc.Common;
-using Hylasoft.Opc.Da;
-using Hylasoft.Opc.Ua;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc Client Extend interface, Unified for DA and UA
- ///
- public interface IClientExtend : IDisposable
- {
- ///
- /// Unified Root Node
- ///
- Node RootNodeBase { get; }
-
- ///
- /// Connect the client to the Opc Server
- ///
- void Connect();
-
- ///
- /// Read a tag
- ///
- /// The type of tag to read
- ///
- /// The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name.
- /// E.g: the tag `foo.bar` reads the tag `bar` on the folder `foo`
- ///
- /// The value retrieved from the Opc
- ReadEvent Read(string tag);
-
- ///
- /// Write a value on the specified Opc tag
- ///
- /// The type of tag to write on
- ///
- /// The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name.
- /// E.g: the tag `foo.bar` writes on the tag `bar` on the folder `foo`
- ///
- ///
- void Write(string tag, T item);
-
- ///
- /// Read a tag asynchronusly
- ///
- Task> ReadAsync(string tag);
-
- ///
- /// Write a value on the specified Opc tag asynchronously
- ///
- Task WriteAsync(string tag, T item);
-
- ///
- /// Finds a node on the Opc Server asynchronously
- ///
- Task FindNodeAsync(string tag);
-
- ///
- /// Explore a folder on the Opc Server asynchronously
- ///
- Task> ExploreFolderAsync(string tag);
- }
-
- ///
- /// UaClient Extend
- ///
- public class MyDaClient : DaClient, IClientExtend
- {
- ///
- /// UaClient Extend
- ///
- /// Url address of Opc UA server
- public MyDaClient(Uri serverUrl) : base(serverUrl)
- {
- }
-
- ///
- /// Unified root node
- ///
- public Node RootNodeBase => RootNode;
- }
-
- ///
- /// DaClient Extend
- ///
- public class MyUaClient : UaClient, IClientExtend
- {
- ///
- /// DaClient Extend
- ///
- public MyUaClient(Uri serverUrl) : base(serverUrl)
- {
- }
-
- ///
- /// Unified root node
- ///
- public Node RootNodeBase => RootNode;
- }
-
- ///
- /// Param input of OpcConnector
- ///
- public class OpcParamIn
- {
- ///
- /// Is the action read (not is write)
- ///
- public bool IsRead { get; set; }
-
- ///
- /// Tag of a node
- ///
- public string[] Tag { get; set; }
-
- ///
- /// Tag splitter of a node
- ///
- public char Split { get; set; }
-
- ///
- /// The value set to node(only available when IsRead is false
- ///
- public object SetValue { get; set; }
- }
-
- ///
- /// Param output of OpcConnector
- ///
- public class OpcParamOut
- {
- ///
- /// Is the action success
- ///
- public bool Success { get; set; }
-
- ///
- /// Action return values
- ///
- public byte[] Value { get; set; }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/OpcMachine.cs b/Modbus.Net/Modbus.Net.OPC/OpcMachine.cs
deleted file mode 100644
index 3769471..0000000
--- a/Modbus.Net/Modbus.Net.OPC/OpcMachine.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc设备
- ///
- public class OpcMachine : BaseMachine where TKey : IEquatable
- where TUnitKey : IEquatable
- {
- ///
- /// 构造函数
- ///
- /// 设备的ID号
- /// 连接类型
- /// 连接地址
- /// 需要读写的地址
- /// 开启正则匹配
- public OpcMachine(TKey id, OpcType connectionType, string connectionString, IEnumerable> getAddresses, bool isRegexOn = false)
- : base(id, getAddresses, true)
- {
- BaseUtility = new OpcUtility(connectionType, connectionString, isRegexOn);
- AddressFormater = new AddressFormaterOpc((machine, unit) => { return new string[] { unit.Area }; }, this);
- ((OpcUtility)BaseUtility).GetSeperator +=
- () => ((AddressFormaterOpc)AddressFormater).Seperator;
- AddressCombiner = new AddressCombinerSingle();
- AddressCombinerSet = new AddressCombinerSingle();
- }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/OpcProtocol.cs b/Modbus.Net/Modbus.Net.OPC/OpcProtocol.cs
deleted file mode 100644
index cea9f7b..0000000
--- a/Modbus.Net/Modbus.Net.OPC/OpcProtocol.cs
+++ /dev/null
@@ -1,197 +0,0 @@
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc协议
- ///
- public abstract class OpcProtocol : BaseProtocol,
- PipeUnit,
- ProtocolUnit>>
- {
- ///
- /// 构造函数
- ///
- protected OpcProtocol() : base(0, 0, Endian.BigEndianLsb)
- {
- }
- }
-
- #region 读数据
-
- ///
- /// 读数据输入
- ///
- public class ReadRequestOpcInputStruct : IInputStruct
- {
- ///
- /// 构造函数
- ///
- /// 标签
- /// 分隔符
- public ReadRequestOpcInputStruct(string[] tag, char split)
- {
- Tag = tag;
- Split = split;
- }
-
- ///
- /// 标签
- ///
- public string[] Tag { get; }
-
- ///
- /// 分隔符
- ///
- public char Split { get; }
- }
-
- ///
- /// 读地址输出
- ///
- public class ReadRequestOpcOutputStruct : IOutputStruct
- {
- ///
- /// 构造函数
- ///
- /// 读取的数据
- public ReadRequestOpcOutputStruct(byte[] value)
- {
- GetValue = value;
- }
-
- ///
- /// 读取的地址
- ///
- public byte[] GetValue { get; private set; }
- }
-
- ///
- /// 读数据协议
- ///
- [SpecialProtocolUnit]
- public class ReadRequestOpcProtocol : ProtocolUnit
- {
- ///
- /// 从对象的参数数组格式化
- ///
- /// 非结构化的输入数据
- /// 格式化后的字节流
- public override OpcParamIn Format(IInputStruct message)
- {
- var r_message = (ReadRequestOpcInputStruct)message;
- return new OpcParamIn
- {
- IsRead = true,
- Tag = r_message.Tag,
- Split = r_message.Split
- };
- }
-
- ///
- /// 把仪器返回的内容填充到输出结构中
- ///
- /// 返回数据的字节流
- /// 转换标记位
- /// 结构化的输出数据
- public override IOutputStruct Unformat(OpcParamOut messageBytes, ref int pos)
- {
- return new ReadRequestOpcOutputStruct(messageBytes.Value);
- }
- }
-
- #endregion
-
- #region 写数据
-
- ///
- /// 写数据输入
- ///
- public class WriteRequestOpcInputStruct : IInputStruct
- {
- ///
- /// 构造函数
- ///
- /// 标签
- /// 分隔符
- /// 写入的数据
- public WriteRequestOpcInputStruct(string[] tag, char split, object setValue)
- {
- Tag = tag;
- Split = split;
- SetValue = setValue;
- }
-
- ///
- /// 标签
- ///
- public string[] Tag { get; }
-
- ///
- /// 分隔符
- ///
- public char Split { get; }
-
- ///
- /// 写入的数据
- ///
- public object SetValue { get; }
- }
-
- ///
- /// 写数据输出
- ///
- public class WriteRequestOpcOutputStruct : IOutputStruct
- {
- ///
- /// 构造函数
- ///
- /// 写入是否成功
- public WriteRequestOpcOutputStruct(bool writeResult)
- {
- WriteResult = writeResult;
- }
-
- ///
- /// 写入是否成功
- ///
- public bool WriteResult { get; private set; }
- }
-
- ///
- /// 写数据协议
- ///
- [SpecialProtocolUnit]
- public class WriteRequestOpcProtocol : ProtocolUnit
- {
- ///
- /// 从对象的参数数组格式化
- ///
- /// 非结构化的输入数据
- /// 格式化后的字节流
- public override OpcParamIn Format(IInputStruct message)
- {
- var r_message = (WriteRequestOpcInputStruct)message;
- return new OpcParamIn
- {
- IsRead = false,
- Tag = r_message.Tag,
- Split = r_message.Split,
- SetValue = r_message.SetValue
- };
- }
-
- ///
- /// 把仪器返回的内容填充到输出结构中
- ///
- /// 返回数据的字节流
- /// 转换标记位
- /// 结构化的输出数据
- public override IOutputStruct Unformat(OpcParamOut messageBytes, ref int pos)
- {
- var ansByte = BigEndianValueHelper.Instance.GetByte(messageBytes.Value, ref pos);
- var ans = ansByte != 0;
- return new WriteRequestOpcOutputStruct(ans);
- }
- }
-
- #endregion
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/OpcUaConnector.cs b/Modbus.Net/Modbus.Net.OPC/OpcUaConnector.cs
deleted file mode 100644
index 75ad592..0000000
--- a/Modbus.Net/Modbus.Net.OPC/OpcUaConnector.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc UA连接实现
- ///
- public class OpcUaConnector : OpcConnector
- {
- ///
- /// UA单例管理
- ///
- protected static Dictionary _instances = new Dictionary();
-
- ///
- /// 构造函数
- ///
- /// Opc UA 服务地址
- /// 是否开启正则匹配
- protected OpcUaConnector(string host, bool isRegexOn) : base(host, isRegexOn)
- {
- Client = new MyUaClient(new Uri(ConnectionToken));
- }
-
- ///
- /// 根据地址获取UA连接器单例
- ///
- /// Opc UA服务地址
- /// 是否开启正则匹配
- /// Opc UA实例
- public static OpcUaConnector Instance(string host, bool isRegexOn)
- {
- if (!_instances.ContainsKey(host))
- {
- var connector = new OpcUaConnector(host, isRegexOn);
- _instances.Add(host, connector);
- }
- return _instances[host];
- }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/OpcUaProtocol.cs b/Modbus.Net/Modbus.Net.OPC/OpcUaProtocol.cs
deleted file mode 100644
index 3e9dbac..0000000
--- a/Modbus.Net/Modbus.Net.OPC/OpcUaProtocol.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Threading.Tasks;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc UA协议
- ///
- public class OpcUaProtocol : OpcProtocol
- {
- private readonly string _host;
-
- private readonly bool _isRegexOn;
-
- ///
- /// 构造函数
- ///
- /// Opc UA服务地址
- /// 是否开启正则匹配
- public OpcUaProtocol(string host, bool isRegexOn)
- {
- _host = host;
- _isRegexOn = isRegexOn;
- }
-
- ///
- /// 连接设备
- ///
- /// 是否连接成功
- public override async Task ConnectAsync()
- {
- ProtocolLinker = new OpcUaProtocolLinker(_host, _isRegexOn);
- if (!await ProtocolLinker.ConnectAsync()) return false;
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/OpcUaProtocolLinker.cs b/Modbus.Net/Modbus.Net.OPC/OpcUaProtocolLinker.cs
deleted file mode 100644
index acb1632..0000000
--- a/Modbus.Net/Modbus.Net.OPC/OpcUaProtocolLinker.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc UA协议连接器
- ///
- public class OpcUaProtocolLinker : OpcProtocolLinker
- {
- ///
- /// 构造函数
- ///
- /// 是否开启正则匹配
- public OpcUaProtocolLinker(bool isRegexOn) : this(ConfigurationReader.GetValueDirect("OpcUa", "Host"), isRegexOn)
- {
- }
-
- ///
- /// 构造函数
- ///
- /// Opc UA服务地址
- /// 是否开启正则匹配
- public OpcUaProtocolLinker(string host, bool isRegexOn)
- {
- BaseConnector = OpcUaConnector.Instance(host, isRegexOn);
- }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.OPC/OpcUtility.cs b/Modbus.Net/Modbus.Net.OPC/OpcUtility.cs
deleted file mode 100644
index 8712cef..0000000
--- a/Modbus.Net/Modbus.Net.OPC/OpcUtility.cs
+++ /dev/null
@@ -1,190 +0,0 @@
-using Microsoft.Extensions.Logging;
-using System;
-using System.Threading.Tasks;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc类型
- ///
- public enum OpcType
- {
- ///
- /// DA连接
- ///
- Da = 0,
- ///
- /// UA连接
- ///
- Ua = 1
- }
-
- ///
- /// Opc通用Api入口
- ///
- public class OpcUtility : BaseUtility,
- PipeUnit,
- ProtocolUnit>>
- {
- private static readonly ILogger logger = LogProvider.CreateLogger();
-
- private OpcType _opcType;
-
- private bool IsRegexOn { get; set; }
-
- ///
- /// 协议类型
- ///
- public OpcType OpcType
- {
- get { return _opcType; }
- set
- {
- _opcType = value;
- switch (_opcType)
- {
- //Da协议
- case OpcType.Da:
- {
- Wrapper = new OpcDaProtocol(ConnectionString, IsRegexOn);
- break;
- }
- //Ua协议
- case OpcType.Ua:
- {
- Wrapper = new OpcUaProtocol(ConnectionString, IsRegexOn);
- break;
- }
- }
- }
- }
-
- ///
- /// 获取分隔符
- ///
- /// 分隔符
- public delegate char GetSeperatorDelegate();
-
- ///
- /// 构造函数
- ///
- /// 连接类型
- /// 连接地址
- /// 是否开启正则匹配
- public OpcUtility(int connectionType, string connectionString, bool isRegexOn = false) : base(0, 0)
- {
- ConnectionString = connectionString;
- IsRegexOn = isRegexOn;
- OpcType = (OpcType)connectionType;
- AddressTranslator = new AddressTranslatorOpc();
- }
-
- ///
- /// 构造函数
- ///
- /// 连接类型
- /// 连接地址
- /// 是否开启正则匹配
- public OpcUtility(OpcType connectionType, string connectionString, bool isRegexOn = false) : base(0, 0)
- {
- ConnectionString = connectionString;
- IsRegexOn = isRegexOn;
- OpcType = connectionType;
- AddressTranslator = new AddressTranslatorOpc();
- }
-
- ///
- /// 端格式(大端)
- ///
- public override Endian Endian => Endian.BigEndianLsb;
-
- ///
- /// 获取分隔符
- ///
- public event GetSeperatorDelegate GetSeperator;
-
- ///
- /// 设置连接方式(Opc忽略该函数)
- ///
- /// 连接方式
- public override void SetConnectionType(int connectionType)
- {
- //ignore
- }
-
- ///
- /// 获取数据
- ///
- /// 开始地址
- /// 获取字节数个数
- /// 接收到的byte数据
- public override async Task> GetDatasAsync(string startAddress, int getByteCount)
- {
- try
- {
- var split = GetSeperator?.Invoke() ?? '/';
- var readRequestOpcInputStruct = new ReadRequestOpcInputStruct(startAddress.Split('\r'), split);
- var readRequestOpcOutputStruct =
- await
- Wrapper.SendReceiveAsync(Wrapper[typeof(ReadRequestOpcProtocol)],
- readRequestOpcInputStruct);
- return new ReturnStruct
- {
- Datas = readRequestOpcOutputStruct?.GetValue,
- IsSuccess = true,
- ErrorCode = 0,
- ErrorMsg = ""
- };
- }
- catch (Exception e)
- {
- logger.LogError(e, $"OpcUtility -> GetDatas: {ConnectionString} error: {e.Message}");
- return new ReturnStruct
- {
- Datas = null,
- IsSuccess = true,
- ErrorCode = -100,
- ErrorMsg = e.Message
- };
- }
- }
-
- ///
- /// 设置数据
- ///
- /// 开始地址
- /// 设置数据
- /// 是否设置成功
- public override async Task> SetDatasAsync(string startAddress, object[] setContents)
- {
- try
- {
- var split = GetSeperator?.Invoke() ?? '/';
- var writeRequestOpcInputStruct =
- new WriteRequestOpcInputStruct(startAddress.Split('\r'), split, setContents[0]);
- var writeRequestOpcOutputStruct =
- await
- Wrapper.SendReceiveAsync(Wrapper[typeof(WriteRequestOpcProtocol)],
- writeRequestOpcInputStruct);
- return new ReturnStruct
- {
- Datas = writeRequestOpcOutputStruct?.WriteResult == true,
- IsSuccess = writeRequestOpcOutputStruct?.WriteResult == true,
- ErrorCode = writeRequestOpcOutputStruct?.WriteResult == true ? 0 : 1,
- ErrorMsg = writeRequestOpcOutputStruct?.WriteResult == true ? "" : "Write Failed"
- };
- }
- catch (Exception e)
- {
- logger.LogError(e, $"OpcUtility -> SetDatas: {ConnectionString} error: {e.Message}");
- return new ReturnStruct
- {
- Datas = false,
- IsSuccess = false,
- ErrorCode = -100,
- ErrorMsg = e.Message
- };
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Opc/AddressFormaterOpc.cs b/Modbus.Net/Modbus.Net.Opc/AddressFormaterOpc.cs
deleted file mode 100644
index 045f999..0000000
--- a/Modbus.Net/Modbus.Net.Opc/AddressFormaterOpc.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-using System.Linq;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc地址编码器
- ///
- public class AddressFormaterOpc : AddressFormater where TMachineKey : IEquatable
- where TUnitKey : IEquatable
- {
- ///
- /// 协议构造器
- ///
- /// 如何通过BaseMachine和AddressUnit构造Opc的标签
- /// 调用这个编码器的设备
- /// 每两个标签之间用什么符号隔开,默认为/
- public AddressFormaterOpc(Func, AddressUnit, string[]> tagGeter,
- BaseMachine machine,
- char seperator = '/')
- {
- Machine = machine;
- TagGeter = tagGeter;
- Seperator = seperator;
- }
-
- ///
- /// 设备
- ///
- public BaseMachine Machine { get; set; }
-
- ///
- /// 标签构造器
- /// (设备,地址)->不具备分隔符的标签数组
- ///
- protected Func, AddressUnit, string[]> TagGeter { get; set; }
-
- ///
- /// 分割符
- ///
- public char Seperator { get; protected set; }
-
- ///
- /// 编码地址
- ///
- /// 地址所在的数据区域
- /// 地址
- /// 编码后的地址
- public override string FormatAddress(string area, int address)
- {
- var findAddress = Machine?.GetAddresses.FirstOrDefault(p => p.Area == area && p.Address == address);
- if (findAddress == null) return null;
- var strings = TagGeter(Machine, findAddress);
- var ans = "";
- for (var i = 0; i < strings.Length; i++)
- ans += strings[i].Trim().Replace(" ", "") + '\r';
- ans = ans.Substring(0, ans.Length - 1);
- return ans;
- }
-
- ///
- /// 编码地址
- ///
- /// 地址所在的数据区域
- /// 地址
- /// 子地址(忽略)
- /// 编码后的地址
- public override string FormatAddress(string area, int address, int subAddress)
- {
- return FormatAddress(area, address);
- }
- }
-}
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Opc/Modbus.Net.Opc.csproj b/Modbus.Net/Modbus.Net.Opc/Modbus.Net.Opc.csproj
deleted file mode 100644
index 93aefd7..0000000
--- a/Modbus.Net/Modbus.Net.Opc/Modbus.Net.Opc.csproj
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- net462
- 10.0
- Modbus.Net.Opc
- Modbus.Net.Opc
- Modbus.Net.Opc
- 1.4.1
- Chris L.(Luo Sheng)
- Hangzhou Delian Science Technology Co.,Ltd.
- Modbus.Net.Opc
- Modbus.Net Opc Implementation
- Copyright 2023 Hangzhou Delian Science Technology Co.,Ltd.
- https://github.com/parallelbgls/Modbus.Net/tree/master/Modbus.Net/Modbus.Net.Opc
- https://github.com/parallelbgls/Modbus.Net
- git
- hardware communicate protocol modbus Delian
- False
- True
- True
- True
- MIT
- README.md
- snupkg
-
-
-
- bin\Debug\Modbus.Net.Opc.xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs b/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs
deleted file mode 100644
index ac35e32..0000000
--- a/Modbus.Net/Modbus.Net.Opc/OpcConnector.cs
+++ /dev/null
@@ -1,220 +0,0 @@
-using Hylasoft.Opc.Common;
-using Microsoft.Extensions.Logging;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-
-namespace Modbus.Net.Opc
-{
- ///
- /// Opc连接器
- ///
- public abstract class OpcConnector : BaseConnector
- {
- private static readonly ILogger logger = LogProvider.CreateLogger();
-
- ///
- /// 是否正在连接
- ///
- protected bool _connect;
-
- ///
- /// Opc客户端
- ///
- protected IClientExtend Client;
-
- ///
- /// 是否开启正则匹配
- ///
- protected bool RegexOn { get; set; }
-
- ///
- /// 构造函数
- ///
- /// 服务端url
- /// 是否开启正则匹配
- protected OpcConnector(string host, bool isRegexOn)
- {
- ConnectionToken = host;
- RegexOn = isRegexOn;
- }
-
- ///
- /// 连接标识
- ///
- public override string ConnectionToken { get; }
-
- ///
- /// 是否正在连接
- ///
- public override bool IsConnected => _connect;
-
- ///
- /// 断开连接
- ///
- ///
- public override bool Disconnect()
- {
- try
- {
- Client?.Dispose();
- Client = null;
- _connect = false;
- logger.LogInformation("Opc client {ConnectionToken} disconnected success", ConnectionToken);
- return true;
- }
- catch (Exception ex)
- {
- logger.LogError(ex, "Opc client {ConnectionToken} disconnected error", ConnectionToken);
- _connect = false;
- return false;
- }
- }
-
- ///
- protected override void ReceiveMsgThreadStart()
- {
- throw new NotImplementedException();
- }
-
- ///
- protected override void ReceiveMsgThreadStop()
- {
- throw new NotImplementedException();
- }
-
- ///
- protected override Task SendMsgWithoutConfirm(OpcParamIn message)
- {
- throw new NotImplementedException();
- }
-
- ///
- /// 带返回发送数据
- ///
- /// 需要发送的数据
- /// 是否发送成功
- public override async Task SendMsgAsync(OpcParamIn message)
- {
- try
- {
- if (message.IsRead)
- {
- var split = message.Split;
- var tag = message.Tag;
- var rootDirectory = await Client.ExploreFolderAsync("");
- var answerTag = await SearchTag(tag, split, 0, rootDirectory);
- if (answerTag != null)
- {
- var result = await Client.ReadAsync