1
zhangchengsong
7 小时以前 eb429870f6f164f7e150beb5ef940610a40f897f
ÏîÄ¿´úÂë/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -60,11 +60,15 @@
        {
            try
            {
                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (commonStackerCrane != null)
                {
                    WriteLog.Write_Log("堆垛机当前状态", $"{commonStackerCrane.DeviceCode}库堆垛机状态信息",
                         $"堆垛机设备地址:【DB105.2.0】,读取的数据:【{commonStackerCrane.StackerCraneAutoStatusDes}】\n" +
                         $"堆垛机工作模式地址:【DB105.3.0】,读取的数据:【{commonStackerCrane.StackerCraneStatusDes}】\n" +
                         $"堆垛机作业状态地址:【DB105.22.0】,读取的数据:【{commonStackerCrane.StackerCraneWorkStatusDes}】\n" +
                         $"堆垛机当前任务执行中地址:【DB105.18.0】,读取的数据:【{commonStackerCrane.CurrentTaskNum}】\n");
                    UpdateHandShake(commonStackerCrane.CurrentTaskNum, commonStackerCrane.StackerCraneWorkStatusDes);
                    //任务完成StackerCraneWorkStatus
@@ -96,13 +100,6 @@
                        }
                    }
                    WriteLog.Write_Log("堆垛机当前状态", "堆垛机当前状态信息", $"堆垛机设备地址:【DB105.2.0】,读取的数据:【{commonStackerCrane.StackerCraneAutoStatusDes}】\n" +
                           $"堆垛机工作模式地址:【DB105.3.0】,读取的数据:【{commonStackerCrane.StackerCraneStatusDes}】\n" +
                           $"堆垛机作业状态地址:【DB105.22.0】,读取的数据:【{commonStackerCrane.StackerCraneWorkStatusDes}】\n" +
                           $"堆垛机当前任务执行中地址:【DB105.18.0】,读取的数据:【{commonStackerCrane.CurrentTaskNum}】\n");
                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
@@ -123,6 +120,8 @@
                                        commonStackerCrane.Communicator.Write("DB105.52", 1);
                                        WebResponseContent webResponseContent=_taskService.UpdateTaskStatusToNext(task.TaskNum);
                                        //延迟1s
                                        Thread.Sleep(1000);
                                    }
                                }
                            }
@@ -220,7 +219,6 @@
                    int StationNum = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
                    int HandShake = conveyorLine.Communicator.Read<ushort>(HandShakeprodto.DeviceProAddress);
                     conveyorLine.Communicator.Write<short>(HandShakeprodto.DeviceProAddress, 1);
                    WriteLog.Write_Log("出库库口状态信息", "出库库口状态信息", $"库口是【{NextAddress}】,申请状态地址:【{HandShakeprodto.DeviceProAddress}】,读取的数据:【{HandShake}】\n" +
                         $"库口是否有货状态地址:【{deviceProDTO.DeviceProAddress}】,读取的数据【{StationNum}】");
@@ -451,53 +449,39 @@
        /// <param name="stackerCraneWorkStatusDes"></param>
        public void UpdateHandShake(int taskNum, string stackerCraneWorkStatusDes)
        {
            // 1. æŸ¥è¯¢ä»»åŠ¡ï¼Œç©ºå€¼ç›´æŽ¥è¿”å›ž
            try
            {
            Dt_Task? dtTask = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
            if (dtTask == null) return;
            // 2. å®šä¹‰å›ºå®šåœ°å€
            string[] targetAddresses = { "G03", "G04", "C02", "C01" };
                if (dtTask.TaskType != 100 || !targetAddresses.Contains(dtTask.TargetAddress))
                    return;
            // 3. æ¡ä»¶åˆ¤æ–­ + ç¡®å®šå†™å…¥å€¼
            short writeValue = -1;
            if (dtTask.TaskType == 100 && targetAddresses.Contains(dtTask.TargetAddress))
            {
                writeValue = stackerCraneWorkStatusDes switch
                short writeValue = stackerCraneWorkStatusDes switch
                {
                    "放货中" => 1,
                    "任务完成" => 0,
                    _ => -1
                };
            }
            // 4. èŽ·å–è®¾å¤‡ç¼–ç 
                if (writeValue == -1) return;
            string deviceCode = dtTask.CurrentAddress.StartsWith("C") ? "1004" : "1003";
            // 5. èŽ·å–è®¾å¤‡ï¼Œç©ºå€¼ç›´æŽ¥è¿”å›ž
            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == deviceCode);
            if (device != null && writeValue != -1)
            {
                CommonConveyorLine? conveyorLine = (CommonConveyorLine)device;
                if (device == null) return;
                // 6. èŽ·å–æ¡æ‰‹ç‚¹ä½ï¼Œç©ºå€¼ç›´æŽ¥è¿”å›ž
                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                DeviceProDTO? handShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == dtTask.TargetAddress && x.DeviceProParamName == "HandShake");
                if (handShake == null)
                {
                    WriteLog.Write_Log("出库库口光栅状态错误信息", "出库库口光栅状态错误信息", $"WCS未找到库口信息是【{dtTask.TargetAddress}】,任务号:【{dtTask.TaskNum}】,堆垛机作业状态:【{stackerCraneWorkStatusDes}】");
                    return;
                }
                    // 7. å†™å…¥å€¼
                if (handShake == null) return;
                 conveyorLine.Communicator.Write<short>(handShake.DeviceProAddress, writeValue);
                WriteLog.Write_Log("出库库口光栅状态正常信息", "出库库口光栅状态正常信息", $"库口是【{dtTask.TargetAddress}】,申请状态地址:【{handShake.DeviceProAddress}】,读取的数据:【{conveyorLine.Communicator.Read<ushort>(handShake.DeviceProAddress)}】\n" +
                 $"任务号:【{dtTask.TaskNum}】,堆垛机作业状态:【{stackerCraneWorkStatusDes}】");
                return;
            }
            else
            catch
            {
                WriteLog.Write_Log("出库库口光栅状态错误信息", "出库库口光栅状态错误信息", $"库口是【{dtTask.TargetAddress}】,任务号:【{dtTask.TaskNum}】,堆垛机作业状态:【{stackerCraneWorkStatusDes}】");
                return;
            }
           
        }
    }