#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 { IpAddressError, ConnectionFailed, Unknown, ReadFailed, WriteFailed, TypeError, ReadException } public class CommunicationExceptionMessage { public const string IpAddressErrorException = "Ip地址错误,【{0}】"; public const string ReadFailedException = "数据读取失败,数据类型:【{0}】,地址:【{1}】,错误信息:【{2}】"; public const string WriteFailedException = "数据写入失败,数据类型:【{0}】,地址:【{1}】,写入的数据:【{2}】,错误信息:【{3}】"; public const string ReadWriteDifferentException = "数据写入失败,写入后再读取与写入值不一致,数据类型:【{0}】,地址:【{1}】,写入的数据:【{2}】,写入后读取的数据:【{3}】"; public const string DataTypeErrorException = "数据类型错误,未定义该PLC数据类型:【{0}】,地址:【{1}】"; } public class CommunicationInfoMessage { } }