From 72390e0230b64cd43fedf0ba8e17aba097568a4a Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期四, 26 六月 2025 16:36:13 +0800
Subject: [PATCH] 1
---
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs | 155 ++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 128 insertions(+), 27 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs"
index d7bfbf4..cd1f3a1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/GetStackerObject.cs"
@@ -1,92 +1,90 @@
锘縰sing HslCommunication;
-using System;
-using System.Collections.Generic;
using System.ComponentModel;
-using System.Linq;
using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_QuartzJob;
-using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.StackerCrane;
-using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
namespace WIDESEAWCS_Tasks.StackerCraneJob
{
public class GetStackerObject
{
+ private SpeStackerCrane _speStackerCrane;
+ public GetStackerObject(SpeStackerCrane speStackerCrane)
+ {
+ _speStackerCrane = speStackerCrane;
+ }
/// <summary>
/// 璁惧鐘舵��
/// </summary>
/// <param name="speStackerCrane"></param>
/// <returns></returns>
- public StackerCraneStatus StackerCraneStatusValue(SpeStackerCrane speStackerCrane) => GetStackerCraneStatus(speStackerCrane);
+ public StackerCraneStatus StackerCraneStatusValue => GetStackerCraneStatus();
/// <summary>
/// 宸ヤ綔妯″紡
/// </summary>
/// <param name="speStackerCrane"></param>
/// <returns></returns>
- public StackerCraneAutoStatus StackerCraneAutoStatusValue(SpeStackerCrane speStackerCrane) => GetStackerCraneAutoStatus(speStackerCrane);
+ public StackerCraneAutoStatus StackerCraneAutoStatusValue => GetStackerCraneAutoStatus();
/// <summary>
/// 宸ヤ綔鐘舵��
/// </summary>
/// <param name="speStackerCrane"></param>
/// <returns></returns>
- public StackerCraneWorkStatus StackerCraneWorkStatusValue(SpeStackerCrane speStackerCrane) => GetStackerCraneWorkStatus(speStackerCrane);
+ public StackerCraneWorkStatus StackerCraneWorkStatusValue => GetStackerCraneWorkStatus();
/// <summary>
/// 浠诲姟瀹屾垚
/// </summary>
/// <param name="speStackerCrane"></param>
/// <returns></returns>
- public StackerCraneTaskCompleted StackerCraneTaskCompletedValue(SpeStackerCrane speStackerCrane) => GetStackerCraneTaskCompleted(speStackerCrane);
+ public StackerCraneTaskCompleted StackerCraneTaskCompletedValue => GetStackerCraneTaskCompleted();
/// <summary>
/// 浣滀笟鍛戒护
/// </summary>
/// <param name="speStackerCrane"></param>
/// <returns></returns>
- public int WorkCommandValue(SpeStackerCrane speStackerCrane) => speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkCommand);
+ //public int WorkCommandValue() => _speStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkCommand);
/// <summary>
/// 鑾峰彇鍫嗗灈鏈鸿澶囩姸鎬�
/// </summary>
/// <returns></returns>
- private StackerCraneStatus GetStackerCraneStatus(SpeStackerCrane speStackerCrane)
+ private StackerCraneStatus GetStackerCraneStatus()
{
- return Enum.Parse<StackerCraneStatus>(GetStatus(nameof(StackerCraneStatus), speStackerCrane));
+ return Enum.Parse<StackerCraneStatus>(GetStatus(nameof(StackerCraneStatus)));
}
/// <summary>
/// 鑾峰彇鍫嗗灈鏈烘墜鑷姩鐘舵��
/// </summary>
/// <returns></returns>
- private StackerCraneAutoStatus GetStackerCraneAutoStatus(SpeStackerCrane speStackerCrane)
+ private StackerCraneAutoStatus GetStackerCraneAutoStatus()
{
- return Enum.Parse<StackerCraneAutoStatus>(GetStatus(nameof(StackerCraneAutoStatus), speStackerCrane));
+ return Enum.Parse<StackerCraneAutoStatus>(GetStatus(nameof(StackerCraneAutoStatus)));
}
/// <summary>
/// 鑾峰彇鍫嗗灈鏈哄伐浣滅姸鎬�
/// </summary>
/// <returns></returns>
- private StackerCraneWorkStatus GetStackerCraneWorkStatus(SpeStackerCrane speStackerCrane)
+ private StackerCraneWorkStatus GetStackerCraneWorkStatus()
{
- return Enum.Parse<StackerCraneWorkStatus>(GetStatus(nameof(StackerCraneWorkStatus), speStackerCrane));
+ return Enum.Parse<StackerCraneWorkStatus>(GetStatus(nameof(StackerCraneWorkStatus)));
}
/// <summary>
/// 鑾峰彇鍫嗗灈鏈轰换鍔$姸鎬�
/// </summary>
/// <returns></returns>
- private StackerCraneTaskCompleted GetStackerCraneTaskCompleted(SpeStackerCrane speStackerCrane)
+ private StackerCraneTaskCompleted GetStackerCraneTaskCompleted()
{
- return Enum.Parse<StackerCraneTaskCompleted>(GetStatus(nameof(StackerCraneTaskCompleted), speStackerCrane));
+ return Enum.Parse<StackerCraneTaskCompleted>(GetStatus(nameof(StackerCraneTaskCompleted)));
}
private string GetEnumDes<T>(T value) where T : Enum
@@ -104,19 +102,18 @@
return "鏈煡";
}
- private string GetStatus(string protocolParamType, SpeStackerCrane speStackerCrane)
+ private string GetStatus(string protocolParamType)
{
- List<DeviceProDTO> devicePros = speStackerCrane.DeviceProDTOs.Where(x => x.DeviceProParamType == protocolParamType).ToList();
+ List<DeviceProDTO> devicePros = _speStackerCrane.DeviceProDTOs.Where(x => x.DeviceProParamName == protocolParamType).ToList();
if (devicePros.Count == 0)
{
throw new Exception("鏈幏鍙栧埌鍗忚淇℃伅");
}
for (int i = 0; i < devicePros.Count; i++)
{
- object readStatus = speStackerCrane.Communicator.ReadAsObj(devicePros[i].DeviceProAddress, devicePros[i].DeviceDataType);
- //todo 鍗忚鏄庣粏淇℃伅鏈幏鍙栧埌鏃舵姏鍑哄紓甯�
- DeviceProtocolDetailDTO? deviceProtocolDetail = speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName) ?? throw new Exception();
- deviceProtocolDetail = speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamType && x.ProtocalDetailValue.Equals(readStatus.ToString()));
+ object readStatus = _speStackerCrane.Communicator.ReadAsObj(devicePros[i].DeviceProAddress, devicePros[i].DeviceDataType);
+ DeviceProtocolDetailDTO? deviceProtocolDetail = _speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName) ?? throw new Exception();
+ deviceProtocolDetail = _speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName && x.ProtocalDetailValue.Equals(readStatus.ToString()));
if (deviceProtocolDetail != null)
{
return deviceProtocolDetail.ProtocolDetailType;
@@ -125,6 +122,110 @@
}
return StackerCraneStatus.Unkonw.ToString();
}
- //public bool SetStackerObject(SpeStackerCrane speStackerCrane, StackerCraneDBName StackerDBName, int value) => speStackerCrane.SetValue(StackerDBName, value);
+
+ /// <summary>
+ /// 鍫嗗灈鏈轰换鍔″畬鎴愪簨浠�
+ /// </summary>
+ public event EventHandler<StackerCraneTaskCompletedEventArgs> StackerCraneTaskCompletedEventHandler;
+
+
+ /// <summary>
+ /// 鍫嗗灈鏈哄畬鎴愪簨浠舵槸鍚﹀凡璁㈤槄
+ /// </summary>
+ public bool IsEventSubscribed => StackerCraneTaskCompletedEventHandler != null;
+
+
+ private bool _isChecked = false;
+
+ /// <summary>
+ /// 鐩戞祴鍫嗗灈鏈轰换鍔℃槸鍚﹀畬鎴�
+ /// </summary>
+ public void CheckStackerCraneTaskCompleted()
+ {
+ if (_isChecked)
+ return;
+
+ Task.Run(() =>
+ {
+ _isChecked = true;
+ try
+ {
+ DeviceProDTO? devicePro = _speStackerCrane.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(StackerCraneTaskCompleted));
+ if (devicePro != null)
+ {
+ DeviceProtocolDetailDTO? deviceProtocolDetail = _speStackerCrane.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePro.DeviceProParamName && x.ProtocolDetailType == StackerCraneTaskCompleted.WorkCompleted.ToString());
+ if (deviceProtocolDetail != null)
+ {
+ OperateResult<TimeSpan> operateResult = new OperateResult<TimeSpan>();
+ TypeCode typeCode = SiemensDBDataType.GetTypeCode(devicePro.DeviceDataType);
+ switch (typeCode)
+ {
+ case TypeCode.Boolean:
+ operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToBoolean(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.Byte:
+ operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToByte(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.Int16:
+ operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToInt16(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.Int32:
+ operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToInt32(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.UInt16:
+ operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToUInt16(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ case TypeCode.UInt32:
+ operateResult = _speStackerCrane.Communicator.Wait(devicePro.DeviceProAddress, 500, 10 * 6000, Convert.ToUInt32(deviceProtocolDetail.ProtocalDetailValue));
+ break;
+ default:
+ break;
+ }
+ int taskNum = _speStackerCrane.CurrentTaskNum;
+ if (operateResult.IsSuccess)
+ {
+ StackerCraneTaskCompletedEventArgs args = new(taskNum);
+ StackerCraneTaskCompletedEventHandler?.Invoke(_speStackerCrane, args);
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+
+ }
+ finally
+ {
+ _isChecked = false;
+ }
+ });
+ }
+
+ public bool SendCommand(StackerCraneTaskCommand command)
+ {
+ try
+ {
+ if(_speStackerCrane.IsConnected)
+ {
+ _speStackerCrane.SetValue(StackerCraneDBName.TaskNum, command.TaskNum);
+ _speStackerCrane.SetValue(StackerCraneDBName.StartRow, command.StartRow);
+ _speStackerCrane.SetValue(StackerCraneDBName.StartColumn, command.StartColumn);
+ _speStackerCrane.SetValue(StackerCraneDBName.StartLayer, command.StartLayer);
+ _speStackerCrane.SetValue(StackerCraneDBName.EndRow, command.EndRow);
+ _speStackerCrane.SetValue(StackerCraneDBName.EndColumn, command.EndColumn);
+ _speStackerCrane.SetValue(StackerCraneDBName.EndLayer, command.EndLayer);
+ //_speStackerCrane.SetValue(StackerCraneDBName.Barcode, command.Barcode);
+ _speStackerCrane.SetValue(StackerCraneDBName.WorkType, command.WorkType);
+ //_speStackerCrane.SetValue(StackerCraneDBName.WorkType, command.TrayType);
+ return true;
+ }
+ return false;
+
+ }
+ catch (Exception ex)
+ {
+ return false;
+ }
+ }
}
}
--
Gitblit v1.9.3