DriveManage.cs 2.9 KB
Newer Older
潘栩锋's avatar
潘栩锋 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FLY.Simulation.Flyad7
{
    public class DriveManage
    {
        ISimDrive mSimDrive;
        private void Init(ISimDrive simDrive) 
        {
            mSimDrive = simDrive;
        }

        public void OnPoll()
        {
            
        }

        class ORDER_Runto 
        {
            ISimDrive mSimDrive;
            enum STATE 
            {
                Init,
                Forw,
                Backw,
                Idle
            }
            STATE State;
            public void Start(int targetpos) 
            {
                State = STATE.Init;
            }
            public int TargetPos;
            public void OnPoll() 
            {
                if (mSimDrive is SimDrive_VF0)
                {
                    SimDrive_VF0 vf0 = mSimDrive as SimDrive_VF0;
                    switch (State)
                    {
                        case STATE.Init:
                            {
                                if (TargetPos > mSimDrive.Pos)
                                {
                                    vf0.PIN_OUT_FORW = false;
                                    vf0.PIN_OUT_BACKW = true;
                                    State = STATE.Forw;
                                }
                                else if (TargetPos < mSimDrive.Pos)
                                {
                                    vf0.PIN_OUT_FORW = true;
                                    vf0.PIN_OUT_BACKW = false;
                                    State = STATE.Backw;
                                }
                                else
                                {
                                    vf0.PIN_OUT_FORW = true;
                                    vf0.PIN_OUT_BACKW = true;
                                    State = STATE.Idle;
                                }

                            } break;
                        case STATE.Forw:
                            {
                                if (vf0.Pos >= TargetPos)
                                {
                                    vf0.PIN_OUT_FORW = true;
                                    vf0.PIN_OUT_BACKW = true;
                                    State = STATE.Idle;
                                }
                            } break;
                        case STATE.Backw:
                            {
                                if (vf0.Pos <= TargetPos)
                                {
                                    vf0.PIN_OUT_FORW = true;
                                    vf0.PIN_OUT_BACKW = true;
                                    State = STATE.Idle;
                                }
                            } break;
                        case STATE.Idle:
                            break;
                    }
                }
            }
        } 
    }
}