领胜LDS 键盘AOI检测项目
patrick.xu
2021-07-24 ff7cab72419729ce2c5adc46350ef45d89a5d1e5
src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -7,6 +7,7 @@
using System.ComponentModel;
using System.Drawing.Design;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -17,6 +18,8 @@
    public partial class M071Process
    {
        public Timer ResetTimer = null;
        MachineState MeasureState = MachineState.Unknown;
        object machineStateLock = new object();
        //MachineState _machineStatePre = MachineState.Unknown;
@@ -29,10 +32,13 @@
                if (machineState == value)
                    return;
                LogAsync(DateTime.Now, $"设备状态切换:{machineState.ToString()}->{value.ToString()}", "");
                machineState = value;
                Task.Run(() =>
                {
                    OnMachineStateChanged?.Invoke(machineState);
                    switch (machineState)
                    {
                        case MachineState.Ready:
@@ -122,9 +128,7 @@
                        default:
                            break;
                    }
                });
                OnMachineStateChanged?.Invoke(machineState);
                });
            }
        }
@@ -247,17 +251,21 @@
            MotionCardDefaultRun("Reset", ref opConfig, ref invokeDevice);
            (invokeDevice as MotionCardBase).ResetAlarm();
            RaisedAlarm("");
            _isdoing = false;
            _pausedHandle.Set();
            if (MachineState != MachineState.Pause)
            {
                MachineState = MachineState.Ready;
            }
            else
            {
                LogAsync(DateTime.Now, "设备暂停中,无法复位", "");
                return new ProcessResponse(true);
            }
            RaisedAlarm("");
            OnCheckHintUpload?.Invoke("", false);
            //if (MachineState != MachineState.Pause)
            //{
            MachineState = MachineState.Ready;
            //}
            //else
            //{
            //    LogAsync(DateTime.Now, "设备暂停中,无法复位", "");
            //    return new ProcessResponse(true);
            //}
            if (IsEmergencyStopped)
            {
@@ -267,6 +275,7 @@
            }
            LogAsync(DateTime.Now, "普通复位动作完成", "");
            OnResetDone?.Invoke();
            return new ProcessResponse(true);
        }
@@ -301,8 +310,11 @@
            MachineState = MachineState.Resetting;
            MotionCardDefaultRun("FullReset", ref opConfig, ref invokeDevice);
            productionList.ForEach(u => u.Dispose());
            productionList.Clear();
            lock (productionLock)
            {
                productionList.ForEach(u => u.Dispose());
                productionList.Clear();
            }
            OnFullResetDone?.Invoke();
@@ -642,39 +654,51 @@
        ManualResetEventSlim _pausedHandle = new ManualResetEventSlim(true);
        MachineState _machineStateBeforePause = MachineState.Unknown;
        private void CheckMachinePauseState()
        object _pauseLock = new object();
        private async void CheckMachinePauseState()
        {
            //await Task.Run(() =>
            await Task.Run(() =>
            {
                if (IsMachinePaused)
                lock (_pauseLock)
                {
                    if (MachineState == MachineState.Ready || MachineState == MachineState.Running)
                    if (IsMachinePaused)
                    {
                        _machineStateBeforePause = MachineState;
                    }
                    MachineState = MachineState.Pause;
                    _pausedHandle.Reset();
                        if (MachineState == MachineState.Ready || MachineState == MachineState.Running)
                        {
                            _machineStateBeforePause = MachineState;
                        }
                        MachineState = MachineState.Pause;
                        _pausedHandle.Reset();
                    if (_machineStateBeforePause == MachineState.Running)
                    {
                        Pause();
                    }
                }
                else
                {
                    if (MachineState == MachineState.Pause)
                    {
                        if (_machineStateBeforePause == MachineState.Running)
                        {
                            Resume(true);
                            Pause();
                        }
                        _pausedHandle.Set();
                        RaisedAlarm("");
                        MachineState = _machineStateBeforePause;
                    }
                    else
                    {
                        if (MachineState == MachineState.Pause)
                        {
                            if (_machineStateBeforePause == MachineState.Running || _machineStateBeforePause == MachineState.Ready)
                            {
                                Resume(true);
                            }
                            _pausedHandle.Set();
                            RaisedAlarm("");
                            if (_machineStateBeforePause == MachineState.Running && MeasureState == MachineState.Ready)
                            {
                                MachineState = MachineState.Ready;
                            }
                            else
                            {
                                MachineState = _machineStateBeforePause;
                            }
                        }
                    }
                }
            }
            //);
            );
        }
        public bool IsMachinePaused
@@ -683,6 +707,7 @@
        }
        [ProcessMethod("", "SafetyDoorSignal", "安全门信号监控,正常ON,OFF时报警", InvokeType.TestInvoke)]
        [MethodImpl(MethodImplOptions.Synchronized)]
        public ProcessResponse SafetyDoorSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        {
            //if (MachineState != MachineState.Running && MachineState != MachineState.Pause)
@@ -702,6 +727,7 @@
        }
        [ProcessMethod("", "SafetyBeamSignal", "安全光幕信号监控,正常ON,OFF时报警", InvokeType.TestInvoke)]
        [MethodImpl(MethodImplOptions.Synchronized)]
        public ProcessResponse SafetyBeamSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        {
            if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)