private EnumVehicleSafetyAction ProcessSensorState(EnumVehicleSafetyAction sensorState) { if (sensorState == localData.MoveControlData.MoveCommand.SensorStatus) { return(sensorState); } if (sensorState == EnumVehicleSafetyAction.EMS) { return(sensorState); } else if (sensorState == EnumVehicleSafetyAction.SlowStop) { if (localData.MoveControlData.MotionControlData.MoveStatus != EnumAxisMoveStatus.Move) { return(localData.MoveControlData.MoveCommand.SensorStatus); } } else if (localData.MoveControlData.MoveCommand.SensorStatus == EnumVehicleSafetyAction.SlowStop || localData.MoveControlData.MoveCommand.SensorStatus == EnumVehicleSafetyAction.EMS) { if (localData.MoveControlData.MotionControlData.MoveStatus != EnumAxisMoveStatus.Stop) { return(localData.MoveControlData.MoveCommand.SensorStatus); } } else { if (localData.MoveControlData.MotionControlData.MoveStatus != EnumAxisMoveStatus.Move) { return(localData.MoveControlData.MoveCommand.SensorStatus); } } return(sensorState); }
public EnumVehicleSafetyAction GetSensorState() { EnumVehicleSafetyAction sensorState = EnumVehicleSafetyAction.Normal; /// 正常三種訊號種類. /// 1. AGVC-Pause : 只有Normal/Stop 兩種訊號,在無法Pause的地方下Pause會直接拒絕,不會keeps訊號. /// 2. ReserveIndex : Reserve(路權/避車) 只有Normal(=-1)/Stop(!=-1) 兩種訊號. /// 3. beamSensor : 有Normal/LowSpeed/Stop 三種訊號,由於只是訊號來源,在無法Stop的地方或把訊號切成LowSpeed. /// 4. BumpSensorState : 只有Normal/Stop 兩種訊號. 目前觸發下去後會伴隨軸異常.復規方式串到EMS流程. /// 5. localPauseStatus : 只有Normal/Stop 兩種訊號,會串到台車上的實體按鈕. /// 6. AxisError : 軸異常,由於EMS會對Elmo驅動器下Y點,會導致軸異常,因此軸異常會當作停止訊號,如果軸異常後config秒內沒有收到Bumper/EMO/EMS訊號,會觸發走行軸異常AlarmCode. /// 7. EMS : 只有Normal/Stop 兩種訊號. 軟體急停, 目前無作用,僅套用復歸邏輯使用. /// 8. EMO : 只有Normal/Stop 兩種訊號. 硬體急停, 目前EMO套用軟體急停(對Elmo下Y點為急停,非斷電),套用EMS復歸邏輯. /// 額外類型. /// 1. KeepsLowSpeedStateByEQVChange : 進入EQ前的降速,如果原先速度為1000,但事先觸發到了LowSpeed,原本降速的位置會太早,因此保留當時訊號,把降EQ.Velocity的位置往後拉. /// 2. ontimeReviseLowSpeed : 直線偏差製一定差距時,進行降速修正. if (localData.MoveControlData.MoveCommand.WaitReserveIndex != -1 && localData.MoveControlData.MoveCommand.ReserveList[localData.MoveControlData.MoveCommand.WaitReserveIndex].GetReserve) { WriteLog(7, "", String.Concat("因取得Reserve index : ", localData.MoveControlData.MoveCommand.WaitReserveIndex, ", WaitReserve 變回-1")); localData.MoveControlData.MoveCommand.WaitReserveIndex = -1; } if ((int)localData.MIPCData.SafetySensorStatus >= (int)EnumSafetyLevel.EMS || (localData.MoveControlData.MoveCommand != null && localData.MoveControlData.MoveCommand.EMSResetStatus != EnumEMSResetFlow.None)) { sensorState = EnumVehicleSafetyAction.EMS; } else if (localData.MoveControlData.MoveCommand.AGVPause == EnumVehicleSafetyAction.SlowStop || localData.MoveControlData.MoveCommand.WaitReserveIndex != -1 || localData.MoveControlData.MoveCommand.Cancel || localData.MoveControlData.SensorStatus.LocalPause == EnumVehicleSafetyAction.SlowStop || localData.MIPCData.SafetySensorStatus == EnumSafetyLevel.SlowStop) { sensorState = EnumVehicleSafetyAction.SlowStop; } else if (localData.MIPCData.SafetySensorStatus == EnumSafetyLevel.LowSpeed_Low) { sensorState = EnumVehicleSafetyAction.LowSpeed_Low; } else if (localData.MIPCData.SafetySensorStatus == EnumSafetyLevel.LowSpeed_High) { sensorState = EnumVehicleSafetyAction.LowSpeed_High; } else { sensorState = EnumVehicleSafetyAction.Normal; } if (localData.MoveControlData.MoveCommand.KeepsLowSpeedStateByEQVChange != EnumVehicleSafetyAction.SlowStop && sensorState != EnumVehicleSafetyAction.SlowStop && sensorState != EnumVehicleSafetyAction.EMS) { sensorState = localData.MoveControlData.MoveCommand.KeepsLowSpeedStateByEQVChange; } return(sensorState); }
private void SetLabelTextAndColor(Label label, EnumVehicleSafetyAction type) { label.Text = type.ToString(); switch (type) { case EnumVehicleSafetyAction.Normal: label.ForeColor = Color.Green; break; case EnumVehicleSafetyAction.LowSpeed_High: label.ForeColor = Color.Yellow; break; case EnumVehicleSafetyAction.LowSpeed_Low: label.ForeColor = Color.OrangeRed; break; case EnumVehicleSafetyAction.SlowStop: label.ForeColor = Color.Red; break; } }