Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
            }
        }