Admin
2026-03-26 dea22f4759b5c8a4f79a3e93e5af1741f5e00ae4
ÏîÄ¿´úÂë/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WMSTaskService.cs
@@ -158,14 +158,21 @@
            ApiResponse apiResponse = new ApiResponse();
            try
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1002");
                if (device == null) return apiResponse.ErrorResponse("WCS未能获取到库口实例");
                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                Dictionary<string, int> portStatusDict = new Dictionary<string, int>();
                foreach (string DeStateName in datas)
                {
                    string DeciceCodes = "1003";
                    if (DeStateName.StartsWith("C")) DeciceCodes = "1004";
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeciceCodes);
                    if (device == null) return apiResponse.ErrorResponse("WCS未能获取到库口实例");
                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                    //是否可进出
                    DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeStateName && x.DeviceProParamName == "PermitHandShake");
                    //是否有货
@@ -173,8 +180,10 @@
                    if (deviceProDTO == null || StationNumProDTO ==null) return apiResponse.ErrorResponse($"WCS未找到库口:{DeStateName},对应的协议");
                    int statusValue = 0;
                    int portStatus = conveyorLine.Communicator.Read<int>(deviceProDTO.DeviceProAddress);
                    int StationStatus = conveyorLine.Communicator.Read<int>(StationNumProDTO.DeviceProAddress);
                    //1允许取  2允许放
                    int portStatus = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
                    //是否有货
                    int StationStatus = conveyorLine.Communicator.Read<ushort>(StationNumProDTO.DeviceProAddress);
                    //有货,可进信号
                    statusValue = ((portStatus == 1 && StationStatus == 1) || (portStatus == 2 && StationStatus == 0)) ? 1 : (portStatus == 0) ? 0 : 0;
@@ -240,52 +249,45 @@
            ApiResponse apiResponse = new ApiResponse();
            try
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1002");
                string DeciceCodes = "1003";
                if (agvUpdateRequest.warehousenumber.StartsWith("C")) DeciceCodes = "1004";
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeciceCodes);
                if (device == null) return apiResponse.ErrorResponse("WCS未能获取到库口实例");
                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                //是否可进出
                DeviceProDTO? HandShake = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "HandShake");
                if (HandShake == null) return apiResponse.ErrorResponse($"WCS未找到库口:{agvUpdateRequest.warehousenumber},对应的协议");
                
                if (agvUpdateRequest.agvstatus == 1)
                {
                    //是否可进出
                    DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "PermitHandShake");
                    //是否有货
                    DeviceProDTO? StationNumProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "StationNum");
                    if (deviceProDTO == null || StationNumProDTO == null) return apiResponse.ErrorResponse($"WCS未找到库口:{agvUpdateRequest.warehousenumber},对应的协议");
                    int statusValue = 0;
                    int portStatus = conveyorLine.Communicator.Read<int>(deviceProDTO.DeviceProAddress);
                    int StationStatus = conveyorLine.Communicator.Read<int>(StationNumProDTO.DeviceProAddress);
                    //有货,可进信号
                    statusValue = ((portStatus == 1 && StationStatus == 1) || (portStatus == 2 && StationStatus == 0)) ? 1 : (portStatus == 0) ? 0 : 0;
                    if (statusValue == 1)
                    {//写入输送线信号
                        bool HandShakebool = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1);
                        if (HandShakebool)
                    //写入plc,agv进入信号
                    bool HandShakebool = conveyorLine.Communicator.Write<short>(HandShake.DeviceProAddress, 1);
                    if (HandShakebool)
                    {
                        //是否可进出    1允许取  2允许放
                        DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "PermitHandShake");
                        //是否有货
                        DeviceProDTO? StationNumProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == agvUpdateRequest.warehousenumber && x.DeviceProParamName == "StationNum");
                        if (deviceProDTO == null || StationNumProDTO == null) return apiResponse.ErrorResponse($"WCS未找到库口:{agvUpdateRequest.warehousenumber},对应的协议");
                        int statusValue = 0;
                        int portStatus = conveyorLine.Communicator.Read<ushort>(deviceProDTO.DeviceProAddress);
                        int StationStatus = conveyorLine.Communicator.Read<ushort>(StationNumProDTO.DeviceProAddress);
                        //有货,可进信号
                        statusValue = ((portStatus == 1 && StationStatus == 1) || (portStatus == 2 && StationStatus == 0)) ? 1 : (portStatus == 0) ? 0 : 0;
                        if (statusValue == 1)
                        {
                            return apiResponse.SuccessResponse();
                        }
                        else
                        {
                            return apiResponse.ErrorResponse("agv写入plc申请失败");
                            return apiResponse.ErrorResponse("读取plc不可进入信息");
                        }
                    }
                    else
                    {
                        return apiResponse.ErrorResponse("读取plc不可进入信息");
                        return apiResponse.ErrorResponse("写入plc进入信号失败");
                    }
                }
                else if(agvUpdateRequest.agvstatus == 2)