领胜LDS 键盘AOI检测项目
wells.liu
2020-07-06 6935238d2b7fdabbe46514b50e154df44af862f8
合并
6个文件已修改
312 ■■■■■ 已修改文件
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Helper/EnumHelper.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardDriver.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Config.cs 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Process.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Process_MotionCard.cs 296 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -57,7 +57,7 @@
        /// </summary>
        public List<MovingOption> AxisMovingOptionValues { get; set; } = new List<MovingOption>();
        public abstract void WriteOutput(short cardNum, short index, IOValue value);
        public abstract void WriteOutput(short index, IOValue value);
    }
    public class MotionCardInitialConfigBase : InitialConfigBase, IMonitorConfig
src/Bro.Common.Model/Helper/EnumHelper.cs
@@ -532,9 +532,9 @@
            [Description("指示灯-黄")]
            Light_Yellow = 1,
            [Description("指示灯-红")]
            Light_Green = 2,
            [Description("指示灯-绿")]
            Light_Green = 2,
            [Description("指示灯-红")]
            Light_Red = 3,
            [Description("蜂鸣器")]
            Beep = 4,
src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -767,17 +767,17 @@
        /// </summary>
        /// <param name="index">输出口,返回1-16</param>
        /// <param name="value">false表示输出,true表示关闭</param>
        public override void WriteOutput(short cardNum, short index, IOValue value)
        public override void WriteOutput(short index, IOValue value)
        {
            short outNum = (short)(index % 100 + 1);
            if ((int)value <= 1)
            {
                GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, (short)value);
                GTSCardAPI.GT_SetDoBit((short)IConfig.CardNum, GTSCardAPI.MC_GPO, outNum, (short)value);
            }
            else
            {
                var currentValue = (int)MonitorValues.FirstOrDefault(u => u.IONum == outNum && u.IOType == IOType.OUTPUT).Value;
                GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, (short)(currentValue == 1 ? 0 : 1));
                GTSCardAPI.GT_SetDoBit((short)IConfig.CardNum, GTSCardAPI.MC_GPO, outNum, (short)(currentValue == 1 ? 0 : 1));
            }
        }
src/Bro.M071.Process/M071Config.cs
src/Bro.M071.Process/M071Process.cs
@@ -56,6 +56,8 @@
            //数据库迁移检查
            DatabaseInitialize.Initialize();
            MotionCardSettingCheck();
            Config.SnapshotPointCollection.ForEach(u =>
            {
                u.GetHalconToolPathList().ForEach(path =>
@@ -353,6 +355,7 @@
                    {
                        return;
                    }
                }
                    pMeasure.EndTime = DateTime.Now;
                    bool pResult = pMeasure.Measurements.All(u => u.Spec.MeasureResult == true);
@@ -374,7 +377,6 @@
                    productionList.RemoveAll(p => p.Barcode == pMeasure.Barcode);
                    pMeasure.Dispose();
                }
            }
        }
src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -30,18 +30,116 @@
                switch (machineState)
                {
                    case MachineState.Ready:
                        SwitchBeep(false);
                        SwitchLightRed(false);
                        SwitchLightYellow(false);
                        Task.Run(() =>
                        {
                            while (MachineState == MachineState.Ready)
                            {
                                SwitchLightGreen(true);
                                Thread.Sleep(1000);
                                SwitchLightGreen(false);
                            }
                        });
                        break;
                    case MachineState.Running:
                        SwitchBeep(false);
                        SwitchLightRed(false);
                        SwitchLightYellow(false);
                        SwitchLightGreen(true);
                        break;
                    case MachineState.Alarm:
                        SwitchBeep(true);
                        SwitchLightRed(true);
                        SwitchLightYellow(false);
                        SwitchLightGreen(false);
                        break;
                    case MachineState.Pause:
                        SwitchBeep(false);
                        SwitchLightRed(false);
                        Task.Run(() =>
                        {
                            while (MachineState == MachineState.Pause)
                            {
                                SwitchLightYellow(true);
                                SwitchLightGreen(true);
                                Thread.Sleep(1000);
                                SwitchLightYellow(false);
                                SwitchLightGreen(false);
                            }
                        });
                        break;
                    default:
                        break;
                }
                OnMachineStateChanged?.Invoke(machineState);
            }
        }
        private void MotionCardSettingCheck()
        {
            IDevice device = DeviceCollection.FirstOrDefault(u => u is IMotionCard);
            if (device.InitialConfig is MotionCardInitialConfigBase iConfig)
            {
                outputCtrlCard = device as MotionCardBase;
                var redDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light_Red);
                if (redDefinition != null)
                {
                    index_RedLight = redDefinition.IONum;
                }
                else
                {
                    LogAsync(DateTime.Now, $"{iConfig.Name}未配置红色灯输出索引", "");
                }
                var greenDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light_Green);
                if (greenDefinition != null)
                {
                    index_GreenLight = greenDefinition.IONum;
                }
                else
                {
                    LogAsync(DateTime.Now, $"{iConfig.Name}未配置绿色灯输出索引", "");
                }
                var yellowDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light_Yellow);
                if (yellowDefinition != null)
                {
                    index_YellowLight = yellowDefinition.IONum;
                }
                else
                {
                    LogAsync(DateTime.Now, $"{iConfig.Name}未配置黄色灯输出索引", "");
                }
                var beepDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Beep);
                if (beepDefinition != null)
                {
                    index_Beep = beepDefinition.IONum;
                }
                else
                {
                    LogAsync(DateTime.Now, $"{iConfig.Name}未配置蜂鸣器输出索引", "");
                }
                var lightDefinition = iConfig.IODefinitionCollection.FirstOrDefault(u => u.IOPreStatement == IOPrestatement.Light);
                if (lightDefinition != null)
                {
                    index_NormalLight = lightDefinition.IONum;
                }
                else
                {
                    LogAsync(DateTime.Now, $"{iConfig.Name}未配置日光灯输出索引", "");
                }
            }
            else
            {
                LogAsync(DateTime.Now, "未配置板卡设备", "");
            }
        }
