#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
{
}
}