123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- using Aitex.Core.RT.Device;
- using Aitex.Core.RT.Event;
- using Aitex.Core.RT.Fsm;
- using MECF.Framework.Common.Event;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Vehicle
- {
- public class VehicleBaseDevice : Entity, IEntity, IDevice, IVehicle
- {
- public VehicleBaseDevice(string module, string name) : base()
- {
- Module = module;
- Name = name;
- VehicleName = name;
- InitializeVehicleBase();
- }
- private void InitializeVehicleBase()
- {
- BuildTransitionTable();
- }
- private void BuildTransitionTable()
- {
- fsm = new StateMachine<VehicleBaseDevice>(Module + Name + ".StateMachine", (int)VehicleStateEnum.Init, 10);
- AnyStateTransition(VehicleMsg.Error, fError, VehicleStateEnum.Error);
- AnyStateTransition((int)FSM_MSG.ALARM, fError, (int)VehicleStateEnum.Error);
- AnyStateTransition(VehicleMsg.Abort, fAbrot, VehicleStateEnum.Init);
- Transition(VehicleStateEnum.Idle, VehicleMsg.Reset, fStartReset, VehicleStateEnum.Resetting);
- Transition(VehicleStateEnum.Init, VehicleMsg.Reset, fStartReset, VehicleStateEnum.Resetting);
- Transition(VehicleStateEnum.Error, VehicleMsg.Reset, fStartReset, VehicleStateEnum.Resetting);
- Transition(VehicleStateEnum.Resetting, FSM_MSG.TIMER, fMonitorReset, VehicleStateEnum.Idle);
- Transition(VehicleStateEnum.Idle, VehicleMsg.Init, fStartInit, VehicleStateEnum.Initializing);
- Transition(VehicleStateEnum.Init, VehicleMsg.Init, fStartInit, VehicleStateEnum.Initializing);
- Transition(VehicleStateEnum.Error, VehicleMsg.Init, fStartInit, VehicleStateEnum.Initializing);
- Transition(VehicleStateEnum.Initializing, FSM_MSG.TIMER, fMonitorInit, VehicleStateEnum.Idle);
- Transition(VehicleStateEnum.Idle, FSM_MSG.TIMER, fMonitorIdle, VehicleStateEnum.Idle);
- Transition(VehicleStateEnum.Idle, VehicleMsg.Move, fStartMove, VehicleStateEnum.Moving);
- Transition(VehicleStateEnum.Idle, VehicleMsg.Pick, fStartPick, VehicleStateEnum.Picking);
- Transition(VehicleStateEnum.Idle, VehicleMsg.Place, fStartPlace, VehicleStateEnum.Placing);
- Transition(VehicleStateEnum.Moving, FSM_MSG.TIMER, fMonitorMoving, VehicleStateEnum.Idle);
- Transition(VehicleStateEnum.Picking, FSM_MSG.TIMER, fMonitorPicking, VehicleStateEnum.Idle);
- Transition(VehicleStateEnum.Placing, FSM_MSG.TIMER, fMonitorPlacing, VehicleStateEnum.Idle);
- Transition(VehicleStateEnum.Moving, VehicleMsg.Pause, fStartPause, VehicleStateEnum.Pausing);
- Transition(VehicleStateEnum.Picking, VehicleMsg.Pause, fStartPause, VehicleStateEnum.Pausing);
- Transition(VehicleStateEnum.Placing, VehicleMsg.Pause, fStartPause, VehicleStateEnum.Pausing);
- Transition(VehicleStateEnum.Pausing, FSM_MSG.TIMER, fMonitorPausing, VehicleStateEnum.Paused);
- Transition(VehicleStateEnum.Paused, VehicleMsg.ResumeToMove, fResumeToMove, VehicleStateEnum.Moving);
- Transition(VehicleStateEnum.Paused, VehicleMsg.ResumeToPick, fResumeToPick, VehicleStateEnum.Picking);
- Transition(VehicleStateEnum.Paused, VehicleMsg.ResumeToPlace, fResumeToPlace, VehicleStateEnum.Placing);
- Transition(VehicleStateEnum.Idle, VehicleMsg.SetMaitenance, fStartMaitenance, VehicleStateEnum.Maintenance);
- Transition(VehicleStateEnum.Maintenance, VehicleMsg.SetMaitenance, fStartIdle, VehicleStateEnum.Idle);
- }
-
- public bool IsBusy { get; protected set; }
- public bool ExecuteReset()
- {
- if(CheckToPostMessage( VehicleMsg.Reset,null))
- {
- IsBusy = true;
- return true;
- }
- return false;
-
- }
- public bool ExecuteInit()
- {
- if (CheckToPostMessage(VehicleMsg.Init, null))
- {
- IsBusy = true;
- return true;
- }
- return false;
- }
- public bool ExecuteMoveToPosition(uint targetPosition,uint[] viaPositions)
- {
- if (CheckToPostMessage(VehicleMsg.Move, new object[] {targetPosition,viaPositions }))
- {
- IsBusy = true;
- return true;
- }
- return false;
- }
- public bool ExecutePickFromPosition(uint targetPosition, uint[] viaPositions)
- {
- if (CheckToPostMessage(VehicleMsg.Pick, new object[] { targetPosition, viaPositions }))
- {
- IsBusy = true;
- return true;
- }
- return false;
- }
- public bool ExecutePlaceToPosition(uint targetPosition, uint[] viaPositions)
- {
- if (CheckToPostMessage(VehicleMsg.Place, new object[] { targetPosition, viaPositions }))
- {
- IsBusy = true;
- return true;
- }
- return false;
- }
- public bool ExecutePause()
- {
- if (CheckToPostMessage(VehicleMsg.Pause, null))
- {
- IsBusy = true;
- return true;
- }
- return false;
- }
- public virtual bool ExecuteClearCommand()
- {
- return true;
- }
- public virtual bool ExecuteChangeRoute(uint targetPosition,uint[] viaPositions)
- {
- return true;
- }
- public virtual bool ExecuteReadCarrierID()
- {
- return true;
- }
- protected virtual bool fStartPause(object[] param)
- {
- return true;
- }
- protected virtual bool fMonitorPausing(object[] param)
- {
- return true;
- }
- protected virtual bool fStartInit(object[] param)
- {
- return true;
- }
- protected virtual bool fMonitorInit(object[] param)
- {
- return true;
- }
- protected virtual bool fAbrot(object[] param)
- {
- return true;
- }
- protected virtual bool fStartReset(object[] param)
- {
- return true;
- }
- protected virtual bool fMonitorReset(object[] param)
- {
- return true;
- }
- protected virtual bool fMonitorIdle(object[] param)
- {
- return true;
- }
- protected virtual bool fStartMove(object[] param)
- {
- return true;
- }
- protected virtual bool fStartPick(object[] param)
- {
- return true;
- }
- protected virtual bool fStartPlace(object[] param)
- {
- return true;
- }
- protected virtual bool fMonitorMoving(object[] param)
- {
- return true;
- }
- protected virtual bool fMonitorPicking(object[] param)
- {
- return true;
- }
- protected virtual bool fMonitorPlacing(object[] param)
- {
- return true;
- }
- protected virtual bool fPauseMoving(object[] param)
- {
- return true;
- }
- protected virtual bool fPausePicking(object[] param)
- {
- return true;
- }
- protected virtual bool fPausePlacing(object[] param)
- {
- return true;
- }
- protected virtual bool fResumeToMove(object[] param)
- {
- return true;
- }
- protected virtual bool fResumeToPick(object[] param)
- {
- return true;
- }
- protected virtual bool fResumeToPlace(object[] param)
- {
- return true;
- }
- protected virtual bool fStartMaitenance(object[] param)
- {
- return true;
- }
- protected virtual bool fStartIdle(object[] param)
- {
- return true;
- }
- protected virtual bool fError(object[] param)
- {
- return true;
- }
- public virtual void OnError(string error = "")
- {
- EV.PostAlarmLog($"Vehicle {Name}", error);
- IsBusy = false;
- CheckToPostMessage(VehicleMsg.Error, null);
- }
- public string VehicleName { get; set; }
- public string Module { get; set; }
-
- public UInt32 CurrentPosition { get; set; }
- public string Name { get ; set; }
- public bool HasAlarm => throw new NotImplementedException();
- public event Action<string, AlarmEventItem> OnDeviceAlarmStateChanged;
- public bool Check(int msg, out string reason, params object[] args)
- {
- reason = "";
- return true;
- }
- public bool CheckToPostMessage(int msg, params object[] args)
- {
- if (!fsm.FindTransition(fsm.State, msg))
- {
-
- EV.PostWarningLog(Name, $"{Name} is in { (VehicleStateEnum)fsm.State} state,can not do {(VehicleMsg)msg}");
- return false;
- }
- fsm.PostMsg(msg, args);
- return true;
- }
- public bool CheckToPostMessage(VehicleMsg msg, params object[] args)
- {
- if (!fsm.FindTransition(fsm.State, (int)msg))
- {
- EV.PostWarningLog(Name, $"{Name} is in { (VehicleStateEnum)fsm.State} state,can not do {msg}");
- return false;
- }
- CurrentParameters = args;
- fsm.PostMsg((int)msg, args);
- return true;
- }
- public object[] CurrentParameters { get; private set; }
- public void Monitor()
- {
-
- }
- public void Reset()
- {
-
- }
- }
- }
|