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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.LocationEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Common;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_QuartzJob;
 
namespace WIDESEAWCS_Tasks
{
    public partial class TestJob
    {
        /// <summary>
        /// 四向车质检任务
        /// </summary>
        /// <param name="device"></param>
        public void SXCTasks(OtherDevice device)
        {
            #region 四向车任务
            List<Dt_Task> Uptasks = new List<Dt_Task>();
            var taskList = _taskService.Repository.QueryData(x => x.TaskType == TaskTypeEnum.CPInbound.ObjToInt() && x.TaskState == TaskStatusEnum.CheckShapeing.ObjToInt());
            //任务的目标地址对于站台号;
            foreach (var task in taskList)
            {
                if (device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspection, task.SourceAddress))
                {
                    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, false, task.SourceAddress);
                    //再读取质检结果
                    var qualityResult = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_QualityInspectionInProgress, task.SourceAddress);
                    //左超宽警告
                    var R_LeftOverWidthWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_LeftOverWidthWarning, task.SourceAddress);
                    //右超宽警告
                    var R_RightWideWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_RightWideWarning, task.SourceAddress);
                    //超高警告
                    var R_ExtremeWarning = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_ExtremeWarning, task.SourceAddress);
                    if (qualityResult)
                    {
                        //如果质检通过了,就把任务状态改为质检完成
                        task.TaskState = TaskStatusEnum.CheckShapeingOk.ObjToInt();
                        task.ExceptionMessage = "";
                        Uptasks.Add(task);
                    }
                    else
                    {
                        task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
                        task.ExceptionMessage = "外检失败";
                        if (R_LeftOverWidthWarning) task.ExceptionMessage += ",左超宽";
                        if (R_RightWideWarning) task.ExceptionMessage += ",右超宽";
                        if (R_ExtremeWarning) task.ExceptionMessage += ",超高";
                        Uptasks.Add(task);
                        //写入复位信号
                        //device.SetValue(QualityInspectionCommandEnum.FaultReset, true, task.SourceAddress);
                    }
                    //写入停止质检信号
                    device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, true, task.SourceAddress);
                    Thread.Sleep(500);
                    device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                }
                //else
                //{
                //    //写入停止质检信号
                //    device.SetValue(QualityInspectionCommandEnum.StopqualityInspection, false, task.SourceAddress);
                //    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                //}
                else
                {
                    task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
                    task.ExceptionMessage = "未检测到质检完成信号";
                    Uptasks.Add(task);
                }
            }
            if (Uptasks.Count > 0)
            {
                _taskService.UpdateData(Uptasks);
            }
            #endregion
        }
 
 
 
        /// <summary>
        /// 海康AGV1-6楼任务
        /// </summary>
        /// <param name="device"></param>
        public void KHTasks(OtherDevice device)
        {
            List<Dt_Task> Uptasks = new List<Dt_Task>();
            var AGVtaskList = _taskService.Repository.QueryData(x => x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt() && (x.TaskType == TaskTypeEnum.Q3RK.ObjToInt() || x.TaskType == TaskTypeEnum.Q3CK.ObjToInt()));//1-6和6-1楼任务
            foreach (var item in AGVtaskList)
            {
                var address = item.TaskType == TaskTypeEnum.Q3RK.ObjToInt() ? item.TargetAddress : item.SourceAddress;
                var stationManger = _stationMangerService.Repository.QueryFirst(x => x.StationCode == address);
                if (stationManger == null)
                {
                    item.ExceptionMessage = $"未找到【{address}】站台信息";
                    Uptasks.Add(item);
                    continue;
                }
                var StockAvailableSymbol = device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.R_StockAvailableSymbol, address);
                if (item.TaskType == TaskTypeEnum.Q3RK.ObjToInt())
                {
                    if (StockAvailableSymbol)
                    {
                        item.ExceptionMessage = $"{address}站台光电检测有货!";
                        Uptasks.Add(item);
                        continue;
                    }
                    if (stationManger.IsOccupied == (int)LocationStatusEnum.Lock)
                    {
                        item.ExceptionMessage = $"站台有货!";
                        Uptasks.Add(item);
                        continue;
                    }
                }
                else
                {
                    if (!StockAvailableSymbol)
                    {
                        item.ExceptionMessage = $"{address}站台光电检测无货!";
                        Uptasks.Add(item);
                        continue;
                    }
                    if (stationManger.IsOccupied == (int)LocationStatusEnum.Free)
                    {
                        item.ExceptionMessage = $"站台无货!";
                        Uptasks.Add(item);
                        continue;
                    }
                }
                //into进入一楼位置的时候,写入进入信号
                device.SetValue(QualityInspectionCommandEnum.RequestToEnter, true, address);
                if (!device.GetValue<QualityInspectionCommandEnum, bool>(QualityInspectionCommandEnum.Blocking, address))
                {
                    item.ExceptionMessage = $"{address}站台光栅不为true(1)!";
                    Uptasks.Add(item);
                    continue;
                }
                var result = _taskService.Hikvisiontaskscontinue(item.WMSTaskNum);
                if (result.Status == false)
                {
                    if (item.ExceptionMessage != result.Message)
                    {
                        item.ExceptionMessage = result.Message;
                        Uptasks.Add(item);
                    }
                    continue;
                }
                item.TaskState = (int)TaskStatusEnum.AGV_ToExecute;
                item.ExceptionMessage = "";
                Uptasks.Add(item);
            }
            if (Uptasks.Count > 0)
            {
                _taskService.UpdateData(Uptasks);
            }
        }
    }
}