| | |
| | | get => machineState; |
| | | set |
| | | { |
| | | if (machineState == value) |
| | | return; |
| | | |
| | | machineState = value; |
| | | |
| | | switch (machineState) |
| | |
| | | |
| | | Task.Run(() => |
| | | { |
| | | lock (machineStateLock) |
| | | { |
| | | |
| | | while (MachineState == MachineState.Ready) |
| | | { |
| | | lock (machineStateLock) |
| | | { |
| | | SwitchLightGreen(true); |
| | | Thread.Sleep(1000); |
| | |
| | | } |
| | | Task.Run(() => |
| | | { |
| | | lock (machineStateLock) |
| | | { |
| | | while (MachineState == MachineState.Pause) |
| | | { |
| | | lock (machineStateLock) |
| | | { |
| | | SwitchLightYellow(true); |
| | | SwitchLightGreen(true); |
| | |
| | | } |
| | | Task.Run(() => |
| | | { |
| | | lock (machineStateLock) |
| | | { |
| | | while (MachineState == MachineState.Resetting) |
| | | { |
| | | lock (machineStateLock) |
| | | { |
| | | |
| | | SwitchLightYellow(true); |
| | | Thread.Sleep(1000); |
| | | SwitchLightYellow(false); |
| | |
| | | } |
| | | } |
| | | |
| | | [ProcessMethod("MotionCardBase", "GotoReadyPosition", "运动到预备位置", InvokeType.TestInvoke)] |
| | | public ProcessResponse GotoReadyPosition(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) |
| | | { |
| | | MotionCardDefaultRun("GotoReadyPosition", ref opConfig, ref invokeDevice); |
| | | |
| | | LogAsync(DateTime.Now, "运动到预备位置完成", ""); |
| | | |
| | | return new ProcessResponse(true); |
| | | } |
| | | |
| | | [ProcessMethod("MotionCardBase", "Reset", "简单复位操作", InvokeType.TestInvoke)] |
| | | public ProcessResponse Reset(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) |
| | | { |
| | |
| | | // } |
| | | //} |
| | | |
| | | if (ResetTimer == null) |
| | | { |
| | | ResetTimer = new Timer(FullReset, null, -1, -1); |
| | | } |
| | | |
| | | if (opConfig?.InputPara != null && opConfig.InputPara.Count > 0) |
| | | { |
| | | //大复位信号 |
| | | ResetTimer.Change(opConfig.InputPara[0] == 1 ? FULLRESETTIME * 1000 : -1, -1); |
| | | |
| | | if (opConfig.InputPara[0] == 0) |
| | | return new ProcessResponse(true); |
| | | } |
| | | |
| | | if (!IsAllowedWork) |
| | | { |
| | | LogAsync(DateTime.Now, $"{(IsSafetyDoorTrigged ? "安全门" : "")}{(IsSafetyBeamTrigged ? " 安全光线" : "")}{(isEmergencyStopped ? " 急停按钮" : "")}触发中,复位失败", ""); |
| | | LogAsync(DateTime.Now, $"{SafetyMsg},复位失败", ""); |
| | | return new ProcessResponse(false); |
| | | } |
| | | |
| | |
| | | MachineState = MachineState.Alarm; |
| | | } |
| | | |
| | | if (ResetTimer == null) |
| | | { |
| | | ResetTimer = new Timer(FullReset, null, -1, -1); |
| | | } |
| | | |
| | | if (opConfig.InputPara.Count > 0) |
| | | { |
| | | //大复位信号 |
| | | ResetTimer.Change(-1, opConfig.InputPara[0] == 1 ? FULLRESETTIME * 1000 : -1); |
| | | } |
| | | |
| | | //if (opConfig.InputPara?.Count > 0) |
| | | //{ |
| | | // //大复位信号 |
| | | // ResetTimer.Change(-1, opConfig.InputPara[0] == 1 ? FULLRESETTIME * 1000 : -1); |
| | | //} |
| | | |
| | | //if (invokeDevice is MotionCardBase motionCard) |
| | | //{ |
| | |
| | | |
| | | RaisedAlarm(""); |
| | | MachineState = MachineState.Ready; |
| | | |
| | | GotoReadyPosition(null, null, null); |
| | | |
| | | return new ProcessResponse(true); |
| | | } |
| | |
| | | { |
| | | get => !(IsSafetyBeamTrigged || IsSafetyDoorTrigged || IsEmergencyStopped); |
| | | } |
| | | string SafetyMsg |
| | | { |
| | | get => $"{(IsSafetyBeamTrigged ? "安全光幕" : "")}{(IsSafetyDoorTrigged ? " 安全门" : "")}{(IsEmergencyStopped ? " 急停按钮" : "")}触发中"; |
| | | } |
| | | |
| | | #region 安全门 & 安全光线 |
| | | bool isSafetyDoorTrigged = false; |
| | |
| | | [ProcessMethod("", "SafetyBeamSignal", "安全光幕信号监控,正常ON,OFF时报警", InvokeType.TestInvoke)] |
| | | public ProcessResponse SafetyBeamSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) |
| | | { |
| | | if (MachineState != MachineState.Running || MachineState != MachineState.Alarm) |
| | | return new ProcessResponse(true); |
| | | |
| | | if (opConfig.InputPara == null || opConfig.InputPara.Count == 0) |
| | | throw new ProcessException("安全光幕监控未配置输入信号"); |
| | | |
| | |
| | | if (opConfig.InputPara == null || opConfig.InputPara.Count == 0) |
| | | throw new ProcessException("急停按钮未配置输入信号"); |
| | | |
| | | IsEmergencyStopped = opConfig.InputPara[0] == 1; |
| | | IsEmergencyStopped = opConfig.InputPara[0] == 0; |
| | | |
| | | if (IsEmergencyStopped) |
| | | { |