领胜LDS 键盘AOI检测项目
xcd
2020-07-11 56d73b9710766e7acab2e084a6af322175c78f1b
添加急停按钮相关处理
2个文件已修改
63 ■■■■■ 已修改文件
src/Bro.M071.Process/M071Process.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Process_MotionCard.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Process.cs
@@ -220,6 +220,11 @@
                  {
                      _pauseHandle.WaitHandle.WaitOne();
                      if (MachineState != MachineState.Running)
                      {
                          throw new ProcessException("机台状态不在运行中,退出检测");
                      }
                      IDevice device = DeviceCollection.FirstOrDefault(u => u.Id == s.MotionOp.Device);
                      if (device == null)
                          throw new ProcessException($"{s.Name}拍照点位未设置运动设备");
src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -206,9 +206,9 @@
            //    }
            //}
            if (IsSafetyBeamTrigged || IsSafetyDoorTrigged)
            if (!IsAllowedWork)
            {
                LogAsync(DateTime.Now, $"{(IsSafetyDoorTrigged ? "安全门" : "")}{(IsSafetyBeamTrigged ? " 安全光线" : "")}触发中,复位失败", "");
                LogAsync(DateTime.Now, $"{(IsSafetyDoorTrigged ? "安全门" : "")}{(IsSafetyBeamTrigged ? " 安全光线" : "")}{(isEmergencyStopped ? " 急停按钮" : "")}触发中,复位失败", "");
                return new ProcessResponse(false);
            }
@@ -217,6 +217,12 @@
            RaisedAlarm("");
            MachineState = MachineState.Ready;
            if (IsEmergencyStopped)
            {
                RaisedAlarm("急停按钮未恢复,请执行大复位");
                MachineState = MachineState.Alarm;
            }
            if (ResetTimer == null)
            {
@@ -277,6 +283,7 @@
            //{
            //    motionCard.Run(opConfig);
            //}
            MachineState = MachineState.Resetting;
            MotionCardDefaultRun("FullReset", ref opConfig, ref invokeDevice);
@@ -285,7 +292,11 @@
            OnFullResetDone?.Invoke();
            isFullResetCovered = true;
            LogAsync(DateTime.Now, "大复位动作完成", "");
            RaisedAlarm("");
            MachineState = MachineState.Ready;
            return new ProcessResponse(true);
@@ -582,6 +593,11 @@
            }
        }
        bool IsAllowedWork
        {
            get => !(IsSafetyBeamTrigged || IsSafetyDoorTrigged || IsEmergencyStopped);
        }
        #region 安全门 & 安全光线
        bool isSafetyDoorTrigged = false;
        bool isSafetyBeamTrigged = false;
@@ -631,5 +647,43 @@
            return new ProcessResponse(true);
        }
        #endregion
        #region 急停
        bool isEmergencyStopped = false;
        bool isFullResetCovered = true;
        public bool IsEmergencyStopped
        {
            get => isEmergencyStopped && isFullResetCovered;
            set
            {
                if (value)
                {
                    isFullResetCovered = false;
                    isEmergencyStopped = true;
                }
                else
                {
                    isEmergencyStopped = false;
                }
            }
        }
        [ProcessMethod("", "EmergencyStop", "急停按钮被拍下", InvokeType.TestInvoke)]
        public ProcessResponse EmergencyStop(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        {
            if (opConfig.InputPara == null || opConfig.InputPara.Count == 0)
                throw new ProcessException("急停按钮未配置输入信号");
            IsEmergencyStopped = opConfig.InputPara[0] == 1;
            if (IsEmergencyStopped)
            {
                RaisedAlarm("急停按钮被拍下");
                MachineState = MachineState.Alarm;
            }
            return new ProcessResponse(true);
        }
        #endregion
    }
}