From 5ce21dbcd0849adc3afcf28fffc8933ce717c380 Mon Sep 17 00:00:00 2001
From: xiaojiao <xiaojiao@kaokeziliao.com>
Date: 星期二, 28 四月 2026 11:42:32 +0800
Subject: [PATCH] 物料绑定组盘,下发AGV任务

---
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Tasks/TaskAcquisition/TaskAcquisition_Back1_Job.cs |  110 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 95 insertions(+), 15 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/TaskAcquisition/TaskAcquisition_Back1_Job.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/TaskAcquisition/TaskAcquisition_Back1_Job.cs"
index decf43d..0598f50 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/TaskAcquisition/TaskAcquisition_Back1_Job.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/TaskAcquisition/TaskAcquisition_Back1_Job.cs"
@@ -1,15 +1,23 @@
-锘縰sing Quartz;
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using Quartz;
+using SixLabors.ImageSharp;
+using SqlSugar.Extensions;
 using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Communicator;
 using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_IBasicInfoService;
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_Tasks.TaskAcquisition;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -24,36 +32,108 @@
         private readonly ITaskService _taskService;
         private readonly ISys_ConfigService _sys_ConfigService;
         private readonly IDt_StationManagerRepository _stationManagerRepository;
-        public TaskAcquisition_Back1_Job(ITaskRepository taskRepository, ITaskService taskService, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository)
+        private readonly IDt_MaterialInfoRepository _IDt_MaterialInfoRepository;
+        public TaskAcquisition_Back1_Job(ITaskRepository taskRepository, ITaskService taskService, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_MaterialInfoRepository IDt_MaterialInfoRepository)
         {
             _taskRepository = taskRepository;
             _taskService = taskService;
             _sys_ConfigService = configService;
             _stationManagerRepository = stationManagerRepository;
+            _IDt_MaterialInfoRepository = IDt_MaterialInfoRepository;
         }
         public Task Execute(IJobExecutionContext context)
         {
             string ip = "127.0.0.1";
             int port = 502;
-            string name = "鍚庡簳鏉�1";
-            ModbusTcp modbusTcp = new ModbusTcp(ip, port, name);
+            string Region = "鍚庡簳鏉�1";
+            ModbusTcp modbusTcp = new ModbusTcp(ip, port, Region);
+            Baseconversion baseconversion = new Baseconversion();
             modbusTcp.Connect();
-            //var a = modbusTcp.Read("40002", 20);
-            //string barcode = Encoding.UTF8.GetString(a).Replace("\0", "").Replace("\\0", "");
 
-            // 璇诲彇鎸囧畾鐨勫湴鍧�璇诲埌10杩涘埗鐨刟scii鐮佽浆鎴�16杩涘埗
-            byte[] rawBytes = modbusTcp.Read("10", 20);
-            string originalDecimalStr = Encoding.ASCII.GetString(rawBytes).TrimEnd('\0');
-            Console.WriteLine($"璇诲彇鍒扮殑鍘熷鍗佽繘鍒跺瓧绗︿覆锛歿originalDecimalStr}");
-            // 涓嬮潰杩欎竴娈靛氨鏄綘瑕佺殑锛氳浆 16 杩涘埗 
-            ulong number = ulong.Parse(originalDecimalStr);  // 杞垚鏁板瓧
-            string hexStr = number.ToString("X");            // 杞ぇ鍐�16杩涘埗
-            Console.WriteLine("杞崲鎴�16杩涘埗锛�" + hexStr);
+            Dictionary<int, int> Signal = new Dictionary<int, int>() { [10] = 2, [30] = 3, [50] = 4, [70] = 5 }; 
+            Dictionary<int, int> FeedingPoint = new Dictionary<int, int>() { [10] = 2001, [30] = 2002, [50] = 2003, [70] = 2004 }; // 鍙枡鐨勭偣浣� 缁堢偣浣嶇疆
+
+            try
+            {
+                for (int i = 10; i < 90; i += 20)
+                {
+                    byte[] SignalNumber = modbusTcp.Read(Signal[i].ToString(), 1); // 淇″彿 1锛氬彨鏂� 2锛氭媺鍑虹┖妗�
+
+                    if (SignalNumber[1] == 1)
+                    {
+                        byte[] PartNumber = modbusTcp.Read(i.ToString(), 20); // 璇诲彇闆朵欢鍙�
+
+                        if (PartNumber[1] == 0) continue;
+
+                        string Ku1_Value = baseconversion.TenthTurn16(PartNumber); 
+                        if (Ku1_Value != "" && Ku1_Value != null)
+                        {
+                            // 绛夊姛鑳芥祴璇曞畬锛岃繖閲岃鍋氭棩蹇楄褰�
+
+                            Console.WriteLine(Ku1_Value);
+                            // 鎵惧搴旂殑闆朵欢鍙锋槸鍚﹀凡缁忕粦瀹�(缁勭洏)
+                            Dt_MaterialInfo dt_MaterialInfo = _IDt_MaterialInfoRepository.QueryFirst(x => x.MaterialName == Ku1_Value);
+                            
+                            if (dt_MaterialInfo != null && dt_MaterialInfo.IsBind && dt_MaterialInfo.EndPosition == null)
+                            {
+                                Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.PalletCode == dt_MaterialInfo.ContainerCode);
+                                if (dt_Task != null) continue; //璇佹槑鏈夊綋鍓嶄换鍔�
+
+                                dt_Task = new Dt_Task();
+                                dt_Task.PalletCode = dt_MaterialInfo.ContainerCode;
+                                dt_Task.SourceAddress = dt_MaterialInfo.Position; // 褰撳墠浣嶇疆
+                                dt_Task.TargetAddress = FeedingPoint[i].ToString(); // 缁堢偣浣嶇疆
+                                dt_Task.Grade = 2;
+                                dt_Task.TaskState = TaskAGVCarryStatusEnum.AGV_CarryNew.ObjToInt();
+                                dt_Task.TaskType = TaskAGVCarryTypeEnum.Carry.ObjToInt();
+                                dt_Task.Roadway = (Signal[i] - 1).ToString(); // 搴�1 鍙枡閭e氨鏄�1宸烽亾
+                                dt_Task.CurrentAddress = dt_MaterialInfo.Position; // 褰撳墠浣嶇疆
+                                dt_Task.NextAddress = FeedingPoint[i].ToString(); // 缁堢偣浣嶇疆
+
+                                dt_MaterialInfo.EndPosition = FeedingPoint[i].ToString(); // 缁堢偣浣嶇疆
+
+                                _taskRepository.AddData(dt_Task);
+                                _IDt_MaterialInfoRepository.UpdateData(dt_MaterialInfo);
+                            }
+
+                            // 濡傛灉娌$粦瀹氬垯涓嶇敓鎴愪换鍔� 濡傛灉鏌ユ壘鍒板搴旂殑闆朵欢鍙风粦瀹氫簡 鍒欑敓鎴愪竴鏉′换鍔℃暟鎹�
+                        }
+                    }
+
+                    if (SignalNumber[1] == 2) // 琛ㄧず鎷夊嚭绌烘
+                    {
+                        Dictionary<int, int> Endpointposition = new Dictionary<int, int>() { [10] = 3001, [20] = 3002, [30] = 3003, [40] = 3004 }; // 鍙枡鐨勭偣浣� 缁堢偣浣嶇疆
+                        Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == FeedingPoint[i].ToString() && x.TaskType == (int)TaskAGVCarryTypeEnum.CarryEmpty);
+                        if (dt_Task != null) continue;
+
+                        dt_Task = new Dt_Task();
+                        dt_Task.PalletCode = "绌烘瀛�";
+                        dt_Task.SourceAddress = FeedingPoint[i].ToString();
+                        dt_Task.TargetAddress = Endpointposition[i].ToString(); 
+                        dt_Task.Grade = 2;
+                        dt_Task.TaskState = TaskAGVCarryStatusEnum.AGV_CarryNew.ObjToInt();
+                        dt_Task.TaskType = TaskAGVCarryTypeEnum.CarryEmpty.ObjToInt();
+                        dt_Task.Roadway = (Signal[i] - 1).ToString(); // 搴�1 鍙枡閭e氨鏄�1宸烽亾
+                        dt_Task.CurrentAddress = FeedingPoint[i].ToString(); // 褰撳墠浣嶇疆
+                        dt_Task.NextAddress = Endpointposition[i].ToString(); // 缁堢偣浣嶇疆
+                        _taskRepository.AddData(dt_Task);
+                    }
+
+                }
+            }
+            catch (Exception)
+            {
+
+                throw;
+            }
+
 
             // 16杩涘埗杞垚10杩涘埗
             // 2. 16杩涘埗 鈫� 杞洖鍗佽繘鍒讹紙浣犺鐨勫姛鑳斤級
-            ulong decimalResult = Convert.ToUInt64(hexStr, 16);
+            ulong decimalResult = Convert.ToUInt64("123", 16);
             Console.WriteLine("16杩涘埗杞洖鍗佽繘鍒讹細" + decimalResult);
+
+            // 鍐欏叆
             bool flag = modbusTcp.Write("30", decimalResult.ToString());
 
             modbusTcp.Disconnect();

--
Gitblit v1.9.3