Admin
20 小时以前 1cd9280bbecf557f8978ad3839f14827ff9f4d34
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
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.FindFirst(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)));
            if (null != hisTask)
            {
                if (hisTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) || hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
                {
                    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()));
                //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()
                              && 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_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_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;
        }
    }
}