1
hutongqing
2025-01-02 8c6fd742db249ad4cc819cf041eb98d880a3ef73
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Spec/SpeStackerCrane.cs
@@ -54,24 +54,54 @@
        #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 int LastTaskNum => _lastTaskNum;
        /// <summary>
        /// 当前正在执行的任务号
        /// </summary>
        public int CurrentTaskNum => GetCurrentTaskNum();
        /// <summary>
        /// 上一次执行的任务类型
        /// </summary>
        public int? LastTaskType { get; set; } = null;
        /// <summary>
        /// 设备编号
        /// </summary>
        public string DeviceCode => _deviceCode;
        /// <summary>
        /// 设备名称
        /// </summary>
        public string DeviceName => _deviceName;
        /// <summary>
        /// 设备是否已连接
        /// </summary>
        public bool IsConnected => Communicator.IsConnected && _isConnected;
        /// <summary>
        /// 堆垛机任务命令
        /// </summary>
        public object StackerCraneTaskCommand { get; set; }
        #endregion
@@ -154,11 +184,17 @@
        #endregion
        #region Public Method
        /// <summary>
        /// 获取堆垛机状态
        /// </summary>
        public T GetStackerCraneStatus<T>() where T : notnull, Enum
        {
            return (T)GetStatus(typeof(T).Name);
        }
        /// <summary>
        /// 释放对象
        /// </summary>
        public void Dispose()
        {
            _heartStatr = false;
@@ -166,6 +202,14 @@
            GC.SuppressFinalize(this);
        }
        /// <summary>
        /// 根据参数名称读取堆垛机对应的数据。
        /// </summary>
        /// <typeparam name="TEnum">参数名称枚举类型。</typeparam>
        /// <typeparam name="TResult">读取结果的返回值类型。</typeparam>
        /// <param name="value">参数名称。</param>
        /// <returns>返回读取到的数据。</returns>
        /// <exception cref="Exception"></exception>
        public TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum
        {
            if (!IsConnected) throw new Exception($"通讯连接错误,请检查网络");
@@ -173,11 +217,19 @@
            return devicePro == null ? throw new Exception($"读取数据错误,未在协议信息里面找到参数{value.ToString()}") : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
        }
        /// <summary>
        /// 心跳
        /// </summary>
        public void Heartbeat()
        {
        }
        /// <summary>
        /// 发送任务命令
        /// </summary>
        /// <param name="command">任务命令</param>
        /// <returns></returns>
        public bool SendCommand<T>(T command) where T : IDataTransfer, new()
        {
            if (Communicator is SiemensS7)
@@ -202,6 +254,15 @@
            }
        }
        /// <summary>
        /// 根据参数名称写入堆垛机对应的数据。
        /// </summary>
        /// <typeparam name="TEnum">参数名称枚举类型。</typeparam>
        /// <typeparam name="TValue">要写入的数据类型。</typeparam>
        /// <param name="enum">参数名称。</param>
        /// <param name="value">要写入的数据。</param>
        /// <returns>返回写入成功或失败</returns>
        /// <exception cref="Exception"></exception>
        public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value)
            where TEnum : Enum
            where TValue : notnull