fix: 修复PLC通信及任务处理中的多个问题
修复SiemensS7通信器写入后读取确认的默认设置
优化输送线任务下发逻辑,增加任务号、条码和目标地址的写入间隔
修正空托盘出库任务的目标地址检查条件
移除不再使用的拘束机和插拔钉机相关代码
更新分拣机出库任务的NextAddress和目标地址
调整任务状态更新逻辑,增加错误日志记录
修复手动入库任务处理中的PLC写入间隔
优化输送线目标地址选择器,移除冗余代码
| | |
| | | #region << ç æ¬ 注 é >> |
| | | |
| | | /*---------------------------------------------------------------- |
| | | * å½å空é´ï¼WIDESEAWCS_Communicator |
| | | * å建è
ï¼è¡ç«¥åº |
| | |
| | | * ä¿®æ¹æ¶é´ï¼ |
| | | * çæ¬ï¼V1.0.1 |
| | | * ä¿®æ¹è¯´æï¼ |
| | | * |
| | | * |
| | | *----------------------------------------------------------------*/ |
| | | |
| | | #endregion << ç æ¬ 注 é >> |
| | | |
| | | using HslCommunication; |
| | |
| | | using HslCommunication.LogNet; |
| | | using HslCommunication.Profinet.Siemens; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.Linq; |
| | | using System.Net; |
| | | using System.Net.NetworkInformation; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using System.Xml.Linq; |
| | | |
| | | namespace WIDESEAWCS_Communicator |
| | | { |
| | |
| | | public class SiemensS7 : BaseCommunicator |
| | | { |
| | | #region Private Member |
| | | |
| | | /// <summary> |
| | | /// HSLCommunicationç西é¨åçS7åè®®çé讯类 |
| | | /// </summary> |
| | |
| | | private int _port; |
| | | |
| | | /// <summary> |
| | | /// å½åéè®¯å¨æ¯å¦å·²è¿æ¥å°PLCã |
| | | /// å½åéè®¯å¨æ¯å¦å·²è¿æ¥å°PLCã |
| | | /// </summary> |
| | | private bool _connected; |
| | | |
| | |
| | | private ILogNet _logNet; |
| | | |
| | | private bool _isPing = true; |
| | | |
| | | #endregion Private Member |
| | | |
| | | #region Public Member |
| | | /// <summary> |
| | | /// è·åå½åéè®¯å¨æ¯å¦å·²è¿æ¥å°PLCã |
| | | |
| | | /// <summary> |
| | | /// è·åå½åéè®¯å¨æ¯å¦å·²è¿æ¥å°PLCã |
| | | /// </summary> |
| | | public override bool IsConnected => _connected; |
| | | |
| | |
| | | /// <summary> |
| | | /// æ¯å¦å¨åå
¥æ°æ®åè¯»åæ°æ®ç¡®è®¤ã |
| | | /// </summary> |
| | | public override bool IsReadAfterWrite { get; set; } = false; |
| | | public override bool IsReadAfterWrite { get; set; } = true; |
| | | |
| | | #endregion Public Member |
| | | |
| | | #region Constructor Function |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | | /// </summary> |
| | |
| | | _port = port;//éè¿æé 彿°èµå¼è¿æ¥ä½¿ç¨ç端å£å· |
| | | _name = name; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Private Method |
| | | |
| | | /// <summary> |
| | | /// ä»OperateResult对象ä¸è·å读åçæ°æ®ã |
| | | /// </summary> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <typeparam name="T"></typeparam> |
| | | /// <param name="operateResult"></param> |
| | |
| | | try |
| | | { |
| | | Type type = value.GetType(); |
| | | |
| | | switch (Type.GetTypeCode(type)) |
| | | { |
| | | case TypeCode.Int32: |
| | | return plc.Write(address, Convert.ToInt32(value)); |
| | | |
| | | case TypeCode.UInt32: |
| | | return plc.Write(address, Convert.ToUInt32(value)); |
| | | |
| | | case TypeCode.Int16: |
| | | return plc.Write(address, Convert.ToInt16(value)); |
| | | |
| | | case TypeCode.UInt16: |
| | | return plc.Write(address, Convert.ToUInt16(value)); |
| | | |
| | | case TypeCode.Single: |
| | | return plc.Write(address, Convert.ToSingle(value)); |
| | | |
| | | case TypeCode.Boolean: |
| | | return plc.Write(address, Convert.ToBoolean(value)); |
| | | |
| | | case TypeCode.Byte: |
| | | return plc.Write(address, Convert.ToByte(value)); |
| | | |
| | | case TypeCode.String: |
| | | return plc.Write(address, Convert.ToString(value)); |
| | | |
| | | case TypeCode.Char: |
| | | return plc.Write(address, Convert.ToChar(value)); |
| | | //case TypeCode.arr: |
| | |
| | | return (int[])GetContent(plc.ReadInt32(address, length), address); |
| | | else |
| | | return (int)GetContent(plc.ReadInt32(address), address); |
| | | |
| | | case TypeCode.UInt32: |
| | | if (length > 1) |
| | | return (uint[])GetContent(plc.ReadUInt32(address, length), address); |
| | | else |
| | | return (uint)GetContent(plc.ReadUInt32(address), address); |
| | | |
| | | case TypeCode.Int16: |
| | | if (length > 1) |
| | | return (short[])GetContent(plc.ReadInt16(address, length), address); |
| | | else |
| | | return (short)GetContent(plc.ReadInt16(address), address); |
| | | |
| | | case TypeCode.UInt16: |
| | | if (length > 1) |
| | | return (ushort[])GetContent(plc.ReadUInt16(address, length), address); |
| | | else |
| | | return (ushort)GetContent(plc.ReadUInt16(address), address); |
| | | |
| | | case TypeCode.Single: |
| | | if (length > 1) |
| | | return (float[])GetContent(plc.ReadFloat(address, length), address); |
| | | else |
| | | return (float)GetContent(plc.ReadFloat(address), address); |
| | | |
| | | case TypeCode.Boolean: |
| | | if (length > 1) |
| | | return (bool[])GetContent(plc.ReadBool(address, length), address); |
| | | else |
| | | return (bool)GetContent(plc.ReadBool(address), address); |
| | | |
| | | case TypeCode.Byte: |
| | | if (length > 1) |
| | | return (byte)GetContent(plc.Read(address, length), address); |
| | | return (byte)GetContent(plc.ReadByte(address), address); |
| | | |
| | | case TypeCode.String: |
| | | if (length > 1) |
| | | return (string)GetContent(plc.ReadString(address, length), address); |
| | | else |
| | | return (string)GetContent(plc.ReadString(address), address); |
| | | |
| | | case TypeCode.Char: |
| | | if (length > 1) |
| | | return Encoding.Default.GetString((byte[])GetContent(plc.Read(address, length), address)).ToArray(); |
| | | return (char)GetContent(plc.ReadByte(address), address); |
| | | |
| | | default: |
| | | throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, typeCode.ToString(), address), CommunicationErrorType.TypeError); |
| | | } |
| | |
| | | } |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Public Method |
| | | /// <summary> |
| | | |
| | | /// <summary> |
| | | /// è¿æ¥å°PLCã |
| | | /// </summary> |
| | | /// </summary> |
| | | /// <returns>å¦æè¿æ¥æååè¿åtrueï¼å¦åè¿åfalseã</returns> |
| | | /// <exception cref="CommunicationException">èªå®ä¹é讯å¼å¸¸ç±»</exception> |
| | | public override bool Connect() |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æå¼ä¸å·¥ä¸è®¾å¤çè¿æ¥ã |
| | | /// </summary> |
| | | /// <returns>妿æåæå¼è¿æ¥åè¿åtrueï¼å¦æå·²ç»æ¯æå¼ç¶æåè¿åfalseã</returns> |
| | | /// <summary> |
| | | /// æå¼ä¸å·¥ä¸è®¾å¤çè¿æ¥ã |
| | | /// </summary> |
| | | /// <returns>妿æåæå¼è¿æ¥åè¿åtrueï¼å¦æå·²ç»æ¯æå¼ç¶æåè¿åfalseã</returns> |
| | | public override bool Disconnect() |
| | | { |
| | | try |
| | |
| | | } |
| | | |
| | | #region Read |
| | | /// <summary> |
| | | /// ä»PLCè¯»åæ°æ®ã |
| | | /// </summary> |
| | | /// <param name="address">æºå°åï¼å
·ä½æ ¼å¼åå³äºä½¿ç¨çå·¥ä¸åè®®ã</param> |
| | | /// <param name="length">è¦è¯»åçæ°æ®é¿åº¦ã</param> |
| | | /// <returns>读åå°çæ°æ®ï¼å¦æè¯»å失败åå¯è½è¿ånullã空æ°ç»ææåºèªå®ä¹é讯å¼å¸¸ã</returns> |
| | | |
| | | /// <summary> |
| | | /// ä»PLCè¯»åæ°æ®ã |
| | | /// </summary> |
| | | /// <param name="address">æºå°åï¼å
·ä½æ ¼å¼åå³äºä½¿ç¨çå·¥ä¸åè®®ã</param> |
| | | /// <param name="length">è¦è¯»åçæ°æ®é¿åº¦ã</param> |
| | | /// <returns>读åå°çæ°æ®ï¼å¦æè¯»å失败åå¯è½è¿ånullã空æ°ç»ææåºèªå®ä¹é讯å¼å¸¸ã</returns> |
| | | /// <exception cref="CommunicationException">èªå®ä¹é讯å¼å¸¸ç±»</exception> |
| | | public override byte[] Read(string address, int length) |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <typeparam name="T"></typeparam> |
| | | /// <param name="address"></param> |
| | |
| | | else |
| | | return Read(address, SiemensDBDataType.GetTypeCode(dataType)); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Write |
| | | |
| | | /// <summary> |
| | | /// åPLCåå
¥æ°æ®ã |
| | | /// </summary> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <typeparam name="T"></typeparam> |
| | | /// <param name="address"></param> |
| | |
| | | { |
| | | return GetResult(Write(address, value), address, value); |
| | | } |
| | | |
| | | |
| | | public override bool Write<T>(string address, T[] values) |
| | | { |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_DW: |
| | | { |
| | | uint writeVal; |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_Int: |
| | | { |
| | | short writeVal; |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_W: |
| | | { |
| | | ushort writeVal; |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_Float: |
| | | { |
| | | float writeVal; |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_Bool: |
| | | { |
| | | bool writeVal; |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_Byte: |
| | | { |
| | | byte writeVal; |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_String: |
| | | { |
| | | string writeVal; |
| | |
| | | } |
| | | |
| | | break; |
| | | |
| | | case SiemensDBDataType.DataType_Char: |
| | | |
| | | break; |
| | |
| | | obj = GetResult(Write(address, writeVal), address, writeVal); |
| | | } |
| | | break; |
| | | |
| | | default: |
| | | throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, dataType, address), CommunicationErrorType.TypeError); |
| | | } |
| | | return obj; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ReadCustomer |
| | | |
| | | /// <summary> |
| | | /// 读åèªå®ä¹çæ°æ®ç±»åï¼éè¦ç»§æ¿èªIDataTransferæ¥å£ï¼è¿åä¸ä¸ªæ°çç±»åçå®ä¾å¯¹è±¡ã |
| | | /// </summary> |
| | |
| | | throw new CommunicationException(ex.Message, CommunicationErrorType.ReadException, innerException: ex); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region WriteCustomer |
| | | |
| | | /// <summary> |
| | | /// åå
¥èªå®ä¹ç±»åçæ°æ®ï¼è¯¥ç±»åå¿
须继æ¿èªIDataTransferæ¥å£ã |
| | | /// </summary> |
| | |
| | | LogNet.WriteInfo(Name, stringBuilder.ToString()); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | /// <summary> |
| | |
| | | case TypeCode.Int16: |
| | | OperateResult<TimeSpan> operateResultShort = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout); |
| | | return operateResultShort; |
| | | |
| | | case TypeCode.Int32: |
| | | OperateResult<TimeSpan> operateResultInt = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout); |
| | | return operateResultInt; |
| | | |
| | | case TypeCode.UInt16: |
| | | OperateResult<TimeSpan> operateResultUShort = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout); |
| | | return operateResultUShort; |
| | | |
| | | case TypeCode.UInt32: |
| | | OperateResult<TimeSpan> operateResultUInt = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout); |
| | | return operateResultUInt; |
| | | |
| | | default: |
| | | throw new NotSupportedException(); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Destruction Function |
| | | |
| | | /// <summary> |
| | | /// ææå½æ°ï¼ç¡®ä¿å¨ä¸åéè¦æ¶å
³éè¿æ¥ |
| | | /// ææå½æ°ï¼ç¡®ä¿å¨ä¸åéè¦æ¶å
³éè¿æ¥ |
| | | /// </summary> |
| | | ~SiemensS7() |
| | | { |
| | | Dispose(); |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | } |
| | | } |
| | |
| | | using MapsterMapper; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Enums; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService; |
| | | |
| | |
| | | { |
| | | case TaskTypeGroup.OutbondGroup: |
| | | return _outboundTaskFlowService.InitializeOnReceive(task, source); |
| | | |
| | | case TaskTypeGroup.InboundGroup: |
| | | return _inboundTaskFlowService.InitializeOnReceive(task, source); |
| | | |
| | | case TaskTypeGroup.RelocationGroup: |
| | | return _relocationTaskFlowService.InitializeOnReceive(task, source); |
| | | |
| | | case TaskTypeGroup.OtherGroup: |
| | | return _robotTaskFlowService.InitializeOnReceive(task, source); |
| | | |
| | | default: |
| | | return WebResponseContent.Instance.Error("WCSä¸åå¨å½åä»»å¡çä»»å¡ç±»å"); |
| | | } |
| | |
| | | using Serilog.Core; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | | using WIDESEAWCS_Tasks; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService; |
| | | |
| | |
| | | /// <returns></returns> |
| | | public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task) |
| | | { |
| | | int oldState = task.TaskStatus; |
| | | |
| | | var result = task.TaskType.GetTaskTypeGroup() switch |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.MoveToNextStatus(task), |
| | | TaskTypeGroup.InboundGroup => _inboundTaskFlowService.MoveToNextStatus(task), |
| | | TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.MoveToNextStatus(task), |
| | | TaskTypeGroup.OtherGroup => _robotTaskFlowService.MoveToNextStatus(task), |
| | | _ => WebResponseContent.Instance.Error($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã") |
| | | }; |
| | | int oldState = task.TaskStatus; |
| | | |
| | | if (!result.Status) |
| | | return result; |
| | | var result = task.TaskType.GetTaskTypeGroup() switch |
| | | { |
| | | TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.MoveToNextStatus(task), |
| | | TaskTypeGroup.InboundGroup => _inboundTaskFlowService.MoveToNextStatus(task), |
| | | TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.MoveToNextStatus(task), |
| | | TaskTypeGroup.OtherGroup => _robotTaskFlowService.MoveToNextStatus(task), |
| | | _ => content.Error($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã") |
| | | }; |
| | | |
| | | // åºåºå®æçº¿ä½èç¹æ¶ï¼å¯è½éè¦æ¥æ¶å
¥åºæ°ä»»å¡ã |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup |
| | | && result.Data is List<WMSTaskDTO> wmsTasks |
| | | && wmsTasks.Count > 0) |
| | | { |
| | | WebResponseContent content = ReceiveWMSTask(wmsTasks); |
| | | if (!content.Status) |
| | | return content; |
| | | if (!result.Status) |
| | | return result; |
| | | |
| | | // åºåºå®æçº¿ä½èç¹æ¶ï¼å¯è½éè¦æ¥æ¶å
¥åºæ°ä»»å¡ã |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup |
| | | && result.Data is List<WMSTaskDTO> wmsTasks |
| | | && wmsTasks.Count > 0) |
| | | { |
| | | content = ReceiveWMSTask(wmsTasks); |
| | | if (!content.Status) |
| | | return content; |
| | | } |
| | | |
| | | // æ´æ°ä»»å¡æ°æ® |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish) |
| | | { |
| | | BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); |
| | | } |
| | | else |
| | | { |
| | | BaseDal.UpdateData(task); |
| | | } |
| | | |
| | | // è®°å½ä»»å¡æ§è¡è¯¦æ
|
| | | string logMessage = App.User.UserId > 0 |
| | | ? $"人工æå¨å°ä»»å¡ç¶æä»ã{oldState}ã跳转å°ã{task.TaskStatus}ã" |
| | | : $"ç³»ç»èªå¨æµç¨ï¼ä»»å¡ç¶æä»ã{oldState}ã转å°ã{task.TaskStatus}ã"; |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, logMessage); |
| | | |
| | | return content.OK(); |
| | | } |
| | | |
| | | // æ´æ°ä»»å¡æ°æ® |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish) |
| | | catch (Exception ex) |
| | | { |
| | | BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); |
| | | QuartzLogHelper.LogError(Logger.None, $"UpdateTaskStatusToNext æ´æ°å°ä»»å¡ç¶æä¿®æ¹ä¸ºä¸ä¸ä¸ªç¶æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,é误信æ¯:ã{ex.Message}ã", "UpdateTaskStatusToNext"); |
| | | return content.Error(ex.Message); |
| | | } |
| | | else |
| | | { |
| | | BaseDal.UpdateData(task); |
| | | } |
| | | |
| | | // è®°å½ä»»å¡æ§è¡è¯¦æ
|
| | | string logMessage = App.User.UserId > 0 |
| | | ? $"人工æå¨å°ä»»å¡ç¶æä»ã{oldState}ã跳转å°ã{task.TaskStatus}ã" |
| | | : $"ç³»ç»èªå¨æµç¨ï¼ä»»å¡ç¶æä»ã{oldState}ã转å°ã{task.TaskStatus}ã"; |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, logMessage); |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"UpdatePosition æ´æ°ä»»å¡ä½ç½®å¤±è´¥,ä»»å¡å·:ã{taskNum}ã,é误信æ¯:ã{ex.Message}ã"); |
| | | QuartzLogHelper.LogError(Logger.None, $"UpdatePosition æ´æ°ä»»å¡ä½ç½®å¤±è´¥,ä»»å¡å·:ã{taskNum}ã,é误信æ¯:ã{ex.Message}ã", "UpdatePosition"); |
| | | //Console.WriteLine($"UpdatePosition æ´æ°ä»»å¡ä½ç½®å¤±è´¥,ä»»å¡å·:ã{taskNum}ã,é误信æ¯:ã{ex.Message}ã"); |
| | | } |
| | | return null; |
| | | } |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"UpdatePosition æ´æ°ä»»å¡ä½ç½®å¤±è´¥,ä»»å¡å·:ã{taskNum}ã,é误信æ¯:ã{ex.Message}ã"); |
| | | QuartzLogHelper.LogError(Logger.None, $"UpdatePosition æ´æ°ä»»å¡ä½ç½®å¤±è´¥,ä»»å¡å·:ã{taskNum}ã,é误信æ¯:ã{ex.Message}ã", "UpdatePosition"); |
| | | } |
| | | return null; |
| | | } |
| | |
| | | if (command.CV_State == 2) |
| | | { |
| | | // æ£æ¥è¯¥ä½ç½®æ¯å¦å·²æä»»å¡ |
| | | var existingTask = _taskService.Db.Queryable<Dt_Task>().First(x => x.TargetAddress == childDeviceCode); |
| | | if (existingTask.IsNullOrEmpty()) |
| | | var existingTask = _taskService.Db.Queryable<Dt_Task>().Count(x => x.TargetAddress == childDeviceCode); |
| | | if (existingTask < 5) |
| | | { |
| | | // 没æä»»å¡ï¼å WMS 请æ±åºåºæçä»»å¡ |
| | | var position = checkPalletPositions.FirstOrDefault(x => x.Code == childDeviceCode); |
| | |
| | | ProcessTaskState(conveyorLine, command, task, childDeviceCode); |
| | | continue; |
| | | } |
| | | // Todoï¼ ä¸é¢çé»è¾ä¸»è¦å¤çæ²¡ææ¥è¯¢å°ä»»å¡ä½ææ¡ç çæ
åµï¼å¯è½æ¯éè¦çææºæ¢°æä»»å¡æè
è°ç¨ WMS å建å
¥åºä»»å¡ ï¼ä¸´æ¶ä½¿ç¨ï¼ |
| | | else if (!command.Barcode.IsNullOrEmpty() && childDeviceCode == "11068") |
| | | { |
| | | var isWcsTask = _taskService.Db.Queryable<Dt_Task>().Any(x => x.PalletCode == command.Barcode && (x.TaskStatus == (int)TaskOutStatusEnum.OutNew || x.TaskStatus == (int)TaskInStatusEnum.InNew)); |
| | |
| | | } |
| | | |
| | | // 设置任å¡å·ãæçæ¡ç ãç®æ å°åãWCS_ACK |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, task.TaskNum, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.Barcode, task.PalletCode, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.Target, targetAddress, childDeviceCode); |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | var isTaskNoSet = conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, task.TaskNum, childDeviceCode); |
| | | |
| | | Thread.Sleep(100); // ç¡®ä¿ PLC è½æ£ç¡®è¯»åä»»å¡å·åååå
¥æ¡ç |
| | | var isPalletSet = conveyorLine.SetValue(ConveyorLineDBNameNew.Barcode, task.PalletCode, childDeviceCode); |
| | | |
| | | bool isTargetSet = true; |
| | | if (targetAddress == "2217" && !isEmptyTask) |
| | | { |
| | | QuartzLogHelper.LogDebug(_logger, $"å设å¤: {childDeviceCode}ï¼åºåºç®æ å°å: {targetAddress}", conveyorLine.DeviceCode); |
| | | Thread.Sleep(100); // ç¡®ä¿ PLC è½æ£ç¡®è¯»åä»»å¡å·åååå
¥æ¡ç |
| | | isTargetSet = conveyorLine.SetValue(ConveyorLineDBNameNew.Target, targetAddress, childDeviceCode); |
| | | } |
| | | if (!isTargetSet || !isTaskNoSet || !isPalletSet) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"RequestOutboundï¼ä¸ååºåºä»»å¡å¤±è´¥ï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | bool isWmsResult = false; |
| | | // æ´æ°ä»»å¡ç¶ææä½ç½® |
| | | if (isEmptyTask && task.NextAddress == "2217") |
| | | { |
| | | task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>(); |
| | | task.NextAddress = "2201"; |
| | | _taskService.Repository.UpdateData(task); |
| | | isWmsResult = _taskService.Repository.UpdateData(task); |
| | | } |
| | | else |
| | | { |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | isWmsResult = _taskService.UpdateTaskStatusToNext(task).Status; |
| | | } |
| | | |
| | | if(!isWmsResult) |
| | | { |
| | | QuartzLogHelper.LogError(_logger, $"RequestOutboundï¼æ´æ°ä»»å¡ç¶æå¤±è´¥ï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | Thread.Sleep(100); // ç¡®ä¿ PLC è½æ£ç¡®è¯»åä»»å¡å·åååå
¥æ¡ç |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, "RequestOutboundï¼åºåºä»»å¡å·²ä¸åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", $"åºåºä»»å¡å·²ä¸åï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode); |
| | | return Task.CompletedTask; |
| | | } |
| | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | | /// <summary> |
| | | /// è¾éçº¿ç®æ å°åéæ©å¨ - å¤çæææº/ææéæºçä¸ä¸å±è¯·æ± |
| | | /// è¾éçº¿ç®æ å°åéæ©å¨ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// æ ¸å¿èè´£ï¼ |
| | | /// 1. å¤çå
¥åºåºæ¯çç®æ å°åéæ© |
| | | /// 2. å¤çåºåºåºæ¯çç®æ å°åéæ© |
| | | /// 3. å¤ææææºåææéæºçç©æè¯·æ±ç¶æ |
| | | /// 4. åè°è¾é线ä¸ä¸ä¸å±è®¾å¤ä¹é´çç©ææµè½¬ |
| | | /// |
| | | /// æææºåææéæºé½æä¸ä¸ä¸¤å±ç»æï¼ |
| | | /// æ¯å±é½æç¬ç«çç©æè¯·æ±ååºæä¿¡å·ï¼éè¦åå«å¤çã |
| | | /// </remarks> |
| | | public class ConveyorLineTargetAddressSelector |
| | | { |
| | | /// <summary> |
| | | /// 设å¤å±çº§ï¼ä¸å±/ä¸å±ï¼ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// ç¨äºåºåæææºåææéæºçä¸å±å·¥ä½åä¸å±å·¥ä½ã |
| | | /// å
¥åºä»»å¡å¯¹åºä¸å±ï¼MaterialRequestUpperï¼ï¼åºåºä»»å¡å¯¹åºä¸å±ï¼MaterialRequestLowerï¼ã |
| | | /// </remarks> |
| | | private enum Layer |
| | | { |
| | | /// <summary> |
| | | /// ä¸å±å·¥ä½ |
| | | /// </summary> |
| | | Upper, |
| | | |
| | | /// <summary> |
| | | /// ä¸å±å·¥ä½ |
| | | /// </summary> |
| | | Lower |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ç®æ 设å¤ç±»åæä¸¾ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// ç¨äºæ ¹æ®ç®æ å°åç¼ç è¯å«éè¦å¯¹æ¥ç设å¤ç±»åã |
| | | /// </remarks> |
| | | private enum TargetDeviceType |
| | | { |
| | | /// <summary> |
| | | /// æ ææè®¾å¤ï¼å°åä¸å¨å·²ç¥èå´å
ï¼ |
| | | /// </summary> |
| | | None, |
| | | |
| | | /// <summary> |
| | | /// æææº |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// è´è´£åºå®/约æçµæ± æçç设å¤ï¼æä¸ä¸ä¸¤å±ã |
| | | /// </remarks> |
| | | ConstraintMachine, |
| | | |
| | | /// <summary> |
| | | /// ææéæº |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// è´è´£æéåæéæä½ç设å¤ï¼æä¸ä¸ä¸¤å±ã |
| | | /// </remarks> |
| | | PinMachine |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æææºå¯¹åºçç¹ä½ç¼ç éå |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// å½ç®æ å°åå¨è¿äºç¼ç 䏿¶ï¼è¡¨ç¤ºéè¦ä¸æææºäº¤äºã |
| | | /// ä½¿ç¨ HashSet ä¿è¯ O(1) ç Contains æ¥æ¾æ§è½ã |
| | | /// </remarks> |
| | | private static readonly HashSet<string> ConstraintMachineCodes = new HashSet<string> { "10180", "20090" }; |
| | | |
| | | /// <summary> |
| | | /// ææéæºå¯¹åºçç¹ä½ç¼ç éå |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// å½ç®æ å°åå¨è¿äºç¼ç 䏿¶ï¼è¡¨ç¤ºéè¦ä¸ææéæºäº¤äºã |
| | | /// ä½¿ç¨ HashSet ä¿è¯ O(1) ç Contains æ¥æ¾æ§è½ã |
| | | /// </remarks> |
| | | private static readonly HashSet<string> PinMachineCodes = new HashSet<string> { "10190", "20100" }; |
| | | |
| | | /// <summary> |
| | | /// ç®æ å°åå°è®¾å¤ç±»åçæ å° |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// éè¿åä¸åå
¸å®ç° O(1) æ¥æ¾ï¼æ¿ä»£åå
åå«ç¨ä¸¤ä¸ª List + Contains + if/else if çåæ³ã |
| | | /// Key: ç®æ å°åç¼ç ï¼Value: 对åºç设å¤ç±»åã |
| | | /// </remarks> |
| | | private static readonly Dictionary<string, TargetDeviceType> AddressToDeviceType = new Dictionary<string, TargetDeviceType> |
| | | { |
| | | // æææºç两个ç¹ä½ç¼ç 齿 å°å° ConstraintMachine ç±»å |
| | | { "10180", TargetDeviceType.ConstraintMachine }, |
| | | { "20090", TargetDeviceType.ConstraintMachine }, |
| | | // ææéæºç两个ç¹ä½ç¼ç 齿 å°å° PinMachine ç±»å |
| | | { "10190", TargetDeviceType.PinMachine }, |
| | | { "20100", TargetDeviceType.PinMachine } |
| | | }; |
| | | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | |
| | | { |
| | | // è®°å½å
¥åºåºæ¯çè°è¯æ¥å¿ï¼å
å«å设å¤åç®æ å°åä¿¡æ¯ |
| | | WriteDebug(conveyorLine, "å
¥åºä¸ä¸å°å", childDeviceCode, nextAddress); |
| | | // å§æéç¨å¤çæ¹æ³ï¼å
¥åºå¯¹åºä¸å±ï¼isUpper: trueï¼ |
| | | //HandleDeviceRequest(conveyorLine, nextAddress, childDeviceCode, Layer.Upper); |
| | | |
| | | var cvState = conveyorLine.GetValue<ConveyorLineDBNameNew, byte>(ConveyorLineDBNameNew.CV_State, nextAddress); |
| | | bool isAvailable = cvState == 2; |
| | |
| | | { |
| | | // è®°å½åºåºåºæ¯çè°è¯æ¥å¿ï¼å
å«å设å¤åç®æ å°åä¿¡æ¯ |
| | | WriteDebug(conveyorLine, "åºåºä¸ä¸å°å", childDeviceCode, nextAddress); |
| | | // å§æéç¨å¤çæ¹æ³ï¼åºåºå¯¹åºä¸å±ï¼isUpper: falseï¼ |
| | | //HandleDeviceRequest(conveyorLine, nextAddress, childDeviceCode, Layer.Lower); |
| | | |
| | | var cvState = conveyorLine.GetValue<ConveyorLineDBNameNew, byte>(ConveyorLineDBNameNew.CV_State, nextAddress); |
| | | bool isAvailable = cvState == 2; |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®ç®æ å°åç±»åååå°å¯¹åºè®¾å¤å¤ç |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// éè¿ AddressToDeviceType åå
¸å°ç®æ å°åæ å°å°è®¾å¤ç±»åï¼ |
| | | /// ç¶åååå°å¯¹åºçä¸ç¨å¤çæ¹æ³ï¼HandleConstraintMachine / HandlePinMachineï¼ã |
| | | /// å¦æç®æ å°åä¸å¨å·²ç¥æ å°è¡¨ä¸ï¼ç´æ¥è¿åï¼ä¸åä»»ä½å¤çã |
| | | /// </remarks> |
| | | /// <param name="conveyorLine">è¾é线设å¤å¯¹è±¡ï¼ä¼ éå°å
·ä½è®¾å¤å¤çæ¹æ³</param> |
| | | /// <param name="nextAddress">ç®æ 设å¤ç¼ç ï¼éè¿åå
¸æ¥æ¾è¯å«è®¾å¤ç±»å</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼ç ï¼ä¼ éå°å
·ä½è®¾å¤å¤çæ¹æ³</param> |
| | | /// <param name="layer">设å¤å±çº§ï¼ä¸å±æä¸å±ï¼ï¼å³å®è¯»ååªç»è¯·æ±æ å¿</param> |
| | | private void HandleDeviceRequest(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode, Layer layer) |
| | | { |
| | | // éè¿åå
¸æ¥æ¾ç®æ å°å对åºç设å¤ç±»åï¼å¦ææ¾ä¸å°å deviceType 为 None |
| | | if (!AddressToDeviceType.TryGetValue(nextAddress, out var deviceType) || deviceType == TargetDeviceType.None) |
| | | { |
| | | // ç®æ å°åä¸å¨å·²ç¥æ å°è¡¨ä¸ï¼ç´æ¥è¿åï¼å¯è½æ¯å
¶ä»ç±»å设å¤ï¼ |
| | | return; |
| | | } |
| | | |
| | | // æ ¹æ®è¯å«åºç设å¤ç±»åååå°å¯¹åºçå¤çæ¹æ³ |
| | | switch (deviceType) |
| | | { |
| | | case TargetDeviceType.ConstraintMachine: |
| | | // æææºå¤ç忝ï¼è·åæææºå®ä¾å¹¶å¤çå
¶ä¸ä¸å±è¯·æ± |
| | | HandleConstraintMachine(conveyorLine, childDeviceCode, layer); |
| | | break; // å¤ç宿¯ï¼è·³åº switch |
| | | |
| | | case TargetDeviceType.PinMachine: |
| | | // ææéæºå¤ç忝ï¼è·åææéæºå®ä¾å¹¶å¤çå
¶ä¸ä¸å±è¯·æ± |
| | | HandlePinMachine(conveyorLine, childDeviceCode, layer); |
| | | break; // å¤ç宿¯ï¼è·³åº switch |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çæææºçç©æ/åºæè¯·æ± |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// æ¥æ¾æææºè®¾å¤ï¼è·åå½åå±çº§çç©æè¯·æ±ååºæè¯·æ±ç¶æï¼ |
| | | /// ç¶åè°ç¨éç¨å¤çé»è¾ ProcessDeviceRequestã |
| | | /// </remarks> |
| | | /// <param name="conveyorLine">è¾é线设å¤å¯¹è±¡ï¼ç¨äºéç¥ç®æ å°åå ACK</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼ç ï¼ç¨äºç²¾ç¡®å®ä½</param> |
| | | /// <param name="layer">设å¤å±çº§ï¼å³å®è¯»åä¸å±è¿æ¯ä¸å±çè¯·æ±æ å¿</param> |
| | | private void HandleConstraintMachine(CommonConveyorLine conveyorLine, string childDeviceCode, Layer layer) |
| | | { |
| | | // ä»å
¨å±è®¾å¤åè¡¨ä¸æ¥æ¾å为"æææº"çæææºè®¾å¤å®ä¾ |
| | | var constraint = FindDevice<ConstraintMachine>("æææº"); |
| | | if (constraint == null) |
| | | { |
| | | // æªæ¾å°æææºè®¾å¤ï¼å·²å¨ FindDevice ä¸è®°å½æ¥å¿ï¼æ¤å¤ç´æ¥è¿å |
| | | return; |
| | | } |
| | | |
| | | // è·åå½åå±çº§ï¼ä¸å±/ä¸å±ï¼çç©æè¯·æ±æ å¿ï¼éé¶è¡¨ç¤ºè®¾å¤éè¦ç©æ |
| | | bool materialRequest = GetConstraintFlag(constraint, layer, isMaterial: true); |
| | | // è·åå½åå±çº§ï¼ä¸å±/ä¸å±ï¼çåºæè¯·æ±æ å¿ï¼éé¶è¡¨ç¤ºè®¾å¤æè´§è¦åº |
| | | bool outputRequest = GetConstraintFlag(constraint, layer, isMaterial: false); |
| | | |
| | | // æé 设置è¾åºå°±ç»ªæ å¿çå§æï¼æ ¹æ®å±çº§åå
¥ Upper æ Lower 对åºçå¯åå¨ï¼ |
| | | Action<bool> setOutputReady = outputReady => |
| | | SetConstraintOutputReady(constraint, layer, outputReady); |
| | | |
| | | // è°ç¨éç¨è¯·æ±å¤çé»è¾ï¼ä¼ å
¥è®¾å¤ç±»åæè¿°ç¨äºæ¥å¿è®°å½ |
| | | ProcessDeviceRequest(conveyorLine, childDeviceCode, materialRequest, outputRequest, setOutputReady, "æææº"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çææéæºçç©æ/åºæè¯·æ± |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// æ¥æ¾ææéæºè®¾å¤ï¼è·åå½åå±çº§çç©æè¯·æ±ååºæè¯·æ±ç¶æï¼ |
| | | /// ç¶åè°ç¨éç¨å¤çé»è¾ ProcessDeviceRequestã |
| | | /// </remarks> |
| | | /// <param name="conveyorLine">è¾é线设å¤å¯¹è±¡ï¼ç¨äºéç¥ç®æ å°åå ACK</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼ç ï¼ç¨äºç²¾ç¡®å®ä½</param> |
| | | /// <param name="layer">设å¤å±çº§ï¼å³å®è¯»åä¸å±è¿æ¯ä¸å±çè¯·æ±æ å¿</param> |
| | | private void HandlePinMachine(CommonConveyorLine conveyorLine, string childDeviceCode, Layer layer) |
| | | { |
| | | // ä»å
¨å±è®¾å¤åè¡¨ä¸æ¥æ¾å为"ææéæº"çææéæºè®¾å¤å®ä¾ |
| | | var pinMachine = FindDevice<PinMachine>("ææéæº"); |
| | | if (pinMachine == null) |
| | | { |
| | | // æªæ¾å°ææéæºè®¾å¤ï¼å·²å¨ FindDevice ä¸è®°å½æ¥å¿ï¼æ¤å¤ç´æ¥è¿å |
| | | return; |
| | | } |
| | | |
| | | // è·åå½åå±çº§ï¼ä¸å±/ä¸å±ï¼çç©æè¯·æ±æ å¿ï¼éé¶è¡¨ç¤ºè®¾å¤éè¦ç©æ |
| | | bool materialRequest = GetPinMachineFlag(pinMachine, layer, isMaterial: true); |
| | | // è·åå½åå±çº§ï¼ä¸å±/ä¸å±ï¼çåºæè¯·æ±æ å¿ï¼éé¶è¡¨ç¤ºè®¾å¤æè´§è¦åº |
| | | bool outputRequest = GetPinMachineFlag(pinMachine, layer, isMaterial: false); |
| | | |
| | | // æé 设置è¾åºå°±ç»ªæ å¿çå§æï¼æ ¹æ®å±çº§åå
¥ Upper æ Lower 对åºçå¯åå¨ï¼ |
| | | Action<bool> setOutputReady = outputReady => |
| | | SetPinMachineOutputReady(pinMachine, layer, outputReady); |
| | | |
| | | // è°ç¨éç¨è¯·æ±å¤çé»è¾ï¼ä¼ å
¥è®¾å¤ç±»åæè¿°ç¨äºæ¥å¿è®°å½ |
| | | ProcessDeviceRequest(conveyorLine, childDeviceCode, materialRequest, outputRequest, setOutputReady, "ææéæº"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥æ¾æå®åç§°çè®¾å¤ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// ä»å
¨å±è®¾å¤å表 Storage.Devices ä¸éè¿è®¾å¤ç±»åååç§°æ¥æ¾è®¾å¤å®ä¾ã |
| | | /// è¿æ¯ä¸ä¸ªæ³åæ¹æ³ï¼å¯ä»¥éç¨äº ConstraintMachineãPinMachine çå¤ç§è®¾å¤ç±»åã |
| | | /// </remarks> |
| | | /// <typeparam name="T">设å¤ç±»åï¼å¿
é¡»æ¯å¼ç¨ç±»åï¼å¦ ConstraintMachineãPinMachineï¼</typeparam> |
| | | /// <param name="deviceName">设å¤åç§°ï¼ç¨äºç²¾ç¡®å¹é
设å¤ç DeviceName 屿§</param> |
| | | /// <returns>æ¾å°ç设å¤å®ä¾ï¼æªæ¾å°åè¿å null</returns> |
| | | private T? FindDevice<T>(string deviceName) where T : class |
| | | { |
| | | // OfType<T>() çéåºæå®ç±»åç设å¤ï¼FirstOrDefault æå称精确å¹é
|
| | | var device = Storage.Devices.OfType<T>().FirstOrDefault(d => GetDeviceName(d) == deviceName); |
| | | if (device == null) |
| | | { |
| | | // è®¾å¤æªæ¾å°æ¶è®°å½è°è¯æ¥å¿ï¼æ¹ä¾¿ææ¥é
ç½®é®é¢ |
| | | _logger.Debug("FindDeviceï¼æªæ¾å° {DeviceName}", deviceName); |
| | | } |
| | | return device; // å¯è½ä¸º nullï¼ç±è°ç¨æ¹è´è´£ null æ£æ¥ |
| | | } |
| | | |
| | | /// <summary> |
| | | /// éè¿å¤æè·åä»»æè®¾å¤çåç§° |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// ä½¿ç¨ switch è¡¨è¾¾å¼æ ¹æ®è®¾å¤çå
·ä½ç±»åè·åå
¶ DeviceName 屿§ï¼ |
| | | /// é¿å
为æ¯ç§è®¾å¤ç±»åç¼åç¬ç«çå尿屿§è®¿é®ä»£ç ã |
| | | /// å½åæ¯æ ConstraintMachine å PinMachine 两ç§ç±»åã |
| | | /// </remarks> |
| | | /// <typeparam name="T">设å¤ç±»å</typeparam> |
| | | /// <param name="device">设å¤å®ä¾ï¼é空</param> |
| | | /// <returns>设å¤çåç§°å符串ï¼å¦æç±»åä¸å¹é
åè¿å空å符串</returns> |
| | | private static string GetDeviceName<T>(T device) where T : class |
| | | { |
| | | // 模å¼å¹é
ï¼æ ¹æ®è®¾å¤çå
·ä½è¿è¡æ¶ç±»åè¿å对åºç DeviceName |
| | | return device switch |
| | | { |
| | | ConstraintMachine cm => cm.DeviceName, // æææºè¿åå
¶è®¾å¤åç§° |
| | | PinMachine pm => pm.DeviceName, // ææéæºè¿åå
¶è®¾å¤åç§° |
| | | _ => string.Empty // æªç¥ç±»åè¿å空å符串ï¼ç论ä¸ä¸ä¼èµ°å°è¿éï¼ |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åæææºçè¯·æ±æ å¿ï¼ç©æè¯·æ±æåºæè¯·æ±ï¼ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// æ ¹æ® isMaterial åæ°å³å®è¯»åç©æè¯·æ±è¿æ¯åºæè¯·æ±å¯åå¨ï¼ |
| | | /// åæ ¹æ® layer åæ°å³å®è¯»åä¸å±ï¼Upperï¼è¿æ¯ä¸å±ï¼Lowerï¼å¯åå¨ã |
| | | /// è¿åå¼è¡¨ç¤ºè¯·æ±æ¯å¦ææï¼éé¶ä¸ºææï¼ã |
| | | /// </remarks> |
| | | /// <param name="constraint">æææºè®¾å¤å®ä¾ï¼ç¨äºè¯»å PLC å¯åå¨å¼</param> |
| | | /// <param name="layer">设å¤å±çº§ï¼å³å®è¯»å Upper è¿æ¯ Lower å¯åå¨</param> |
| | | /// <param name="isMaterial">true=读åç©æè¯·æ±æ å¿ï¼false=读ååºæè¯·æ±æ å¿</param> |
| | | /// <returns>è¯·æ±æ å¿æ¯å¦ææï¼true=æè¯·æ±ï¼false=æ 请æ±ï¼</returns> |
| | | private bool GetConstraintFlag(ConstraintMachine constraint, Layer layer, bool isMaterial) |
| | | { |
| | | // æ ¹æ® isMaterial 鿩坹åºçå¯åå¨å称对ï¼ç©æè¯·æ±æåºæè¯·æ±ï¼ |
| | | var (materialKey, outputKey) = isMaterial |
| | | ? (ConstraintMachineDBName.MaterialRequestUpper, ConstraintMachineDBName.MaterialRequestLower) // ç©æè¯·æ± |
| | | : (ConstraintMachineDBName.OutputRequestUpper, ConstraintMachineDBName.OutputRequestLower); // åºæè¯·æ± |
| | | |
| | | // æ ¹æ® layer éæ©å
·ä½ä½¿ç¨ Upper è¿æ¯ Lower çæ¬çå¯åå¨ |
| | | var key = layer == Layer.Upper ? materialKey : outputKey; |
| | | // 读åå¯åå¨å¼ï¼éé¶è¡¨ç¤ºæè¯·æ±ï¼è¿åå¸å°å¼ |
| | | return constraint.GetValue<ConstraintMachineDBName, short>(key) != 0; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åææéæºçè¯·æ±æ å¿ï¼ç©æè¯·æ±æåºæè¯·æ±ï¼ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// ä¸ GetConstraintFlag é»è¾ç¸åï¼ä½æä½å¯¹è±¡æ¯ææéæºï¼PinMachineï¼ã |
| | | /// æ ¹æ® isMaterial åæ°å³å®è¯»åç©æè¯·æ±è¿æ¯åºæè¯·æ±å¯åå¨ï¼ |
| | | /// åæ ¹æ® layer åæ°å³å®è¯»åä¸å±ï¼Upperï¼è¿æ¯ä¸å±ï¼Lowerï¼å¯åå¨ã |
| | | /// </remarks> |
| | | /// <param name="pinMachine">ææéæºè®¾å¤å®ä¾ï¼ç¨äºè¯»å PLC å¯åå¨å¼</param> |
| | | /// <param name="layer">设å¤å±çº§ï¼å³å®è¯»å Upper è¿æ¯ Lower å¯åå¨</param> |
| | | /// <param name="isMaterial">true=读åç©æè¯·æ±æ å¿ï¼false=读ååºæè¯·æ±æ å¿</param> |
| | | /// <returns>è¯·æ±æ å¿æ¯å¦ææï¼true=æè¯·æ±ï¼false=æ 请æ±ï¼</returns> |
| | | private bool GetPinMachineFlag(PinMachine pinMachine, Layer layer, bool isMaterial) |
| | | { |
| | | // æ ¹æ® isMaterial 鿩坹åºçå¯åå¨å称对ï¼ç©æè¯·æ±æåºæè¯·æ±ï¼ |
| | | var (materialKey, outputKey) = isMaterial |
| | | ? (PinMachineDBName.MaterialRequestUpper, PinMachineDBName.MaterialRequestLower) // ç©æè¯·æ± |
| | | : (PinMachineDBName.OutputRequestUpper, PinMachineDBName.OutputRequestLower); // åºæè¯·æ± |
| | | |
| | | // æ ¹æ® layer éæ©å
·ä½ä½¿ç¨ Upper è¿æ¯ Lower çæ¬çå¯åå¨ |
| | | var key = layer == Layer.Upper ? materialKey : outputKey; |
| | | // 读åå¯åå¨å¼ï¼éé¶è¡¨ç¤ºæè¯·æ±ï¼è¿åå¸å°å¼ |
| | | return pinMachine.GetValue<PinMachineDBName, short>(key) != 0; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®¾ç½®æææºçè¾åºå°±ç»ªæ å¿ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// åæææºç PLC å¯åå¨åå
¥è¾åºå°±ç»ªç¶æï¼åç¥æææºå¯ä»¥ç»§ç»åºæã |
| | | /// æ ¹æ® layer åæ°å³å®åå
¥ä¸å±ï¼ConstraintTrayOutputReadyUpperï¼è¿æ¯ä¸å±ï¼ConstraintTrayOutputReadyLowerï¼å¯åå¨ã |
| | | /// </remarks> |
| | | /// <param name="constraint">æææºè®¾å¤å®ä¾ï¼ç¨äºåå
¥ PLC å¯åå¨</param> |
| | | /// <param name="layer">设å¤å±çº§ï¼å³å®åå
¥ Upper è¿æ¯ Lower å¯åå¨</param> |
| | | /// <param name="outputReady">è¾åºå°±ç»ªç¶æï¼true=å¯ä»¥åºæï¼false=ä¸è½åºæ</param> |
| | | private void SetConstraintOutputReady(ConstraintMachine constraint, Layer layer, bool outputReady) |
| | | { |
| | | // æ ¹æ® layer 鿩坹åºçè¾åºå°±ç»ªå¯åå¨ï¼Upper æ Lowerï¼ |
| | | var key = layer == Layer.Upper |
| | | ? ConstraintMachineDBName.ConstraintTrayOutputReadyUpper // ä¸å±è¾åºå°±ç»ªå¯åå¨ |
| | | : ConstraintMachineDBName.ConstraintTrayOutputReadyLower; // ä¸å±è¾åºå°±ç»ªå¯åå¨ |
| | | // å PLC åå
¥å¼ï¼outputReady 为 true æ¶åå
¥ 1ï¼å¦ååå
¥ 0 |
| | | constraint.SetValue(key, outputReady ? true : false); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置ææéæºçè¾åºå°±ç»ªæ å¿ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// åææéæºç PLC å¯åå¨åå
¥è¾åºå°±ç»ªç¶æï¼åç¥ææéæºå¯ä»¥ç»§ç»åºæã |
| | | /// æ ¹æ® layer åæ°å³å®åå
¥ä¸å±ï¼PlugPinTrayOutputReadyUpperï¼è¿æ¯ä¸å±ï¼PlugPinTrayOutputReadyLowerï¼å¯åå¨ã |
| | | /// </remarks> |
| | | /// <param name="pinMachine">ææéæºè®¾å¤å®ä¾ï¼ç¨äºåå
¥ PLC å¯åå¨</param> |
| | | /// <param name="layer">设å¤å±çº§ï¼å³å®åå
¥ Upper è¿æ¯ Lower å¯åå¨</param> |
| | | /// <param name="outputReady">è¾åºå°±ç»ªç¶æï¼true=å¯ä»¥åºæï¼false=ä¸è½åºæ</param> |
| | | private void SetPinMachineOutputReady(PinMachine pinMachine, Layer layer, bool outputReady) |
| | | { |
| | | // æ ¹æ® layer 鿩坹åºçè¾åºå°±ç»ªå¯åå¨ï¼Upper æ Lowerï¼ |
| | | var key = layer == Layer.Upper |
| | | ? PinMachineDBName.PlugPinTrayOutputReadyUpper // ä¸å±è¾åºå°±ç»ªå¯åå¨ |
| | | : PinMachineDBName.PlugPinTrayOutputReadyLower; // ä¸å±è¾åºå°±ç»ªå¯åå¨ |
| | | // å PLC åå
¥å¼ï¼outputReady 为 true æ¶åå
¥ 1ï¼å¦ååå
¥ 0 |
| | | pinMachine.SetValue(key, outputReady ? true : false); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤ç设å¤è¯·æ±çæ ¸å¿é»è¾ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// æ ¹æ®ç©æè¯·æ±ååºæè¯·æ±çç¶æå³å®è¡ä¸ºï¼ |
| | | /// - å¦æè®¾å¤éè¦ç©æï¼materialRequest=trueï¼ï¼è®¾ç½®è¾é线çç®æ å°å为 1ï¼ææè¿æ¥ï¼å¹¶åå¤ ACK ç¡®è®¤ä¿¡å· |
| | | /// - å¦æè®¾å¤ä¸éè¦ç©æï¼materialRequest=falseï¼ï¼åéç¥è®¾å¤å¯ä»¥ç»§ç»åºæï¼setOutputReadyï¼ |
| | | /// |
| | | /// è¿æ¯æææºåææéæºå
±ç¨çå¤çé»è¾ï¼è®¾å¤ç¹æçé¨å已卿¤æ¹æ³å¤å°è£
ã |
| | | /// </remarks> |
| | | /// <param name="conveyorLine">è¾é线设å¤å¯¹è±¡ï¼ç¨äºåå
¥ç®æ å°åï¼Targetï¼å ACK ä¿¡å·</param> |
| | | /// <param name="childDeviceCode">å设å¤ç¼ç ï¼ç¨äºç²¾ç¡®å®ä½åå
¥åªä¸ªå设å¤</param> |
| | | /// <param name="materialRequest">ç©æè¯·æ±æ å¿ï¼true=设å¤å½åéè¦è¡¥å
ç©æ</param> |
| | | /// <param name="outputRequest">åºæè¯·æ±æ å¿ï¼true=设å¤å½åæç©æéè¦è¾åºï¼é
å materialRequest=false æ¶ä½¿ç¨ï¼</param> |
| | | /// <param name="setOutputReady">设置设å¤è¾åºå°±ç»ªæ å¿çå§æï¼æ ¹æ®å±çº§åå
¥ Upper æ Lower å¯åå¨</param> |
| | | /// <param name="deviceType">设å¤ç±»åæè¿°å符串ï¼ç¨äºæ¥å¿è¾åº</param> |
| | | private void ProcessDeviceRequest( |
| | | CommonConveyorLine conveyorLine, |
| | | string childDeviceCode, |
| | | bool materialRequest, |
| | | bool outputRequest, |
| | | Action<bool> setOutputReady, |
| | | string deviceType) |
| | | { |
| | | // è®°å½å½å请æ±ç¶æçè°è¯æ¥å¿ï¼ä¾ææ¥é®é¢ä½¿ç¨ |
| | | QuartzLogHelper.LogDebug(_logger, "ProcessDeviceRequestï¼{DeviceType}ï¼å设å¤: {ChildDeviceCode}ï¼ç©æè¯·æ±: {MaterialReq}ï¼åºæè¯·æ±: {OutputReq}", $"ProcessDeviceRequestï¼{deviceType}ï¼å设å¤: {childDeviceCode}ï¼ç©æè¯·æ±: {materialRequest}ï¼åºæè¯·æ±: {outputRequest}", conveyorLine.DeviceCode, deviceType, childDeviceCode, materialRequest, outputRequest); |
| | | |
| | | // 忝夿ï¼è®¾å¤æ¯éè¦ç©æè¿æ¯éè¦åºæ |
| | | if (materialRequest) |
| | | { |
| | | // 设å¤éè¦ç©æ -> éç¥è¾é线ææè¿æ¥ |
| | | // 1. è®¾ç½®ç®æ å°å为 1ï¼è¡¨ç¤º"ææè¿å
¥" |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.Target, 1, childDeviceCode); |
| | | // 2. åå¤ ACK 确认信å·ï¼åç¥è®¾å¤å·²æ¶å°è¯·æ± |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode); |
| | | // 3. è®°å½ä¿¡æ¯æ¥å¿ï¼è¡¨æå·²å®æç®æ å°å设置å ACK åå¤ |
| | | QuartzLogHelper.LogInfo(_logger, "ProcessDeviceRequestï¼{DeviceType} éè¦ç©æï¼å·²è®¾ç½®ç®æ å°ååACK", $"ProcessDeviceRequestï¼{deviceType} éè¦ç©æï¼å·²è®¾ç½®ç®æ å°ååACK", conveyorLine.DeviceCode, deviceType); |
| | | } |
| | | else |
| | | { |
| | | // 设å¤ä¸éè¦ç©æ -> éç¥è®¾å¤å¯ä»¥ç»§ç»åºæï¼æ 论å½åæ¯å¦æè´§è¦åºï¼é½è¦éç¥ï¼ |
| | | // outputRequest 表示设å¤å½åæ¯å¦ç¡®å®æè´§ï¼å¦ææ²¡æè´§å outputReady=falseï¼è®¾å¤æ¶å°åçå¾
|
| | | setOutputReady(outputRequest); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// åå
¥è°è¯æ¥å¿ï¼åæ¶è¾åºå°ä¸¤ä¸ªæ¥å¿ç³»ç»ï¼ |
| | | /// </summary> |
| | |
| | | var isTaskNum = conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, (short)task.TaskNum, childDeviceCode); |
| | | if (!isTaskNum) return; |
| | | QuartzLogHelper.LogInfo(_logger, $"ä»»å¡å·åå
¥PLCæåï¼ä»»å¡å·ã{task.TaskNum}ã", conveyorLine.DeviceCode); |
| | | Thread.Sleep(500); |
| | | |
| | | //// åå
¥èµ·å§å°å |
| | | //conveyorLine.SetValue(ConveyorLineDBNameNew.Source, short.Parse(task.SourceAddress ?? "0"), childDeviceCode); |
| | | //QuartzLogHelper.LogInfo(_logger, $"ä»»å¡å·åå
¥PLCæåï¼ä»»å¡å·ã{task.TaskNum}ã", conveyorLine.DeviceCode); |
| | | //Thread.Sleep(500); |
| | | Thread.Sleep(100); |
| | | |
| | | // åå
¥ç®æ å°å |
| | | var isTarget = conveyorLine.SetValue(ConveyorLineDBNameNew.Target, short.Parse(task.NextAddress ?? "0"), childDeviceCode); |
| | | if (!isTarget) return; |
| | | QuartzLogHelper.LogInfo(_logger, $"ç®æ å°ååå
¥PLCæåï¼ç®æ å°åã{task.NextAddress}ã", conveyorLine.DeviceCode); |
| | | Thread.Sleep(500); |
| | | |
| | | // åå
¥æçå· |
| | | //conveyorLine.SetValue(ConveyorLineDBNameNew.Barcode, task.PalletCode, childDeviceCode); |
| | | Thread.Sleep(100); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸é¶æ®µ |
| | | var updateResult = _taskService.UpdateTaskStatusToNext(task); |
| | |
| | | // åå
¥ACKæ å¿ |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | |
| | | QuartzLogHelper.LogInfo(_logger, $"ManualInboundTaskHandler: æå¨ä»»å¡åå
¥PLCæåï¼ä»»å¡å·ã{task.TaskNum}ãï¼æºå°åã{task.SourceAddress}ãï¼ç®æ å°åã{task.NextAddress}ã", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, $"ManualInboundTaskHandler: ä»»å¡åå
¥PLCæåï¼ä»»å¡å·ã{task.TaskNum}ãï¼æºå°åã{task.SourceAddress}ãï¼ç®æ å°åã{task.NextAddress}ã", conveyorLine.DeviceCode); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | return false; |
| | | } |
| | | |
| | | // è§£æè¿åçä»»å¡ä¿¡æ¯ |
| | | //var taskInfos = JsonConvert.DeserializeObject<List<Dt_Task>>(content.Data.ToJson() ?? string.Empty) ?? new List<Dt_Task>(); |
| | | //var taskInfo = taskInfos.FirstOrDefault(); |
| | | |
| | | //// è·åæºå°å |
| | | //string sourceAddress = taskDTO.SourceAddress; |
| | | |
| | | //// æ¥æ¾æºå°å对åºçè¾éçº¿è®¾å¤ |
| | | //IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceAddress)); |
| | | |
| | | //if (device != null) |
| | | //{ |
| | | // // å°è®¾å¤è½¬æ¢ä¸ºè¾é线类å |
| | | // CommonConveyorLine conveyorLine = (CommonConveyorLine)device; |
| | | |
| | | // // 设置è¾é线çç®æ å°å |
| | | // conveyorLine.SetValue(ConveyorLineDBNameNew.Target, taskInfo.NextAddress, sourceAddress); |
| | | |
| | | // // 设置è¾é线çä»»å¡å· |
| | | // conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, taskInfo.TaskNum, sourceAddress); |
| | | |
| | | // // 触åè¾é线å¼å§æ§è¡ï¼åå
¥ WCS_ACK = 1ï¼ |
| | | // conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, sourceAddress); |
| | | |
| | | // // æ´æ°ä»»å¡ç¶æå°ä¸ä¸é¶æ®µ |
| | | // if (_taskService.UpdateTaskStatusToNext(taskInfo).Status) |
| | | // { |
| | | // _logger.LogInformation("HandleInboundTaskAsyncï¼å
¥åºä»»å¡å¤çæåï¼ä»»å¡å·: {TaskNum}", taskInfo.TaskNum); |
| | | // QuartzLogger.Info($"HandleInboundTaskAsyncï¼å
¥åºä»»å¡å¤çæåï¼ä»»å¡å·: {taskInfo.TaskNum}", state.RobotCrane?.DeviceName ?? "Unknown"); |
| | | // return true; |
| | | // } |
| | | //} |
| | | |
| | | return true; |
| | | } |
| | | |
| | |
| | | { |
| | | // å
è¿è¡æ¬å°ç«å°æ£æ¥ï¼PLC 读åï¼å¿«éï¼ï¼é¿å
ä¸å¿
è¦ç WMS HTTP è°ç¨ |
| | | |
| | | // 夿 TargetAddress è¾é线ç«å°æ¯å¦ç©ºé² |
| | | if (!IsTargetAddressConveyorStationAvailable(outboundTask)) |
| | | if (outboundTask.TaskType != (int)TaskOutboundTypeEnum.OutEmpty) |
| | | { |
| | | return null; |
| | | // 夿 TargetAddress è¾é线ç«å°æ¯å¦ç©ºé² |
| | | if (!IsTargetAddressConveyorStationAvailable(outboundTask)) |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | // 夿 NextAddress åºåºç«å°æ¯å¦å¯ç¨ |
| | |
| | | PalletType = stock.PalletType, |
| | | SourceAddress = stock.LocationCode, |
| | | CurrentAddress = stock.LocationCode, |
| | | NextAddress = TaskAddressConstants.DEFAULT_ADDRESS, |
| | | NextAddress = TaskAddressConstants.GRADING_OUTBOUND_ADDRESS, |
| | | TargetAddress = TaskAddressConstants.GRADING_OUTBOUND_ADDRESS, |
| | | Roadway = stock.LocationDetails.RoadwayNo, |
| | | TaskType = TaskOutboundTypeEnum.Outbound.GetHashCode(), |
| | |
| | | { |
| | | var result = await BaseDal.AddDataAsync(taskList) > 0; |
| | | var wmstaskDto = result ? _mapper.Map<WMSTaskDTO>(taskList) : null; |
| | | |
| | | var httpResponse = _httpClientHelper.Post<WebResponseContent>("http://logistics-service/api/logistics/notifyoutbound", JsonSerializer.Serialize(wmstaskDto)).Data; |
| | | var wmsTaskDtos = new List<WMSTaskDTO> { wmstaskDto }; |
| | | var httpResponse = _httpClientHelper.Post<WebResponseContent>("http://localhost:9292/api/Task/ReceiveTask", JsonSerializer.Serialize(wmsTaskDtos)).Data; |
| | | if (result && httpResponse != null) |
| | | { |
| | | return content.OK("åºåºè¯·æ±æå"); |
| | |
| | | // è¿æ»¤æä½ç½®ä¸ä½ç½®æåºåçè®°å½ |
| | | expiredStocks = expiredStocks |
| | | .Where(s => s.LocationDetails != null |
| | | && s.LocationDetails.LocationStatus == LocationStatusEnum.InStock.GetHashCode()) |
| | | && s.LocationDetails.LocationStatus == LocationStatusEnum.InStock.GetHashCode() |
| | | && s.LocationDetails.EnableStatus != EnableStatusEnum.Disable.GetHashCode()) |
| | | .ToList(); |
| | | |
| | | if (!expiredStocks.Any()) |
| | |
| | | var stockInfo = await _stockInfoService.GetStockInfoAsync(taskDto.PalletCode); |
| | | if (stockInfo == null) return WebResponseContent.Instance.Error("æªæ¾å°å¯¹åºåºåä¿¡æ¯"); |
| | | |
| | | stockInfo.LocationCode = location.LocationCode; |
| | | stockInfo.LocationId = location.Id; |
| | | stockInfo.StockStatus = StockStatusEmun.空æçåºå.GetHashCode(); |
| | | |
| | | location.LocationStatus = LocationStatusEnum.InStock.GetHashCode(); |
| | | |
| | | return await _unitOfWorkManage.BeginTranAsync(async () => |
| | | { |
| | | stockInfo.LocationCode = location.LocationCode; |
| | | stockInfo.LocationId = location.Id; |
| | | stockInfo.StockStatus = StockStatusEmun.空æçåºå.GetHashCode(); |
| | | |
| | | location.LocationStatus = LocationStatusEnum.InStock.GetHashCode(); |
| | | |
| | | var updateLocationResult = await _locationInfoService.UpdateLocationInfoAsync(location); |
| | | var updateStockResult = await _stockInfoService.UpdateStockAsync(stockInfo); |
| | | if (!updateLocationResult || !updateStockResult) |
| | |
| | | "id": "1001", |
| | | "name": "A\u533A_\u4E00\u6CE8\u8F93\u9001\u7EBF", |
| | | "plcType": "S71500", |
| | | "port": 103, |
| | | "port": 102, |
| | | "activationKey": "", |
| | | "autoStart": false, |
| | | "protocolTemplateId": "protocol-1001", |
| | |
| | | "id": "1002", |
| | | "name": "A\u533A_\u6362\u76D8\u8F93\u9001\u7EBF", |
| | | "plcType": "S71500", |
| | | "port": 104, |
| | | "port": 102, |
| | | "activationKey": "", |
| | | "autoStart": false, |
| | | "protocolTemplateId": "protocol-1002", |
| | |
| | | "direction": 2 |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "id": "protocol-1004", |
| | | "name": "B\u533A_\u5E38\u6E29\u5316\u6210\u8F93\u9001\u7EBF \u534F\u8BAE\u6A21\u677F", |
| | | "version": "1.0", |
| | | "fields": [ |
| | | { |
| | | "fieldKey": "2125_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 960, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_Source", |
| | | "dbNumber": 50, |
| | | "offset": 962, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_Target", |
| | | "dbNumber": 50, |
| | | "offset": 964, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 966, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 967, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 968, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 969, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 970, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 971, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 972, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 973, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 974, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 975, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 976, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 977, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 978, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 998, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2125_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 999, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 4640, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_Source", |
| | | "dbNumber": 50, |
| | | "offset": 4642, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_Target", |
| | | "dbNumber": 50, |
| | | "offset": 4644, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 4646, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 4647, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4648, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4649, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4650, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4651, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4652, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 4653, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4654, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 4655, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 4656, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 4657, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 4658, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 4678, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2217_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 4679, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 0, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_Source", |
| | | "dbNumber": 50, |
| | | "offset": 2, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_Target", |
| | | "dbNumber": 50, |
| | | "offset": 4, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 6, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 7, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 8, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 9, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 10, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 11, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 12, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 13, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 14, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 15, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 16, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 17, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 18, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 38, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2101_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 39, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 80, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_Source", |
| | | "dbNumber": 50, |
| | | "offset": 82, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_Target", |
| | | "dbNumber": 50, |
| | | "offset": 84, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 86, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 87, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 88, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 89, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 90, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 91, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 92, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 93, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 94, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 95, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 96, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 97, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 98, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 118, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2103_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 119, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 680, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_Source", |
| | | "dbNumber": 50, |
| | | "offset": 682, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_Target", |
| | | "dbNumber": 50, |
| | | "offset": 684, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 686, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 687, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 688, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 689, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 690, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 691, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 692, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 693, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 694, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 695, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 696, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 697, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 698, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 718, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2118_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 719, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 640, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_Source", |
| | | "dbNumber": 50, |
| | | "offset": 642, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_Target", |
| | | "dbNumber": 50, |
| | | "offset": 644, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 646, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 647, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 648, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 649, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 650, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 651, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 652, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 653, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 654, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 655, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 656, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 657, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 658, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 678, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2117_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 679, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 4320, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_Source", |
| | | "dbNumber": 50, |
| | | "offset": 4322, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_Target", |
| | | "dbNumber": 50, |
| | | "offset": 4324, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 4326, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 4327, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4328, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4329, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4330, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4331, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4332, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 4333, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4334, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 4335, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 4336, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 4337, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 4338, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 4358, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2209_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 4359, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 4360, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_Source", |
| | | "dbNumber": 50, |
| | | "offset": 4362, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_Target", |
| | | "dbNumber": 50, |
| | | "offset": 4364, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 4366, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 4367, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4368, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4369, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4370, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4371, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4372, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 4373, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4374, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 4375, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 4376, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 4377, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 4378, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 4398, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2210_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 4399, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 760, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_Source", |
| | | "dbNumber": 50, |
| | | "offset": 762, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_Target", |
| | | "dbNumber": 50, |
| | | "offset": 764, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 766, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 767, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 768, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 769, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 770, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 771, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 772, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 773, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 774, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 775, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 776, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 777, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 778, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 798, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2120_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 799, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 4400, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_Source", |
| | | "dbNumber": 50, |
| | | "offset": 4402, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_Target", |
| | | "dbNumber": 50, |
| | | "offset": 4404, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 4406, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 4407, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4408, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4409, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4410, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4411, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4412, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 4413, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4414, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 4415, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 4416, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 4417, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 4418, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 4438, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2211_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 4439, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_TaskNo", |
| | | "dbNumber": 50, |
| | | "offset": 4480, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_Source", |
| | | "dbNumber": 50, |
| | | "offset": 4482, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_Target", |
| | | "dbNumber": 50, |
| | | "offset": 4484, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_BoxType", |
| | | "dbNumber": 50, |
| | | "offset": 4486, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_CV_State", |
| | | "dbNumber": 50, |
| | | "offset": 4487, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_CV_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4488, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_WCS_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4489, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_WCS_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4490, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_PLC_STB", |
| | | "dbNumber": 50, |
| | | "offset": 4491, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_PLC_ACK", |
| | | "dbNumber": 50, |
| | | "offset": 4492, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_PLC_REQ", |
| | | "dbNumber": 50, |
| | | "offset": 4493, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_WCS_ERRCode", |
| | | "dbNumber": 50, |
| | | "offset": 4494, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_WCS_Special", |
| | | "dbNumber": 50, |
| | | "offset": 4495, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_Equ_Auto", |
| | | "dbNumber": 50, |
| | | "offset": 4496, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_Last_pallet", |
| | | "dbNumber": 50, |
| | | "offset": 4497, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_Barcode", |
| | | "dbNumber": 50, |
| | | "offset": 4498, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 20, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_Spare_1", |
| | | "dbNumber": 50, |
| | | "offset": 4518, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "2213_Spare_2", |
| | | "dbNumber": 50, |
| | | "offset": 4519, |
| | | "bit": 1, |
| | | "dataType": 0, |
| | | "length": 1, |
| | | "direction": 2 |
| | | } |
| | | ] |
| | | } |
| | | ] |