patrick
2019-10-18 4e8bf084f8a04617a9f542099183b8d829fa7c4b
src/A032.Process/ProcessControl.cs
@@ -179,7 +179,7 @@
            ProcessState = DeviceState.DSOpen;
            QueryRobotIO();
            //QueryRobotIO();
            //Task.Run(() =>
            //{
@@ -298,9 +298,43 @@
            InitialAGVs();
            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 +355,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 +370,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 +388,9 @@
                SeerAGVDriver agv = new SeerAGVDriver();
                agv.InitialConfig = c;
                AGVDict[agv.InitialConfig.ID] = agv;
                agv.OnAGVPositoinChanged = OnAGVPositionChanged;
                agv.OnAGVTaskStatusChanged = OnAGVTaskStatusChanged;
            });
        }
@@ -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 初始化HalconTool
                    #region 初始化HalconTool 根据processMethod的特性来配置
                    //if (attr.DeviceType.EndsWith("Camera"))
                    //{
                    //    if (StationConfig.ProcessOpConfigDict.Keys.Contains(attr.MethodCode))
@@ -484,16 +529,28 @@
                }
            });
            #region 初始化HalconTool
            #region 初始化HalconTool 根据配置的接口类型来配置
            _halconToolDict = new Dictionary<string, HDevEngineTool>();
            Config.PLCConfigCollection.SelectMany(plcConfig => plcConfig.MonitorSetCollection).Select(ms => ms.OpConfig).ToList().ForEach(c =>
                {
                    IHalconToolPath toolPath = c as IHalconToolPath;
                InitialHalconTool(c as IHalconToolPath);
            });
            Config.VisionConfigCollection.ForEach(c =>
            {
                InitialHalconTool(c as IHalconToolPath);
            });
            #endregion
        }
        private void InitialHalconTool(IHalconToolPath toolPath)
        {
            //IHalconToolPath toolPath = c as IHalconToolPath;
                    if (toolPath != null)
                    {
                        toolPath.GetHalconToolPathList().ForEach(path =>
                        {
                            if (!string.IsNullOrWhiteSpace(path))
                    if (!string.IsNullOrWhiteSpace(path) && !_halconToolDict.ContainsKey(path))
                            {
                                string directoryPath = Path.GetDirectoryName(path);
                                string fileName = Path.GetFileNameWithoutExtension(path);
@@ -505,8 +562,6 @@
                            }
                        });
                    }
                });
            #endregion
        }
        public List<IDevice> GetDeviceList()
@@ -521,9 +576,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 +589,7 @@
                try
                {
                    //有IOperationConfig参数的调用
                    res = _processMethodDict[methodCode].Invoke(this, new object[] { config });
                    res = _processMethodDict[methodCode].Invoke(this, new object[] { config, device });
                    reTryTimes = -1;
                }
                catch (Exception invokeEX)  //流程动作异常失败
@@ -653,7 +707,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 +1153,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 +1185,6 @@
                camera.UploadOperationConfig(opConfig);
                camera.Snapshot(opConfig, out hImage);
                //SaveTempImage(cameraName, camera.ImageFilePath);
                //SaveTempImage(camera, cameraId);
                if (cameraConifg.DelayAfter > 0)
                {