From 6428fad15dbe79e30a48ffc9aabe31e03a45426c Mon Sep 17 00:00:00 2001
From: patrick <patrick.xu@broconcentric.com>
Date: 星期四, 05 十二月 2019 12:50:13 +0800
Subject: [PATCH] 1. 添加部分log信息 2. 修改部分机器人动作流程 3. 开放OperationConfig的InputData参数

---
 src/A032.Process/ProcessControl_Method.cs |   47 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/src/A032.Process/ProcessControl_Method.cs b/src/A032.Process/ProcessControl_Method.cs
index 451d2bd..dc0d8c8 100644
--- a/src/A032.Process/ProcessControl_Method.cs
+++ b/src/A032.Process/ProcessControl_Method.cs
@@ -27,11 +27,11 @@
         List<TaskAssignInfo> taskAssignedList = new List<TaskAssignInfo>();
 
         #region AGV浜嬩欢
-        private void OnAGVBatterLvlChanged(SeerAGVDriver agv, float batterLvl)
+        private void OnAGVBatteryLvlChanged(SeerAGVDriver agv, float preBatteryLvl, float batteryLvl)
         {
             var bind = Config.AGVBindCollection.FirstOrDefault(u => u.AGVId == agv.Id);
             SeerAGVInitialConfig iConfig = agv.InitialConfig as SeerAGVInitialConfig;
-            if (batterLvl <= iConfig.BatteryLvlToCharge)
+            if (batteryLvl <= iConfig.BatteryLvlToCharge && preBatteryLvl > iConfig.BatteryLvlToCharge)
             {
                 Task.Run(() =>
                 {
@@ -57,9 +57,14 @@
                 return;
             }
 
-            if (batterLvl >= iConfig.BatteryLvlChargeDone)
+            if (batteryLvl >= iConfig.BatteryLvlChargeDone && preBatteryLvl < iConfig.BatteryLvlChargeDone)
             {
-                bind.SetAGVStatus(TaskStatus.Available);
+                var position = Config.PositionCollection.FirstOrDefault(u => u.PositionCode == agv.CurrentPosition);
+
+                if (position != null && position.Description == PathPositionDefinition.Charge)
+                {
+                    bind.SetAGVStatus(TaskStatus.Available);
+                }
                 return;
             }
         }
@@ -105,19 +110,25 @@
                 //}
 
                 bind.SetAGVStatus(TaskStatus.Available);
+                LogAsync(DateTime.Now, $"AGV鍒颁綅{positionCode}", "");
 
                 PathPosition position = Config.PositionCollection.FirstOrDefault(p => p.PositionCode == bind.AGVDest);
                 switch (position.Description)
                 {
                     case PathPositionDefinition.LoadEmptyTray:
+                        LogAsync(DateTime.Now, $"AGV瀹屾垚锛屽噯澶囦笂绌篢ray", "");
                         Robot_LoadEmptyTray(bind.Id, position);
                         break;
                     case PathPositionDefinition.LoadFullTray:
+                        LogAsync(DateTime.Now, $"AGV瀹屾垚锛屽噯澶囦笂婊ray", "");
+                        Robot_LoadFullTraySnap(bind.Id, position);
                         break;
                     case PathPositionDefinition.UnloadEmptyTray:
+                        LogAsync(DateTime.Now, $"AGV瀹屾垚锛屽噯澶囦笅绌篢ray", "");
                         Robot_UnloadEmptyTraySnap(bind.Id, position);
                         break;
                     case PathPositionDefinition.UnloadFullTray:
+                        LogAsync(DateTime.Now, $"AGV瀹屾垚锛屽噯澶囦笅婊ray", "");
                         Robot_UnloadFullTraySnap(bind.Id, position);
                         break;
                     default:
@@ -183,8 +194,11 @@
 
                                     if (machineEmptyTrayDict[msg.Para2] < Config.Machine_EmptyTrayNum)
                                     {
-                                        bind.RobotIOHandle.Reset();
-                                        bind.RobotIOHandle.WaitOne();
+                                        //bind.RobotIOHandle.Reset();
+                                        //bind.RobotIOHandle.WaitOne();
+                                        bind.Robot.MonitorHandle.WaitOne();
+                                        //bind.Robot.IOChangedHandle.WaitOne();
+                                        Thread.Sleep((bind.Robot.InitialConfig as AuboRobotInitialConfig).ScanInterval);
 
                                         if (!bind.IsFullTrayFull)
                                         {
@@ -206,12 +220,19 @@
                                 {
                                     bind.CurrentFullTray = int.Parse(msg.Datas[1]);
 
-                                    bind.RobotIOHandle.Reset();
-                                    bind.RobotIOHandle.WaitOne();
+                                    //bind.RobotIOHandle.Reset();
+                                    //bind.RobotIOHandle.WaitOne();
+                                    bind.Robot.MonitorHandle.WaitOne();
+                                    //bind.Robot.IOChangedHandle.WaitOne();
+                                    Thread.Sleep((bind.Robot.InitialConfig as AuboRobotInitialConfig).ScanInterval);
 
                                     if (!bind.IsFullTrayEmpty)
                                     {
                                         Camera_UnloadFullTray(robot.Id, msg.Para2);
+                                    }
+                                    else
+                                    {
+                                        bind.RobotStatus = TaskStatus.Available;
                                     }
                                 }
                                 break;
@@ -387,6 +408,7 @@
         [ProcessMethod("", "Robot_Monitor_FullTrayFull", "鏈哄櫒浜虹洃鍚簨浠�-婊ray鍖哄煙鏀炬弧", true)]
         public ProcessResponse Robot_Monitor_FullTrayFull(IOperationConfig config, IDevice device)
         {
+            //(device as AuboRobotDriver).IOChangedHandle.Reset();
             bool isFullTrayFull = config.InputPara[0] == 1;
             var bind = Config.AGVBindCollection.FirstOrDefault(u => u.RobotId == device.Id);
             if (isFullTrayFull)
@@ -425,7 +447,9 @@
                 bind.IsFullTrayTaskAssigned = false;
             }
 
-            bind.RobotIOHandle.Set();
+            //(device as AuboRobotDriver).IOChangedHandle.Set();
+
+            //bind.RobotIOHandle.Set();
 
             return new ProcessResponse(true);
         }
@@ -433,11 +457,13 @@
         [ProcessMethod("", "Robot_Monitor_FullTrayEmpty", "鏈哄櫒浜虹洃鍚簨浠�-婊ray鍖哄煙娓呯┖", true)]
         public ProcessResponse Robot_Monitor_FullTrayEmpty(IOperationConfig config, IDevice device)
         {
+            //(device as AuboRobotDriver).IOChangedHandle.Reset();
             bool isFullTrayEmpty = config.InputPara[0] == 0;
             var bind = Config.AGVBindCollection.FirstOrDefault(u => u.RobotId == device.Id);
             bind.IsFullTrayEmpty = isFullTrayEmpty;
 
-            bind.RobotIOHandle.Set();
+            //(device as AuboRobotDriver).IOChangedHandle.Set();
+            //bind.RobotIOHandle.Set();
 
             return new ProcessResponse(true);
         }
@@ -1194,6 +1220,7 @@
 
             bind.RobotStatus = TaskStatus.Running;
             bind.Robot.SendMsg(RobotMsgAction.Move, RobotMsgParas.LineSnap, position.PositionNo);
+            //LogAsync(DateTime.Now, "Robot杩愬姩鑷充笅婊ray鎷嶇収", "");
         }
 
         //[ProcessMethod("", "Camera_UnloadFullTray", "鐩告満鎿嶄綔鍗歌浇婊ray", true)]

--
Gitblit v1.8.0