From 7971d855ba2cf9772b46a7f67e2b669c0afcb91b Mon Sep 17 00:00:00 2001
From: patrick <patrick.xu@broconcentric.com>
Date: 星期二, 22 十月 2019 11:30:35 +0800
Subject: [PATCH] 1. 添加标定操作及界面 2. 修改配置界面方法调用参数 3. SeerAGV添加电池信息监听 4. 添加AGV电池充电操作 5. 修改AGV状态变化操作,添加操作锁

---
 src/A032.Process/ProcessControl.cs |  122 +++++++++++++++++++++++++++++-----------
 1 files changed, 89 insertions(+), 33 deletions(-)

diff --git a/src/A032.Process/ProcessControl.cs b/src/A032.Process/ProcessControl.cs
index 7d26329..dfd85ab 100644
--- a/src/A032.Process/ProcessControl.cs
+++ b/src/A032.Process/ProcessControl.cs
@@ -179,7 +179,7 @@
 
             ProcessState = DeviceState.DSOpen;
 
-            QueryRobotIO();
+            //QueryRobotIO();
 
             //Task.Run(() =>
             //{
@@ -263,6 +263,7 @@
             });
         }
 
+        //Dictionary<string, MethodInfo> InvokeMethodDict = new Dictionary<string, MethodInfo>();
         public List<ProcessMethodAttribute> CollectProcessMethods()
         {
             List<ProcessMethodAttribute> resultList = new List<ProcessMethodAttribute>();
@@ -274,6 +275,7 @@
                 if (attr != null)
                 {
                     resultList.Add(attr);
+                    //InvokeMethodDict[attr.MethodCode] = m;
                 }
             });
 
@@ -287,20 +289,51 @@
             StationConfig = LoadStationConfig(configPath);
 
             #region 涓埆閰嶇疆鐨勭壒鍒鐞�
-
             #endregion
 
             _warningRemains.CollectionChanged -= _warningRemains_CollectionChanged;
             _warningRemains.CollectionChanged += _warningRemains_CollectionChanged;
 
             InitialPLCs();
-            InitialRobots();
             InitialAGVs();
+            InitialRobots();
             InitialCameras();
+            InitialAGVBindUnit();
+            InitialMachineTrayNums();
 
             AutoFacRegister();
 
             LogAsync(DateTime.Now, "Process Initialized", "");
+        }
+
+        private void InitialMachineTrayNums()
+        {
+            machineEmptyTrayDict = Config.PositionCollection.Where(u => u.Description == PathPositionDefinition.UnloadEmptyTray).ToDictionary(p => p.PositionNo, p => 0);
+
+            machineFullTrayDict = Config.PositionCollection.Where(u => u.Description == PathPositionDefinition.LoadFullTray).ToDictionary(p => p.PositionNo, p => 0);
+        }
+
+        private void InitialAGVBindUnit()
+        {
+            Config.AGVBindCollection.ForEach(u =>
+            {
+                if (AGVDict.ContainsKey(u.AGVId))
+                {
+                    u.AGV = AGVDict[u.AGVId];
+                }
+
+                if (RobotDict.ContainsKey(u.RobotId))
+                {
+                    u.Robot = RobotDict[u.RobotId];
+                }
+
+                if (CameraDict.ContainsKey(u.CameraId))
+                {
+                    u.Camera = CameraDict[u.CameraId];
+                }
+
+                //u.OnMethodInvoke = OnBindUnitTaskInvoke;
+            });
         }
 
         private void InitialCameras()
@@ -321,11 +354,11 @@
                 plc.InitialConfig = c;
                 PLCDict[plc.InitialConfig.ID] = plc;
 
-                plc.OnMonitorAlarm -= Plc_OnMonitorAlarm;
-                plc.OnMonitorInvoke -= Plc_OnMonitorInvoke;
+                plc.OnMonitorAlarm -= OnMonitorAlarm;
+                plc.OnMonitorInvoke -= OnMonitorInvoke;
 
-                plc.OnMonitorAlarm += Plc_OnMonitorAlarm;
-                plc.OnMonitorInvoke += Plc_OnMonitorInvoke;
+                plc.OnMonitorAlarm += OnMonitorAlarm;
+                plc.OnMonitorInvoke += OnMonitorInvoke;
             });
         }
 
@@ -336,6 +369,14 @@
                 AuboRobotDriver robot = new AuboRobotDriver();
                 robot.InitialConfig = c;
                 RobotDict[robot.InitialConfig.ID] = robot;
+
+                robot.OnMsgReceived = OnRobotMsgReceived;
+
+                robot.OnMonitorAlarm -= OnMonitorAlarm;
+                robot.OnMonitorInvoke -= OnMonitorInvoke;
+
+                robot.OnMonitorAlarm += OnMonitorAlarm;
+                robot.OnMonitorInvoke += OnMonitorInvoke;
             });
         }
 
@@ -346,6 +387,10 @@
                 SeerAGVDriver agv = new SeerAGVDriver();
                 agv.InitialConfig = c;
                 AGVDict[agv.InitialConfig.ID] = agv;
+
+                agv.OnAGVPositoinChanged = OnAGVPositionChanged;
+                agv.OnAGVTaskStatusChanged = OnAGVTaskStatusChanged;
+                agv.OnAGVBatteryLvlChanged = OnAGVBatterLvlChanged;
             });
         }
 
