xiaojiao
2025-12-26 4279cb4384f7f960d87af8b8ad9db73c2dececa3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using HslCommunication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using WIDESEA_Common;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.Tools;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Services;
using WIDESEA_Services.IRepositories;
using WIDESEA_Services.Repositories;
using WIDESEA_Services.Services;
using WIDESEA_WCS.WCSClient;
 
namespace WIDESEA_WCS.Jobs.ConveyorLine.OutboundArea
{
    public partial class OutboundAreaDispatch
    {
 
        public static void OutboundCZ_PLC(IDt_TaskWCSinfoRepository taskWCSinfoRepository,IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
        {
            Dt_TaskWCSinfo hisTask = taskWCSinfoRepository.Find(r => r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString() || r.wcstask_state == TaskState.TaskState_Empty_Out_RGV_Finished.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())
                .Where(r => OutboundStationLayerNo.Contains(r.wcstask_startPoint) && (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) || r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))).OrderBy(x => x.wcstask_dispatcherTime).FirstOrDefault();
            if (null != hisTask)
            {
                OutboundRequestAction(taskWCSinfoRepository, client);
            }
        }
 
        /// <summary>
        /// 出库区空托盘出库
        /// </summary>
        /// <param name="taskWCSinfoRepository"></param>
        /// <param name="client"></param>
        public static bool OutboundRequestAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, PLCClient client)
        {
            string lineCode = "OutboundArea";
            try
            {
                string rfidResult = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), lineCode).ToString();
                //查询出库待任务
                Dt_TaskWCSinfo wcsInfo = null;
                if (!string.IsNullOrEmpty(rfidResult) && !"0".Equals(rfidResult))
                    wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult && (r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString() 
                    || r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString() || r.wcstask_state == TaskState.TaskState_Empty_Out_RGV_Finished.ToString()));
                //wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult && r.wcstask_state == TaskState.TaskState_Assigned.ToString());
                else
                {
                    wcsInfo = taskWCSinfoRepository.Find(r => (r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString() || r.wcstask_state == TaskState.TaskState_Empty_Out_RGV_Finished.ToString()
                    || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString()) && OutboundStationLayerNo.Contains(r.wcstask_startPoint)).OrderBy(r => r.wcstask_createTime).FirstOrDefault();
                }
                if (null == wcsInfo)
                    return false;
 
                //读取逻辑控制值  查看线体状态,准备给线体下发任务信息
                int logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), lineCode).ToString());
                //说明工位在等待调度,准备下发任务
                if (logicValue == 1 || logicValue == 2)
                {
                    if (!wcsInfo.wcstask_state.Contains("Executing"))
                    {
                        //写入托盘条码
                        bool writeTaskNumber = client.WriteValue(CLineInfoDBName.W_Line_TaskNumber.ToString(), wcsInfo.wcstask_startPoint, wcsInfo.wcstask_taskNumber);
                        bool writeBarcode = client.WriteValue(CLineInfoDBName.W_Line_Barcode.ToString(), wcsInfo.wcstask_startPoint, wcsInfo.wcstask_barcode);
                        WriteTaskInfo.WriteTaskInfoAction(wcsInfo, client, lineCode);
                    }
                }
                else if (logicValue == 3)
                {
                    //启动任务
                   bool plclogicbool=client.WriteValue(CLineInfoDBName.W_Line_Logic.ToString(), lineCode, 1);
                   if(plclogicbool)
                   {
                        string state = TaskState.TaskState_HoisterExecuting.ToString();
                        if (wcsInfo.wcstask_state == state)
                            return true;
                        wcsInfo.wcstask_state = state;
                        wcsInfo.wcstask_dispatcherTime = DateTime.Now;
                        taskWCSinfoRepository.Update(wcsInfo, true);
                    }
 
                }
                else if (logicValue == 4 || logicValue == 5)
                {
                    string taskplc_Result = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), lineCode).ToString();
                    if(taskplc_Result== wcsInfo.wcstask_barcode)
                    {
                        string state = TaskState.TaskState_Box_Out_Line_Executing.ToString();
                        if (wcsInfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
                        {
                            state = TaskState.TaskState_Empty_Out_Line_Executing.ToString();
                        }
                        if (wcsInfo.wcstask_state == state)
                            return true;
                        wcsInfo.wcstask_state = state;
                        wcsInfo.wcstask_dispatcherTime = DateTime.Now;
                        taskWCSinfoRepository.Update(wcsInfo, true);
                    }
                    else
                    {
                        Dt_TaskWCSinfo wcsInfoPLC = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult && r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString());
                        if (wcsInfoPLC != null)
                        {
                            string state = TaskState.TaskState_Box_Out_Line_Executing.ToString();
                            if (wcsInfoPLC.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
                            {
                                state = TaskState.TaskState_Empty_Out_Line_Executing.ToString();
                            }
 
                            
                            if (wcsInfoPLC.wcstask_state == state)
                                return true;
                            wcsInfoPLC.wcstask_state = state;
                            wcsInfoPLC.wcstask_dispatcherTime = DateTime.Now;
                            taskWCSinfoRepository.Update(wcsInfoPLC, true);
                        }
                    }
 
                    
                }
            }
            catch (Exception ex)
            {
                WriteLog.Info(lineCode).Write($"{ DateTime.Now }出库站台调度失败:{ex.Message}", lineCode);
            }
            return true;
        }
    }
}