qinchulong
2025-03-29 039a4a5433e7f80adc88b491b549e5d9486e4f9a
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WIDESEA_Common;
using WIDESEA_Common.Tools;
using WIDESEA_Entity.DomainModels;
using WIDESEA_WCS.WCSClient;
 
namespace WIDESEA_WCS.EquipBaseInfo
{
    public class AGVBaseInfo
    {
        /// <summary>
        /// 写入任务
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        public static string TaskWrite(PLCClient client, dt_agvtask agvTask, AGVJobEnum jobEnum)//, Dt_agvtaskRepository agvTask
        {
            //bool operateResults = client.WriteValue(TaskDBName.taskInteractiveR.ToString(), 9);
            
 
            #region 测试
            List<byte> sendData = new List<byte>();
            string tmp = agvTask.agv_tasknum.ToString();
            List<byte> taskID = Encoding.Default.GetBytes(tmp).ToList();//任务ID
            taskID.Insert(0, 30);
            taskID.Insert(1, Convert.ToByte(tmp.Length));
 
            for (int i = 0; i < 30 - tmp.Length; i++)
            {
                taskID.Add(0);
            }
            sendData.AddRange(taskID);
 
            List<byte> taskStart = Encoding.Default.GetBytes(agvTask.agv_fromaddress).ToList();
            taskStart.Insert(0, 20);
            taskStart.Insert(1, Convert.ToByte(agvTask.agv_fromaddress.Length));
 
            for (int i = 0; i < 20 - agvTask.agv_fromaddress.Length; i++)
            {
                taskStart.Add(0);
            }
            sendData.AddRange(taskStart);
 
            List<byte> taskEnd = Encoding.Default.GetBytes(agvTask.agv_toaddress).ToList();
            taskEnd.Insert(0, 20);
            taskEnd.Insert(1, Convert.ToByte(agvTask.agv_toaddress.Length));
 
            for (int i = 0; i < 20 - agvTask.agv_toaddress.Length; i++)
            {
                taskEnd.Add(0);
            }
            sendData.AddRange(taskEnd);
 
            byte[] taskType = BitConverter.GetBytes((ushort)agvTask.agv_worktype.GetValueOrDefault()).ToArray();
            Array.Reverse(taskType);
            sendData.AddRange(taskType);
 
            List<byte> containerType = Encoding.Default.GetBytes(agvTask.agv_barcode).ToList();
            containerType.Insert(0, 30);
            containerType.Insert(1, Convert.ToByte(agvTask.agv_barcode.Length));
 
            for (int i = 0; i < 30 - agvTask.agv_barcode.Length; i++)
            {
                containerType.Add(0);
            }
            sendData.AddRange(containerType);
 
            byte[] taskPriority = BitConverter.GetBytes((ushort)agvTask.agv_grade.GetValueOrDefault()).ToArray();
            Array.Reverse(taskPriority);
            sendData.AddRange(taskPriority);
 
            byte[] taskFlag = BitConverter.GetBytes((ushort)jobEnum).ToArray();
            Array.Reverse(taskFlag);
            sendData.AddRange(taskFlag);
 
            HslCommunication.OperateResult operateResult = client.SiemensPLCClient.SiemensS7NetClient.Write("DB1000.0", sendData.ToArray());
            if (!operateResult.IsSuccess)
                return operateResult.Message;
            WriteLog.Info("AGV发送任务").Write("任务号" + agvTask.agv_tasknum + "AGV编号" + client.PLCName+DateTime.Now, "AGV发送任务");
            #endregion
 
            //bool flag = client.WriteValue(TaskDBName.taskID.ToString(), agvTask.agv_barcode);
            //if (!flag)
            //    return "AGV任务ID写入失败";
 
            //if (!string.IsNullOrEmpty(agvTask.agv_fromaddress))
            //{
            //    flag = client.WriteValue(TaskDBName.taskStart.ToString(), agvTask.agv_fromaddress);
            //    if (!flag)
            //        return "AGV任务起点写入失败";
            //}
            //if (!string.IsNullOrEmpty(agvTask.agv_toaddress))
            //{
            //    flag = client.WriteValue(TaskDBName.taskEnd.ToString(), agvTask.agv_toaddress);
            //    if (!flag)
            //        return "AGV任务终点写入失败";
            //}
            //if (!string.IsNullOrEmpty(agvTask.agv_tasktype))
            //{
            //    flag = client.WriteValue(TaskDBName.taskType.ToString(), agvTask.agv_worktype);
            //    if (!flag)
            //        return "AGV任务类型写入失败";
            //}
            ////if (!string.IsNullOrEmpty(agvTask.containerType))
            ////{
            ////    flag = client.WriteValue(TaskDBName.containerType.ToString(), agvTask.containerType);
            ////    if (!flag)
            ////        return "AGV任务容器类型写入失败";
            ////}
 
            //flag = client.WriteValue(TaskDBName.taskPriority.ToString(), agvTask.agv_grade);
            //if (!flag)
            //    return "AGV任务优先级写入失败";
 
            ////if (!string.IsNullOrEmpty(agvTask.excuteAgvCode))
            ////{
            ////    flag = client.WriteValue(TaskDBName.excuteAgvCode.ToString(), agvTask.excuteAgvCode);
            ////    if (!flag)
            ////        return "AGV编号写入失败";
            ////}
            //flag = client.WriteValue(TaskDBName.taskInteractiveW.ToString(), ((int)jobEnum));
            //if (!flag)
            //    return "AGV任务启动命令写入失败。" + ((int)jobEnum);
 
            return "";
        }
    }
}