1
hutongqing
2025-01-02 8c6fd742db249ad4cc819cf041eb98d880a3ef73
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/OtherDevice.cs
@@ -10,6 +10,9 @@
namespace WIDESEAWCS_QuartzJob
{
    /// <summary>
    /// 其他设备实现对象
    /// </summary>
    public class OtherDevice : IOtherDevice
    {
        #region Private Member
@@ -42,16 +45,34 @@
        #endregion Private Member
        #region Public Member
        /// <summary>
        /// 通讯对象
        /// </summary>
        public BaseCommunicator Communicator => _communicator;
        /// <summary>
        /// 通讯协议信息
        /// </summary>
        public List<DeviceProDTO> DeviceProDTOs => _deviceProDTOs;
        /// <summary>
        /// 通讯协议明细信息
        /// </summary>
        public List<DeviceProtocolDetailDTO> DeviceProtocolDetailDTOs => _deviceProtocolDetailDTOs;
        /// <summary>
        /// 设备编号
        /// </summary>
        public string DeviceCode => _deviceCode;
        /// <summary>
        /// 设备名称
        /// </summary>
        public string DeviceName => _deviceName;
        /// <summary>
        /// 设备通讯是否已连接
        /// </summary>
        public bool IsConnected => Communicator.IsConnected && _isConnected;
        #endregion
@@ -59,9 +80,9 @@
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="communicator">堆垛机通讯对象</param>
        /// <param name="deviceProDTOs">堆垛机协议信息</param>
        /// <param name="deviceProtocolDetailDTOs">堆垛机协议明细信息</param>
        /// <param name="communicator">设备通讯对象</param>
        /// <param name="deviceProDTOs">设备协议信息</param>
        /// <param name="deviceProtocolDetailDTOs">设备协议明细信息</param>
        /// <param name="deviceCode">设备编号</param>
        /// <param name="deviceName">设备名称</param>
        public OtherDevice(BaseCommunicator communicator, List<DeviceProDTO> deviceProDTOs, List<DeviceProtocolDetailDTO> deviceProtocolDetailDTOs, string deviceCode, string deviceName)
@@ -128,12 +149,20 @@
        #endregion
        #region Public Method
        /// <summary>
        /// 获取设备状态
        /// </summary>
        /// <typeparam name="T">状态枚举</typeparam>
        /// <returns></returns>
        public T GetStatus<T>()
        where T : notnull, Enum
        {
            return (T)GetStatus(typeof(T).Name);
        }
        /// <summary>
        /// 释放对象
        /// </summary>
        public void Dispose()
        {
            _heartStatr = false;
@@ -141,6 +170,13 @@
            GC.SuppressFinalize(this);
        }
        /// <summary>
        /// 读取PLC协议地址的数据
        /// </summary>
        /// <typeparam name="TEnum">协议信息的枚举对象信息。</typeparam>
        /// <typeparam name="TResult">读取数据的类型对象信息。</typeparam>
        /// <param name="value">枚举值</param>
        /// <returns>读取到的数据</returns>
        public TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum
        {
            if (!IsConnected) throw new Exception($"通讯连接错误,请检查网络");
@@ -163,6 +199,14 @@
            return devicePro == null ? throw new Exception() : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
        }
        /// <summary>
        /// 根据参数名称写入堆垛机对应的数据。
        /// </summary>
        /// <typeparam name="TEnum">参数名称枚举类型。</typeparam>
        /// <typeparam name="TValue">要写入的数据类型。</typeparam>
        /// <param name="enum">参数名称。</param>
        /// <param name="value">要写入的数据。</param>
        /// <returns>返回写入成功或失败</returns>
        public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value)
            where TEnum : Enum
            where TValue : notnull