#region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEAWCS_Communicator * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述:自定义通讯异常类,定义了错误类型、错误代码(暂时没定义错误代码表) * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using HslCommunication.LogNet; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Communicator { /// /// 工业通信错误类,封装了与PLC通信时可能发生的错误。 /// [Serializable] // 确保类支持序列化 public class CommunicationException : Exception { //public static ILogNet logNet = new LogNetFileSize() /// /// 错误代码。 /// public int? ErrorCode { get; } /// /// 通信错误的类型。 /// public CommunicationErrorType ErrorType { get; } /// /// 错误信息 /// public override string Message => _message; private string _message; /// /// 初始化一个新的 CommunicationException 实例。 /// /// 错误的描述。 /// 错误代码(可选)。 /// 导致当前异常的异常(可选)。 public CommunicationException(string message, CommunicationErrorType errorType, int? plcErrorCode = null, Exception innerException = null) : base(message, innerException) { ErrorCode = plcErrorCode; ErrorType = errorType; _message = message; } /// /// 提供一个更友好的字符串表示形式,包含PLC错误代码(如果可用)和任何内部异常信息。 /// /// 异常的字符串表示形式。 public override string ToString() { //string plcCodeInfo = ErrorCode.HasValue ? $"PLC Error Code: {ErrorCode.Value}" : "No PLC Error Code"; string innerExceptionInfo = InnerException != null ? $"\nInner Exception: {InnerException.Message}" : ""; return $"{GetType().Name}: {Message}\n{innerExceptionInfo}"; } } /// /// 工业通信错误类型枚举。 /// public enum CommunicationErrorType { /// /// IP地址错误 /// IpAddressError, /// /// 连接PLC错误 /// ConnectionFailed, /// /// 未知类型错误 /// Unknown, /// /// 读取失败 /// ReadFailed, /// /// 写入失败 /// WriteFailed, /// /// 类型错误 /// TypeError, /// /// 读取异常 /// ReadException } public class CommunicationExceptionMessage { /// /// Ip地址错误,参数【IP】 /// public const string IpAddressErrorException = "Ip地址错误,【{0}】"; /// /// 数据读取失败,参数【数据类型,协议地址,错误信息】 /// public const string ReadFailedException = "数据读取失败,数据类型:【{0}】,地址:【{1}】,错误信息:【{2}】"; /// /// 数据写入失败,参数【数据类型,协议地址,写入的数据,错误信息】 /// public const string WriteFailedException = "数据写入失败,数据类型:【{0}】,地址:【{1}】,写入的数据:【{2}】,错误信息:【{3}】"; /// /// 数据类型错误,参数【数据类型,协议地址】 /// public const string DataTypeErrorException = "数据类型错误,未定义该PLC数据类型:【{0}】,地址:【{1}】"; /// /// 数据读取异常,参数【数据类型,协议地址,错误信息】 /// public const string ReadException = "数据读取失败,数据类型:【{0}】,地址:【{1}】,错误信息:【{2}】"; /// /// 数据读取失败,参数【数据类型,协议地址,错误信息】 /// public const string WriteAndReadCheckFaild = "数据写入后读取校验失败,地址:【{0}】,写入的数据:【{1}】,读取的数据:【{2}】"; /// /// 数据读取错误,结果为null,参数【协议地址】 /// public const string ReadDataIsNull = "数据读取错误,未取到数据结果,地址:【{0}】"; /// /// 连接失败,参数【IP,Port,错误信息】 /// public const string ConnectFaild = "PLC连接失败,IP:【{0}】,Port:【{1}】,错误信息:【{2}】"; /// /// 连接异常,参数【IP,Port,错误信息】 /// public const string ConnectException = "PLC连接异常,IP:【{0}】,Port:【{1}】,错误信息:【{2}】"; /// /// 数据类型转化错误,参数【数据类型,协议地址,写入的数据,错误信息】 /// public const string TypeConvertError = "数据类型转换错误,数据类型:【{0}】,地址:【{1}】,写入的数据:【{2}】,错误信息:【{3}】"; } public class CommunicationInfoMessage { /// /// 数据写入,参数【协议地址,写入的数据】 /// public const string WriteData = "数据写入,地址:【{0}】,写入的数据:【{1}】"; /// /// 数据写入后读取,参数【协议地址,读取的数据】 /// public const string WriteAfterRead = "数据写入后读取,地址:【{0}】,读取的数据:【{1}】"; /// /// 数据写入后读取校验成功,参数【协议地址,写入的数据,读取的数据】 /// public const string WriteAndReadCheckSuccess = "数据写入后读取校验成功,地址:【{0}】,写入的数据:【{1}】,读取的数据:【{2}】"; /// /// 连接成功,参数【IP,Port】 /// public const string ConnectSuccess = "PLC连接成功,IP:【{0}】,Port:【{1}】"; } }