using Rs.Framework; using Rs.Motion; using Rs.MotionPlat.Commom; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Rs.MotionPlat.Flow { public enum EMonitorButtonStep { Monitoring,//监控中 EStopButtonPressed,//急停按钮按下 EStopButtonUp,//急停按钮抬起 StartButtonPressed,//启动按钮按下 StartButtonUp,//启动按钮抬起 ResetButtonPressed,//复位按钮按下 ResetButtonUp,//复位按钮抬起 StopButtonPressed,//停止按钮按下 StopButtonUp,//停止按钮抬起, DoorOpend,//门被打开, LightButtonPressed,//照明被按下 LightButtonUp//照明被抬起 } public enum ESystemButton { None, EStopPressed=1, StartPressed = 2, StopPressed = 4, ResetPressed = 8, EStopUp = 16, StartUp = 32, StopUp= 64, ResetUp = 128 } /// /// 系统按钮监控 /// public class MonitorSystemButton:BaseFlow { private ESystemButton buttonValue = ESystemButton.None; EMonitorButtonStep step = EMonitorButtonStep.Monitoring; private static MonitorSystemButton instance; private short signalValue = 0; public static MonitorSystemButton Instance { get { if(instance==null) { instance = new MonitorSystemButton(); } return instance; } } public void ButtonPressed(ESystemButton button) { buttonValue=button; } private MonitorSystemButton() { sleepTime = 50; stopWaitTime = 100; FlowName = "系统按钮监控"; } /* 0010 0001 & 0001 0010 & */ public override void Run() { switch (step) { case EMonitorButtonStep.Monitoring: signalValue = IoManager.Instance.ReadIn("前急停"); if(signalValue==0 || (buttonValue == ESystemButton.EStopPressed)) { step = EMonitorButtonStep.EStopButtonPressed; break; } signalValue = IoManager.Instance.ReadIn("后急停"); if (signalValue == 0 || (buttonValue == ESystemButton.EStopPressed)) { step = EMonitorButtonStep.EStopButtonPressed; break; } signalValue = IoManager.Instance.ReadIn("启动"); if (signalValue == 1 || (buttonValue == ESystemButton.StartPressed)) { step = EMonitorButtonStep.StartButtonPressed; break; } signalValue = IoManager.Instance.ReadIn("停止"); if (signalValue == 1 || (buttonValue == ESystemButton.StopPressed)) { step = EMonitorButtonStep.StopButtonPressed; break; } signalValue = IoManager.Instance.ReadIn("复位"); //if (signalValue == 1 || (buttonValue == ESystemButton.ResetPressed)) if ((buttonValue == ESystemButton.ResetPressed)) { step = EMonitorButtonStep.ResetButtonPressed; break; } signalValue = IoManager.Instance.ReadIn("光栅门禁开关"); if(signalValue==0 && MachineManage.Instance.MachineStatus== EMachineStatus.Working) { step = EMonitorButtonStep.DoorOpend; break; } signalValue = IoManager.Instance.ReadIn("照明"); if (signalValue == 1) { step = EMonitorButtonStep.LightButtonPressed; break; } break; case EMonitorButtonStep.EStopButtonPressed: MessageQueue.Instance.Insert("急停按钮按下"); MachineManage.Instance.NeedRestoreMove = false; AxisControl.AllDisable(); WorkFlow.Instance.Stop(); TurnoverFlow.Instance.Stop(); AxisControl.AllAbortHome(); HomeFlow.Instance.CancleHome(); MachineManage.Instance.MachineStatus = EMachineStatus.EStop; step = EMonitorButtonStep.EStopButtonUp; break; case EMonitorButtonStep.EStopButtonUp: signalValue = IoManager.Instance.ReadIn("前急停"); if (((IoManager.Instance.ReadIn("前急停") == 1)&& ((IoManager.Instance.ReadIn("后急停") == 1))) || (buttonValue == ESystemButton.ResetPressed)) { buttonValue = ESystemButton.None; //AxisManager.AllEnable(); MachineManage.Instance.MachineStatus = EMachineStatus.NotHomed; MessageQueue.Instance.Insert("急停按钮抬起"); step = EMonitorButtonStep.Monitoring; } break; case EMonitorButtonStep.StartButtonPressed: MessageQueue.Instance.Insert("启动按钮被按下"); if (MachineManage.Instance.MachineStatus== EMachineStatus.Stop || MachineManage.Instance.MachineStatus== EMachineStatus.Homed) { if(MachineManage.Instance.NeedRestoreMove) { MachineManage.Instance.NeedRestoreMove = false; //WorkFlow.Instance.Restore(); Thread.Sleep(100); } WorkFlow.Instance.Start(); MachineManage.Instance.MachineStatus = EMachineStatus.Working; LightManger.Instance.SetStatus(ELightStatus.Green); } else { MessageQueue.Instance.Insert($"设备在{MachineManage.Instance.MachineStatus}状态,无法启动!"); } step = EMonitorButtonStep.StartButtonUp; break; case EMonitorButtonStep.StartButtonUp: signalValue = IoManager.Instance.ReadIn("启动"); if (signalValue == 0 || (buttonValue == ESystemButton.StartUp)) { buttonValue = ESystemButton.None; MessageQueue.Instance.Insert("启动按钮被抬起"); step = EMonitorButtonStep.Monitoring; } break; case EMonitorButtonStep.ResetButtonPressed: //MessageQueue.Instance.Insert("复位按钮被按下"); if (MachineManage.Instance.MachineStatus == EMachineStatus.NotInit || MachineManage.Instance.MachineStatus == EMachineStatus.NotHomed) { HomeFlow.Instance.StartGoHome(); } step = EMonitorButtonStep.ResetButtonUp; break; case EMonitorButtonStep.ResetButtonUp: //signalValue = IoManager.Instance.ReadIn("复位"); if ((buttonValue == ESystemButton.ResetUp)) { buttonValue = ESystemButton.None; //MessageQueue.Instance.Insert("复位按钮抬起"); step = EMonitorButtonStep.Monitoring; } break; case EMonitorButtonStep.StopButtonPressed: MessageQueue.Instance.Insert("停止按钮被按下"); if (MachineManage.Instance.MachineStatus== EMachineStatus.Working || MachineManage.Instance.MachineStatus== EMachineStatus.Homing) { if (MachineManage.Instance.MachineStatus == EMachineStatus.Homing) { HomeFlow.Instance.CancleHome(); MachineManage.Instance.MachineStatus = EMachineStatus.NotHomed; } else { WorkFlow.Instance.Stop(); MachineManage.Instance.MachineStatus = EMachineStatus.Stop; } LightManger.Instance.SetStatus(ELightStatus.Yellow); } step = EMonitorButtonStep.StopButtonUp; break; case EMonitorButtonStep.StopButtonUp: signalValue = IoManager.Instance.ReadIn("停止"); if (signalValue == 0 || (buttonValue == ESystemButton.StopUp)) { buttonValue = ESystemButton.None; MessageQueue.Instance.Insert("停止按钮抬起"); step = EMonitorButtonStep.Monitoring; } break; case EMonitorButtonStep.DoorOpend: //AxisManager.AllStop(); WorkFlow.Instance.Stop(); MachineManage.Instance.NeedRestoreMove = true; MachineManage.Instance.MachineStatus= EMachineStatus.Stop; MessageQueue.Instance.Insert("光栅门禁被触发"); step = EMonitorButtonStep.Monitoring; break; case EMonitorButtonStep.LightButtonPressed: if(Ops.IsOutOn("照明灯")) { Ops.Off("照明灯"); } else { Ops.On("照明灯"); } step = EMonitorButtonStep.LightButtonUp; break; case EMonitorButtonStep.LightButtonUp: if(Ops.IsOff("照明")) { step = EMonitorButtonStep.Monitoring; } break; default: break; } Thread.Sleep(50); } } }