@@ -447,7 +492,7 @@
         /// </summary>
         protected Dictionary<string, HDevEngineTool> _halconToolDict = new Dictionary<string, HDevEngineTool>();
 
-        private void InitialProcessMethods()
+        public virtual void InitialProcessMethods()
         {
             _processMethodDict = new Dictionary<string, MethodInfo>();
             var methods = this.GetType().GetMethods().ToList();
@@ -458,7 +503,7 @@
                 {
                     _processMethodDict[attr.MethodCode] = m;
 
-                    #region 鍒濆鍖朒alconTool
+                    #region 鍒濆鍖朒alconTool 鏍规嵁processMethod鐨勭壒鎬ф潵閰嶇疆
                     //if (attr.DeviceType.EndsWith("Camera"))
                     //{
                     //    if (StationConfig.ProcessOpConfigDict.Keys.Contains(attr.MethodCode))
@@ -484,29 +529,44 @@
                 }
             });
 
-            #region 鍒濆鍖朒alconTool
+            #region 鍒濆鍖朒alconTool 鏍规嵁閰嶇疆鐨勬帴鍙g被鍨嬫潵閰嶇疆
             _halconToolDict = new Dictionary<string, HDevEngineTool>();
             Config.PLCConfigCollection.SelectMany(plcConfig => plcConfig.MonitorSetCollection).Select(ms => ms.OpConfig).ToList().ForEach(c =>
+            {
+                InitialHalconTool(c as IHalconToolPath);
+            });
+
+            Config.VisionConfigCollection.ForEach(c =>
+            {
+                InitialHalconTool(c as IHalconToolPath);
+            });
+
+            Config.ProcessOpConfigDict.Values.ToList().ForEach(c =>
+            {
+                InitialHalconTool(c as IHalconToolPath);
+            });
+            #endregion
+        }
+
+        private void InitialHalconTool(IHalconToolPath toolPath)
+        {
+            //IHalconToolPath toolPath = c as IHalconToolPath;
+            if (toolPath != null)
+            {
+                toolPath.GetHalconToolPathList().ForEach(path =>
                 {
-                    IHalconToolPath toolPath = c as IHalconToolPath;
-                    if (toolPath != null)
+                    if (!string.IsNullOrWhiteSpace(path) && !_halconToolDict.ContainsKey(path))
                     {
-                        toolPath.GetHalconToolPathList().ForEach(path =>
-                        {
-                            if (!string.IsNullOrWhiteSpace(path))
-                            {
-                                string directoryPath = Path.GetDirectoryName(path);
-                                string fileName = Path.GetFileNameWithoutExtension(path);
+                        string directoryPath = Path.GetDirectoryName(path);
+                        string fileName = Path.GetFileNameWithoutExtension(path);
 
-                                HDevEngineTool tool = new HDevEngineTool(directoryPath);
-                                tool.LoadProcedure(fileName);
+                        HDevEngineTool tool = new HDevEngineTool(directoryPath);
+                        tool.LoadProcedure(fileName);
 
-                                _halconToolDict[path] = tool;
-                            }
-                        });
+                        _halconToolDict[path] = tool;
                     }
                 });
-            #endregion
+            }
         }
 
         public List<IDevice> GetDeviceList()
@@ -521,9 +581,8 @@
             return list;
         }
 
-        #region PLC鐩戝惉
-
-        private void Plc_OnMonitorInvoke(DateTime dt, MonitorSet monitorSet)
+        #region IMonitor鐩戝惉
+        private void OnMonitorInvoke(DateTime dt, IDevice device, MonitorSet monitorSet)
         {
             IOperationConfig config = monitorSet.OpConfig;
             string methodCode = monitorSet.MethodCode;
@@ -535,7 +594,7 @@
                 try
                 {
                     //鏈塈OperationConfig鍙傛暟鐨勮皟鐢�
-                    res = _processMethodDict[methodCode].Invoke(this, new object[] { config });
+                    res = _processMethodDict[methodCode].Invoke(this, new object[] { config, device });
                     reTryTimes = -1;
                 }
                 catch (Exception invokeEX)  //娴佺▼鍔ㄤ綔寮傚父澶辫触
@@ -653,7 +712,7 @@
             #endregion
         }
 
-        private void Plc_OnMonitorAlarm(DateTime dt, WarningSet warning, bool isAlarmRaised)
+        private void OnMonitorAlarm(DateTime dt, IDevice device, WarningSet warning, bool isAlarmRaised)
         {
         }
 
@@ -1099,7 +1158,7 @@
         protected Dictionary<string, Queue<string>> CameraBitmapDict = new Dictionary<string, Queue<string>>();
         //protected Dictionary<string, Bitmap> CameraBitmapDict = new Dictionary<string, Bitmap>();
 
-        protected HObject CollectHImage(CameraBase camera, IOperationConfig opConfig, string cameraId, string methodCode)
+        protected HObject CollectHImage(CameraBase camera, IOperationConfig opConfig, string methodCode)
         {
             HObject hImage = null;
 
@@ -1131,9 +1190,6 @@
 
                 camera.UploadOperationConfig(opConfig);
                 camera.Snapshot(opConfig, out hImage);
-
-                //SaveTempImage(cameraName, camera.ImageFilePath);
-                //SaveTempImage(camera, cameraId);
 
                 if (cameraConifg.DelayAfter > 0)
                 {

--
Gitblit v1.8.0