@@ -66,7 +164,14 @@
            //    }
            //}
            if (IsSafetyBeamTrigged || IsSafetyDoorTrigged)
            {
                LogAsync(DateTime.Now, $"{(IsSafetyDoorTrigged ? "安全门" : "")}{(IsSafetyBeamTrigged ? " 安全光线" : "")}触发中,复位失败", "");
                return new ProcessResponse(false);
            }
            MotionCardDefaultRun("Reset", ref opConfig, ref invokeDevice);
            //(invokeDevice as IMotionCard).Reset();
            RaisedAlarm("");
            MachineState = MachineState.Ready;
@@ -175,38 +280,145 @@
            return new ProcessResponse(_pauseHandle.WaitResult);
        }
        [ProcessMethod("MotionCardBase", "SwitchLightRed", "切换指示灯-红", InvokeType.TestInvoke)]
        public ProcessResponse SwitchLightRed(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        #region 三色灯 & 蜂鸣器
        //[ProcessMethod("MotionCardBase", "SwitchLightRed", "切换指示灯-红", InvokeType.TestInvoke)]
        //public ProcessResponse SwitchLightRed(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        //{
        //    MotionCardDefaultRun("SwitchLightRed", ref opConfig, ref invokeDevice);
        //    return new ProcessResponse(true);
        //}
        //[ProcessMethod("MotionCardBase", "SwitchLightYellow", "切换指示灯-黄", InvokeType.TestInvoke)]
        //public ProcessResponse SwitchLightYellow(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        //{
        //    return new ProcessResponse(true);
        //}
        //[ProcessMethod("MotionCardBase", "SwitchLightGreen", "切换指示灯-绿", InvokeType.TestInvoke)]
        //public ProcessResponse SwitchLightGreen(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        //{
        //    return new ProcessResponse(true);
        //}
        //[ProcessMethod("MotionCardBase", "SwitchBeep", "切换蜂鸣器", InvokeType.TestInvoke)]
        //public ProcessResponse SwitchBeep(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        //{
        //    return new ProcessResponse(true);
        //}
        //[ProcessMethod("MotionCardBase", "SwitchNormalLight", "切换日光灯", InvokeType.TestInvoke)]
        //public ProcessResponse SwitchNormalLight(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        //{
        //    MotionCardDefaultRun("SwitchNormalLight", ref opConfig, ref invokeDevice);
        //    return new ProcessResponse(true);
        //}
        int index_RedLight = -1;
        int index_GreenLight = -1;
        int index_YellowLight = -1;
        int index_Beep = -1;
        int index_NormalLight = -1;
        MotionCardBase outputCtrlCard = null;
        public void SwitchLightRed(bool isOn)
        {
            MotionCardDefaultRun("SwitchLightRed", ref opConfig, ref invokeDevice);
            return new ProcessResponse(true);
            if (index_RedLight >= 0)
            {
                if (outputCtrlCard != null)
                {
                    outputCtrlCard.WriteOutput((short)index_RedLight, isOn ? IOValue.TRUE : IOValue.FALSE);
                }
                else
                {
                    LogAsync(DateTime.Now, "未设置板卡输出设备", "");
                }
            }
            else
            {
                LogAsync(DateTime.Now, "红色灯未配置正确输出索引", "");
            }
        }
        [ProcessMethod("MotionCardBase", "SwitchLightYellow", "切换指示灯-黄", InvokeType.TestInvoke)]
        public ProcessResponse SwitchLightYellow(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        public void SwitchLightYellow(bool isOn)
        {
            return new ProcessResponse(true);
            if (index_YellowLight >= 0)
            {
                if (outputCtrlCard != null)
                {
                    outputCtrlCard.WriteOutput((short)index_YellowLight, isOn ? IOValue.TRUE : IOValue.FALSE);
                }
                else
                {
                    LogAsync(DateTime.Now, "未设置板卡输出设备", "");
                }
            }
            else
            {
                LogAsync(DateTime.Now, "黄色灯未配置正确输出索引", "");
            }
        }
        [ProcessMethod("MotionCardBase", "SwitchLightGreen", "切换指示灯-绿", InvokeType.TestInvoke)]
        public ProcessResponse SwitchLightGreen(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        public void SwitchLightGreen(bool isOn)
        {
            return new ProcessResponse(true);
            if (index_GreenLight >= 0)
            {
                if (outputCtrlCard != null)
                {
                    outputCtrlCard.WriteOutput((short)index_GreenLight, isOn ? IOValue.TRUE : IOValue.FALSE);
                }
                else
                {
                    LogAsync(DateTime.Now, "未设置板卡输出设备", "");
                }
            }
            else
            {
                LogAsync(DateTime.Now, "绿色灯未配置正确输出索引", "");
            }
        }
        [ProcessMethod("MotionCardBase", "SwitchBeep", "切换蜂鸣器", InvokeType.TestInvoke)]
        public ProcessResponse SwitchBeep(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        public void SwitchLight(bool isOn)
        {
            return new ProcessResponse(true);
            if (index_NormalLight >= 0)
            {
                if (outputCtrlCard != null)
                {
                    outputCtrlCard.WriteOutput((short)index_NormalLight, isOn ? IOValue.TRUE : IOValue.FALSE);
                }
                else
                {
                    LogAsync(DateTime.Now, "未设置板卡输出设备", "");
                }
            }
            else
            {
                LogAsync(DateTime.Now, "照明灯未配置正确输出索引", "");
            }
        }
        [ProcessMethod("MotionCardBase", "SwitchNormalLight", "切换日光灯", InvokeType.TestInvoke)]
        public ProcessResponse SwitchNormalLight(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        public void SwitchBeep(bool isOn)
        {
            MotionCardDefaultRun("SwitchNormalLight", ref opConfig, ref invokeDevice);
            if (Config.IsBeepBlocked)
                return;
            return new ProcessResponse(true);
            if (index_Beep >= 0)
            {
                if (outputCtrlCard != null)
                {
                    outputCtrlCard.WriteOutput((short)index_Beep, isOn ? IOValue.TRUE : IOValue.FALSE);
        }
                else
                {
                    LogAsync(DateTime.Now, "未设置板卡输出设备", "");
                }
            }
            else
            {
                LogAsync(DateTime.Now, "蜂鸣器未配置正确输出索引", "");
            }
        }
        #endregion
        private void MotionCardDefaultRun(string methodCode, ref IOperationConfig opConfig, ref IDevice invokeDevice)
        {
@@ -234,5 +446,55 @@
                motionCard.Run(opConfig);
            }
        }
        #region 安全门 & 安全光线
        bool isSafetyDoorTrigged = false;
        bool isSafetyBeamTrigged = false;
        public bool IsSafetyDoorTrigged
        {
            get => !Config.IsSafetyDoorBlocked && isSafetyDoorTrigged;
            set => isSafetyDoorTrigged = value;
        }
        public bool IsSafetyBeamTrigged
        {
            get => !Config.IsSafetyBeamBlocked && isSafetyBeamTrigged;
            set => isSafetyBeamTrigged = value;
        }
        [ProcessMethod("", "SafetyDoorSignal", "安全门信号监控,正常ON,OFF时报警", InvokeType.TestInvoke)]
        public ProcessResponse SafetyDoorSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        {
            if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)
                throw new ProcessException("安全门监控未配置输入信号");
            IsSafetyDoorTrigged = opConfig.InputPara[0] == 0;
            if (IsSafetyDoorTrigged)
            {
                RaisedAlarm("安全门未正常关闭");
                MachineState = MachineState.Alarm;
            }
            return new ProcessResponse(true);
        }
        [ProcessMethod("", "SafetyBeamSignal", "安全光幕信号监控,正常ON,OFF时报警", InvokeType.TestInvoke)]
        public ProcessResponse SafetyBeamSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        {
            if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)
                throw new ProcessException("安全光幕监控未配置输入信号");
            IsSafetyBeamTrigged = opConfig.InputPara[0] == 0;
            if (IsSafetyBeamTrigged)
            {
                RaisedAlarm("安全光线被遮挡");
                MachineState = MachineState.Alarm;
            }
            return new ProcessResponse(true);
        }
        #endregion
    }
}