コード例 #1
0
        static void ParseSysCmd(string cmd)
        {
            string[] cmdArray = cmd.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            if (cmdArray.Length < 2)
            {
                Console.WriteLine("Bad Command");
                return;
            }
            switch (cmdArray[0])
            {
            case "wsd":
                switch (cmdArray[1])
                {
                case "powup":
                    if (busStarted)
                    {
                        if (wsd.OP_MODE != ControlOpMode.NoInit)
                        {
                            Console.WriteLine("WSD is already started,please stop first");
                        }
                        else
                        {
                            try
                            {
                                wsd.PowerUp();
                                Console.WriteLine("WSD is started successfully");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("WSD could not start");
                                Console.WriteLine("WSD ERROR: " + ex.Message);
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Need to start bus before start WSD");
                    }
                    break;

                case "powoff":
                    if (wsd.OP_MODE != ControlOpMode.NoInit)
                    {
                        try
                        {
                            wsd.PowerOff();
                            Console.WriteLine("WSD is stopped successfully");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("WSD could not stop");
                            Console.WriteLine("WSD ERROR: " + ex.Message);
                        }
                    }
                    else
                    {
                        Console.WriteLine("WSD is already stopped,please start firstly");
                    }
                    break;

                case "autocenter":
                    wsd.keypad.AUTO_CENTER_SW = true;
                    Thread.Sleep(500);
                    Console.Write("Moving.");
                    while ((wsd.OP_MODE != ControlOpMode.Idle) || (otcxyz.OP_MODE != ControlOpMode.Idle) || (tbl.OP_MODE != ControlOpMode.Idle) || (otcxyz.AB_OPMODE != ControlOpMode.Idle))
                    {
                        Console.Write(" .");
                        Thread.Sleep(500);
                        Console.Write(" .");
                        Thread.Sleep(500);
                        Console.Write(" .");
                    }
                    Console.WriteLine("");
                    Console.WriteLine("Auto Center Finished");
                    wsd.keypad.AUTO_CENTER_SW = false;
                    break;

                case "autopos":
                    wsd.keypad.AUTO_POS_SW = true;
                    Thread.Sleep(500);
                    Console.Write("Moving.");
                    while ((wsd.OP_MODE != ControlOpMode.Idle) || (otcxyz.OP_MODE != ControlOpMode.Idle) || (tbl.OP_MODE != ControlOpMode.Idle) || (otcxyz.AB_OPMODE != ControlOpMode.Idle))
                    {
                        Console.Write(" .");
                        Thread.Sleep(500);
                        Console.Write(" .");
                        Thread.Sleep(500);
                        Console.Write(" .");
                    }
                    Console.WriteLine("");
                    Console.WriteLine("Auto Position Finished");
                    wsd.keypad.AUTO_POS_SW = false;
                    break;

                case "getstat":
                    Console.WriteLine("WSD Status: " + wsd.OP_MODE.ToString());
                    break;

                case "getpos":
                    Console.WriteLine("WSD Position: " + "X-" + wsd.X_POS.ToString() + " Y-" + wsd.Y_POS.ToString() + " Z-" + wsd.Z_POS.ToString() + " Tilt-" + wsd.TILT_POS.ToString() + " Ang-" + wsd.ANG_POS.ToString());
                    break;

                case "move":
                    if (cmdArray.Length < 3)
                    {
                        Console.WriteLine("The command wsd move will move WSD to designated position");
                        Console.WriteLine("wsd move [-x xpos] [-y ypos] [-z zpos] [-t tiltpos] [-a angpos]");
                        break;
                    }
                    var options = new WSDOption();
                    var parser  = new CommandLine.Parser(with => with.HelpWriter = Console.Out);

                    if (parser.ParseArgumentsStrict(SplitArray(cmdArray, 2, cmdArray.Length - 1), options, () => Console.WriteLine()))
                    {
                        try
                        {
                            if (options.Xpos != -8192.00)
                            {
                                wsd.XRelBtnPress();
                                wsd.X_POS = options.Xpos;
                                wsd.XRelBtnRelease();
                            }
                            if (options.ZPos != -8192.00)
                            {
                                wsd.ZRelBtnPress();
                                wsd.Z_POS = options.ZPos;
                                wsd.ZRelBtnRelease();
                            }
                            Thread.Sleep(500);
                            Console.WriteLine("WSD Move Finished!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("WSD Move Error: " + ex.Message);
                        }
                    }
                    break;

                default:
                    Console.WriteLine("unknown WSD command,please make sure the command format is correct!");
                    break;
                }
                break;

            case "otc":
                switch (cmdArray[1])
                {
                case "powup":
                    if (busStarted)
                    {
                        if ((otcxyz.OP_MODE != ControlOpMode.NoInit) || (otcxyz.AB_OPMODE != ControlOpMode.NoInit))
                        {
                            Console.WriteLine("OTC is already started,please stop first");
                        }
                        else
                        {
                            try
                            {
                                otcxyz.PowerUp();
                                Console.WriteLine("OTC is started successfully");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("OTC could not start");
                                Console.WriteLine("OTC ERROR: " + ex.Message);
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Need to start bus before start OTC");
                    }
                    break;

                case "powoff":
                    if (otcxyz.OP_MODE != ControlOpMode.NoInit)
                    {
                        try
                        {
                            otcxyz.PowerOff();
                            Console.WriteLine("OTC is stopped successfully");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("OTC could not stop");
                            Console.WriteLine("OTC ERROR: " + ex.Message);
                        }
                    }
                    else
                    {
                        Console.WriteLine("OTC is already stopped,please start firstly");
                    }
                    break;

                case "getstat":
                    Console.WriteLine("OTC XYZ Status: " + otcxyz.OP_MODE.ToString());
                    Console.WriteLine("OTC AB  Status: " + otcxyz.AB_OPMODE.ToString());
                    break;

                case "getpos":
                    Console.WriteLine("OTC Position: " + "X-" + otcxyz.X_POS.ToString() + " Y-" + otcxyz.Y_POS.ToString() + " Z-" + otcxyz.Z_POS.ToString() + " A-" + otcxyz.A_POS.ToString() + " B" + otcxyz.B_POS.ToString());
                    break;

                case "xyzmove":
                {
                    if (cmdArray.Length < 3)
                    {
                        Console.WriteLine("The command otc xyzmove will move otc xyz to designated position");
                        Console.WriteLine("otc xyzmove [-x xpos] [-y ypos] [-z zpos]");
                        break;
                    }
                    var options = new OTCOption();
                    var parser  = new CommandLine.Parser(with => with.HelpWriter = Console.Out);
                    if (parser.ParseArgumentsStrict(SplitArray(cmdArray, 2, cmdArray.Length - 1), options, () => Console.WriteLine()))
                    {
                        try
                        {
                            otcxyz.XYZRelBtnPress();
                            if (options.Xpos != -8192.00)
                            {
                                otcxyz.X_POS = options.Xpos;
                            }
                            if (options.Ypos != -8192.00)
                            {
                                otcxyz.Y_POS = options.Ypos;
                            }
                            if (options.ZPos != -8192.00)
                            {
                                otcxyz.Z_POS = options.ZPos;
                            }
                            otcxyz.XYZRelBtnRelease();
                            Thread.Sleep(500);
                            Console.WriteLine("OTC xyzmove Finished!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("OTC xyzmove Error: " + ex.Message);
                        }
                    }
                }
                break;

                case "abmove":
                {
                    if (cmdArray.Length < 3)
                    {
                        Console.WriteLine("The command otc  abmove will move otc ab to designated position");
                        Console.WriteLine("otc abmove [-a apos] [-b bpos]");
                        break;
                    }
                    var options = new OTCOption();
                    var parser  = new CommandLine.Parser(with => with.HelpWriter = Console.Out);
                    if (parser.ParseArgumentsStrict(SplitArray(cmdArray, 2, cmdArray.Length - 1), options, () => Console.WriteLine()))
                    {
                        try
                        {
                            if (options.APos != -3276.0)
                            {
                                otcxyz.ARelBtnPress();
                                otcxyz.A_POS = options.APos;
                                otcxyz.ARelBtnRelease();
                            }

                            if (options.BPos != -3276.0)
                            {
                                otcxyz.BRelBtnPress();
                                otcxyz.B_POS = options.BPos;
                                otcxyz.BRelBtnRelease();
                            }
                            Thread.Sleep(500);
                            Console.WriteLine("OTC AB Move Finished!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("OTC AB Move Error: " + ex.Message);
                        }
                    }
                }
                break;

                default:
                    Console.WriteLine("unknown OTC command,please make sure the command format is correct!");
                    break;
                }
                break;

            case "tbl":
                switch (cmdArray[1])
                {
                case "powup":
                    if (busStarted)
                    {
                        if (tbl.OP_MODE != ControlOpMode.NoInit)
                        {
                            Console.WriteLine("TBL is already started,please stop first");
                        }
                        else
                        {
                            try
                            {
                                tbl.PowerUp();
                                Console.WriteLine("TBL is started successfully");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("TBL could not start");
                                Console.WriteLine("TBL ERROR: " + ex.Message);
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Need to start bus before start TBL");
                    }
                    break;

                case "powoff":
                    if (tbl.OP_MODE != ControlOpMode.NoInit)
                    {
                        try
                        {
                            tbl.PowerOff();
                            Console.WriteLine("TBL is stopped successfully");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("TBL could not stop");
                            Console.WriteLine("TBL ERROR: " + ex.Message);
                        }
                    }
                    else
                    {
                        Console.WriteLine("TBL is already stopped,please start firstly");
                    }
                    break;

                case "autocenter":
                    tbl.AUTOCENTER_SW = true;
                    Thread.Sleep(500);
                    Console.Write("Moving.");
                    while ((wsd.OP_MODE != ControlOpMode.Idle) || (otcxyz.OP_MODE != ControlOpMode.Idle) || (tbl.OP_MODE != ControlOpMode.Idle) || (otcxyz.AB_OPMODE != ControlOpMode.Idle))
                    {
                        Console.Write(" .");
                        Thread.Sleep(500);
                        Console.Write(" .");
                        Thread.Sleep(500);
                        Console.Write(" .");
                    }
                    Console.WriteLine("");
                    Console.WriteLine("Auto Center Finished");
                    tbl.AUTOCENTER_SW = false;
                    break;

                case "getstat":
                    Console.WriteLine("TBL Status: " + tbl.OP_MODE.ToString());
                    break;

                case "getpos":
                    Console.WriteLine("TBL Position: " + "X-" + tbl.X_POS.ToString() + " Y-" + tbl.Y_POS.ToString() + " Z-" + tbl.Z_POS.ToString());
                    break;

                case "move":
                    if (cmdArray.Length < 3)
                    {
                        Console.WriteLine("The command tbl move will move table to designated position");
                        Console.WriteLine("tbl move [-x xpos] [-y ypos] [-z zpos]");
                        break;
                    }
                    var options = new TBLOption();
                    var parser  = new CommandLine.Parser(with => with.HelpWriter = Console.Out);
                    if (parser.ParseArgumentsStrict(SplitArray(cmdArray, 2, cmdArray.Length - 1), options, () => Console.WriteLine()))
                    {
                        try
                        {
                            tbl.FloatBtnDown();
                            if (options.Xpos != -8192.00)
                            {
                                tbl.X_POS = options.Xpos;
                            }
                            if (options.Ypos != -8192.00)
                            {
                                tbl.Y_POS = options.Ypos;
                            }
                            tbl.FloatBtnUp();
                            if (options.ZPos != -8192.00)
                            {
                                if (tbl.Z_POS < options.ZPos)
                                {
                                    tbl.ZUpBtnDown();
                                    tbl.Z_POS = options.ZPos;
                                    tbl.ZUpBtnUp();
                                }
                                else
                                {
                                    tbl.ZDownBtnDown();
                                    tbl.Z_POS = options.ZPos;
                                    tbl.ZDownBtnUp();
                                }
                            }
                            Thread.Sleep(500);
                            Console.WriteLine("TBL Move Finished!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("TBL Move Error: " + ex.Message);
                        }
                    }
                    break;

                default:
                    Console.WriteLine("unknown TBL command,please make sure the command format is correct!");
                    break;
                }
                break;

            case "wsdbk":
                switch (cmdArray[1])
                {
                case "eject":
                    try
                    {
                        wsd.EjectDetector();
                        Console.WriteLine("Detector ejected");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Eject Error: " + ex.Message);
                    }
                    Thread.Sleep(1000);
                    break;

                case "insert":
                    try
                    {
                        wsd.InsertDetector(Byte.Parse(cmdArray[2]));
                        Console.WriteLine("Detector " + wsd.DET_ID.ToString() + " is inserted in Wall Bucky successfully");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("detector inserting failed");
                        Console.WriteLine("Error: " + ex.Message);
                    }
                    break;

                case "check":
                    Console.WriteLine("WSD Detector: " + wsd.DET_ID.ToString());
                    break;

                default:
                    Console.WriteLine("unknown WSD bucky command,please make sure the command format is correct!");
                    break;
                }
                break;

            case "tblbk":
                switch (cmdArray[1])
                {
                case "eject":
                    try
                    {
                        tbl.EjectDetector();
                        Console.WriteLine("Detector ejected");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Eject Error: " + ex.Message);
                    }
                    Thread.Sleep(1000);
                    break;

                case "insert":
                    try
                    {
                        tbl.InsertDetector(Byte.Parse(cmdArray[2]));
                        Console.WriteLine("Detector " + tbl.DET_ID.ToString() + " is inserted in Table Bucky successfully");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("detector inserting failed");
                        Console.WriteLine("Error: " + ex.Message);
                    }
                    break;

                case "check":
                    Console.WriteLine("TBL Detector: " + wsd.DET_ID.ToString());
                    break;

                default:
                    Console.WriteLine("unknown TBL bucky command,please make sure the command format is correct!");
                    break;
                }
                break;

                #region System CMD
            case "system":
                switch (cmdArray[1])
                {
                case "up":
                    if (!busStarted)
                    {
                        try
                        {
                            bus.StartBus();
                            busStarted = true;
                            Console.WriteLine("Can bus started successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Can bus could not start!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Can bus is already running,please run system power up when state is poweroff");
                    }
                    if (otcxyz.OP_MODE == ControlOpMode.NoInit)
                    {
                        try
                        {
                            otcxyz.PowerUp();
                            Console.WriteLine("OTC started successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("OTC could not start!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("OTC is already running");
                    }
                    if (wsd.OP_MODE == ControlOpMode.NoInit)
                    {
                        try
                        {
                            wsd.PowerUp();
                            Console.WriteLine("WSD started successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("WSD could not start!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("WSD is already running");
                    }
                    if (tbl.OP_MODE == ControlOpMode.NoInit)
                    {
                        try
                        {
                            tbl.PowerUp();
                            Console.WriteLine("TBL started successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("TBL could not start!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("TBL is already running");
                    }
                    if (!col.POW_ON)
                    {
                        try
                        {
                            col.PowerUp();
                            Console.WriteLine("Collimator started successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Collimator could not start!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Collimator is already running");
                    }

                    if (busStarted && col.POW_ON && (otcxyz.OP_MODE == ControlOpMode.NoInit) && (wsd.OP_MODE == ControlOpMode.NoInit) && (otcxyz.AB_OPMODE == ControlOpMode.NoInit) && (tbl.OP_MODE == ControlOpMode.NoInit))
                    {
                        Console.WriteLine("Virtual Lab System Started Successfully!");
                    }
                    break;

                case "off":
                    if (otcxyz.OP_MODE != ControlOpMode.NoInit)
                    {
                        try
                        {
                            otcxyz.PowerOff();
                            Console.WriteLine("OTC stopped successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("OTC could not stop!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("OTC is already stopped");
                    }
                    if (wsd.OP_MODE != ControlOpMode.NoInit)
                    {
                        try
                        {
                            wsd.PowerOff();
                            Console.WriteLine("WSD stopped successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("WSD could not stop!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("WSD is already stopped");
                    }
                    if (tbl.OP_MODE != ControlOpMode.NoInit)
                    {
                        try
                        {
                            tbl.PowerOff();
                            Console.WriteLine("TBL stopped successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("TBL could not stop!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("TBL is already stopped");
                    }
                    if (col.POW_ON)
                    {
                        try
                        {
                            col.PowerOff();
                            Console.WriteLine("Collimator stopped successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Collimator could not stop!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Collimator is already stopped");
                    }
                    if (busStarted)
                    {
                        try
                        {
                            bus.StopBus();
                            busStarted = false;
                            Console.WriteLine("Can bus stopped successfully!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Can bus could not stop!");
                            Console.WriteLine("Error: " + ex.Message);
                            break;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Can bus is already stopped,please run system power off when system is running");
                    }
                    break;

                case "getstat":
                    Console.WriteLine("Can Bus: " + busStarted.ToString());
                    Console.WriteLine("OTC XYZ: " + otcxyz.OP_MODE.ToString());
                    Console.WriteLine("OTC AB: " + otcxyz.AB_OPMODE.ToString());
                    Console.WriteLine("WSD: " + wsd.OP_MODE.ToString());
                    Console.WriteLine("TBL: " + tbl.OP_MODE.ToString());
                    Console.WriteLine("COLLIMATOR:" + col.POW_ON.ToString());
                    break;

                default:
                    Console.WriteLine("unknown SYS command,please make sure the command format is correct!");
                    break;
                }
                break;

                #endregion



            default:
                Console.WriteLine("unknown SYS command,please make sure the command format is correct!");
                break;
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: mildrock/SCBEmulator
        static void ParseSysCmd(string cmd)
        {
            string[] cmdArray = cmd.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);
            if (cmdArray.Length < 2)
            {
                Console.WriteLine("Bad Command");
                return;
            }
            switch (cmdArray[0])
            {
                case "wsd":
                    switch (cmdArray[1])
                    {
                        case "powup":
                            if (busStarted)
                            {
                                if (wsd.OP_MODE != ControlOpMode.NoInit)
                                {
                                    Console.WriteLine("WSD is already started,please stop first");
                                }
                                else
                                {
                                    try
                                    {
                                        wsd.PowerUp();
                                        Console.WriteLine("WSD is started successfully");
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("WSD could not start");
                                        Console.WriteLine("WSD ERROR: " + ex.Message);
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine("Need to start bus before start WSD");
                            }
                            break;
                        case "powoff":
                            if (wsd.OP_MODE != ControlOpMode.NoInit)
                            {
                                try
                                {
                                    wsd.PowerOff();
                                    Console.WriteLine("WSD is stopped successfully");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("WSD could not stop");
                                    Console.WriteLine("WSD ERROR: " + ex.Message);
                                }
                            }
                            else
                            {
                                Console.WriteLine("WSD is already stopped,please start firstly");
                            }
                            break;
                        case "autocenter":
                            wsd.keypad.AUTO_CENTER_SW = true;
                            Thread.Sleep(500);
                            Console.Write("Moving.");
                            while ((wsd.OP_MODE != ControlOpMode.Idle) || (otcxyz.OP_MODE != ControlOpMode.Idle) || (tbl.OP_MODE != ControlOpMode.Idle) || (otcxyz.AB_OPMODE != ControlOpMode.Idle))
                            {
                                Console.Write(" .");
                                Thread.Sleep(500);
                                Console.Write(" .");
                                Thread.Sleep(500);
                                Console.Write(" .");
                            }
                            Console.WriteLine("");
                            Console.WriteLine("Auto Center Finished");
                            wsd.keypad.AUTO_CENTER_SW = false;
                            break;
                        case "autopos":
                            wsd.keypad.AUTO_POS_SW = true;
                            Thread.Sleep(500);
                            Console.Write("Moving.");
                            while ((wsd.OP_MODE != ControlOpMode.Idle) || (otcxyz.OP_MODE != ControlOpMode.Idle) || (tbl.OP_MODE != ControlOpMode.Idle) || (otcxyz.AB_OPMODE != ControlOpMode.Idle))
                            {
                                Console.Write(" .");
                                Thread.Sleep(500);
                                Console.Write(" .");
                                Thread.Sleep(500);
                                Console.Write(" .");
                            }
                            Console.WriteLine("");
                            Console.WriteLine("Auto Position Finished");
                            wsd.keypad.AUTO_POS_SW = false;
                            break;

                        case "getstat":
                            Console.WriteLine("WSD Status: " + wsd.OP_MODE.ToString());
                            break;
                        case "getpos":
                            Console.WriteLine("WSD Position: " + "X-" + wsd.X_POS.ToString() + " Y-" + wsd.Y_POS.ToString() + " Z-" + wsd.Z_POS.ToString() + " Tilt-" + wsd.TILT_POS.ToString() + " Ang-" + wsd.ANG_POS.ToString());
                            break;
                        case "move":
                            if (cmdArray.Length < 3)
                            {
                                Console.WriteLine("The command wsd move will move WSD to designated position");
                                Console.WriteLine("wsd move [-x xpos] [-y ypos] [-z zpos] [-t tiltpos] [-a angpos]");
                                break;
                            }
                            var options = new WSDOption();
                            var parser = new CommandLine.Parser(with => with.HelpWriter = Console.Out);

                             if (parser.ParseArgumentsStrict(SplitArray(cmdArray,2,cmdArray.Length-1), options, () => Console.WriteLine()))
                              {
                                  try
                                  {
                                      if (options.Xpos != -8192.00)
                                      {
                                          wsd.XRelBtnPress();
                                          wsd.X_POS = options.Xpos;
                                          wsd.XRelBtnRelease();
                                      }
                                      if (options.ZPos != -8192.00)
                                      {
                                          wsd.ZRelBtnPress();
                                          wsd.Z_POS = options.ZPos;
                                          wsd.ZRelBtnRelease();
                                      }
                                      Thread.Sleep(500);
                                      Console.WriteLine("WSD Move Finished!");
                                  }
                                  catch (Exception ex)
                                  {
                                      Console.WriteLine("WSD Move Error: " + ex.Message);
                                  }
                              }
                            break;
                        default:
                            Console.WriteLine("unknown WSD command,please make sure the command format is correct!");
                            break;
                    }
                    break;
                case "otc":
                    switch (cmdArray[1])
                    {
                        case "powup":
                            if (busStarted)
                            {
                                if ((otcxyz.OP_MODE != ControlOpMode.NoInit) || (otcxyz.AB_OPMODE != ControlOpMode.NoInit))
                                {
                                    Console.WriteLine("OTC is already started,please stop first");
                                }
                                else
                                {
                                    try
                                    {
                                        otcxyz.PowerUp();
                                        Console.WriteLine("OTC is started successfully");
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("OTC could not start");
                                        Console.WriteLine("OTC ERROR: " + ex.Message);
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine("Need to start bus before start OTC");
                            }
                            break;
                        case "powoff":
                            if (otcxyz.OP_MODE != ControlOpMode.NoInit)
                            {
                                try
                                {
                                    otcxyz.PowerOff();
                                    Console.WriteLine("OTC is stopped successfully");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("OTC could not stop");
                                    Console.WriteLine("OTC ERROR: " + ex.Message);
                                }
                            }
                            else
                            {
                                Console.WriteLine("OTC is already stopped,please start firstly");
                            }
                            break;
                        case "getstat":
                            Console.WriteLine("OTC XYZ Status: " + otcxyz.OP_MODE.ToString());
                            Console.WriteLine("OTC AB  Status: " + otcxyz.AB_OPMODE.ToString());
                            break;
                        case "getpos":
                            Console.WriteLine("OTC Position: " + "X-" + otcxyz.X_POS.ToString() + " Y-" + otcxyz.Y_POS.ToString() + " Z-" + otcxyz.Z_POS.ToString() + " A-" + otcxyz.A_POS.ToString() + " B" + otcxyz.B_POS.ToString());
                            break;
                        case "xyzmove":
                            {
                                if (cmdArray.Length < 3)
                                {
                                    Console.WriteLine("The command otc xyzmove will move otc xyz to designated position");
                                    Console.WriteLine("otc xyzmove [-x xpos] [-y ypos] [-z zpos]");
                                    break;
                                }
                                var options = new OTCOption();
                                var parser = new CommandLine.Parser(with => with.HelpWriter = Console.Out);
                                if (parser.ParseArgumentsStrict(SplitArray(cmdArray, 2, cmdArray.Length - 1), options, () => Console.WriteLine()))
                                {
                                    try
                                    {
                                        otcxyz.XYZRelBtnPress();
                                        if (options.Xpos != -8192.00)
                                        {
                                            otcxyz.X_POS = options.Xpos;
                                        }
                                        if (options.Ypos != -8192.00)
                                        {
                                            otcxyz.Y_POS = options.Ypos;
                                        }
                                        if (options.ZPos != -8192.00)
                                        {
                                            otcxyz.Z_POS = options.ZPos;
                                        }
                                        otcxyz.XYZRelBtnRelease();
                                        Thread.Sleep(500);
                                        Console.WriteLine("OTC xyzmove Finished!");
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("OTC xyzmove Error: " + ex.Message);
                                    }
                                }
                            }
                            break;
                        case "abmove":
                            {
                                if (cmdArray.Length < 3)
                                {
                                    Console.WriteLine("The command otc  abmove will move otc ab to designated position");
                                    Console.WriteLine("otc abmove [-a apos] [-b bpos]");
                                    break;
                                }
                                var options = new OTCOption();
                                var parser = new CommandLine.Parser(with => with.HelpWriter = Console.Out);
                                if (parser.ParseArgumentsStrict(SplitArray(cmdArray, 2, cmdArray.Length - 1), options, () => Console.WriteLine()))
                                {
                                    try
                                    {

                                        if (options.APos != -3276.0)
                                        {
                                            otcxyz.ARelBtnPress();
                                            otcxyz.A_POS = options.APos;
                                            otcxyz.ARelBtnRelease();
                                        }

                                        if (options.BPos != -3276.0)
                                        {
                                            otcxyz.BRelBtnPress();
                                            otcxyz.B_POS = options.BPos;
                                            otcxyz.BRelBtnRelease();
                                        }
                                        Thread.Sleep(500);
                                        Console.WriteLine("OTC AB Move Finished!");
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("OTC AB Move Error: " + ex.Message);
                                    }
                                }
                            }
                            break;
                        default:
                            Console.WriteLine("unknown OTC command,please make sure the command format is correct!");
                            break;
                    }
                    break;
                case "tbl":
                    switch (cmdArray[1])
                    {
                        case "powup":
                            if (busStarted)
                            {
                                if (tbl.OP_MODE != ControlOpMode.NoInit)
                                {
                                    Console.WriteLine("TBL is already started,please stop first");
                                }
                                else
                                {
                                    try
                                    {
                                        tbl.PowerUp();
                                        Console.WriteLine("TBL is started successfully");
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("TBL could not start");
                                        Console.WriteLine("TBL ERROR: " + ex.Message);
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine("Need to start bus before start TBL");
                            }
                            break;
                        case "powoff":
                            if (tbl.OP_MODE != ControlOpMode.NoInit)
                            {
                                try
                                {
                                    tbl.PowerOff();
                                    Console.WriteLine("TBL is stopped successfully");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("TBL could not stop");
                                    Console.WriteLine("TBL ERROR: " + ex.Message);
                                }
                            }
                            else
                            {
                                Console.WriteLine("TBL is already stopped,please start firstly");
                            }
                            break;
                        case "autocenter":
                            tbl.AUTOCENTER_SW = true;
                            Thread.Sleep(500);
                            Console.Write("Moving.");
                            while ((wsd.OP_MODE != ControlOpMode.Idle) || (otcxyz.OP_MODE != ControlOpMode.Idle) || (tbl.OP_MODE != ControlOpMode.Idle) || (otcxyz.AB_OPMODE != ControlOpMode.Idle))
                            {
                                Console.Write(" .");
                                Thread.Sleep(500);
                                Console.Write(" .");
                                Thread.Sleep(500);
                                Console.Write(" .");
                            }
                            Console.WriteLine("");
                            Console.WriteLine("Auto Center Finished");
                            tbl.AUTOCENTER_SW = false;
                            break;
                        case "getstat":
                            Console.WriteLine("TBL Status: " + tbl.OP_MODE.ToString());
                            break;
                        case "getpos":
                            Console.WriteLine("TBL Position: " + "X-" + tbl.X_POS.ToString() + " Y-" + tbl.Y_POS.ToString() + " Z-" + tbl.Z_POS.ToString());
                            break;
                        case "move":
                            if (cmdArray.Length < 3)
                            {
                                Console.WriteLine("The command tbl move will move table to designated position");
                                Console.WriteLine("tbl move [-x xpos] [-y ypos] [-z zpos]");
                                break;
                            }
                             var options = new TBLOption();
                            var parser = new CommandLine.Parser(with => with.HelpWriter = Console.Out);
                             if (parser.ParseArgumentsStrict(SplitArray(cmdArray,2,cmdArray.Length-1), options, () => Console.WriteLine()))
                              {
                                  try
                                  {
                                      tbl.FloatBtnDown();
                                      if (options.Xpos != -8192.00)
                                      {
                                          tbl.X_POS = options.Xpos;
                                      }
                                      if (options.Ypos != -8192.00)
                                      {
                                          tbl.Y_POS = options.Ypos;
                                      }
                                      tbl.FloatBtnUp();
                                      if (options.ZPos != -8192.00)
                                      {
                                          if (tbl.Z_POS < options.ZPos)
                                          {
                                              tbl.ZUpBtnDown();
                                              tbl.Z_POS = options.ZPos;
                                              tbl.ZUpBtnUp();
                                          }
                                          else
                                          {
                                              tbl.ZDownBtnDown();
                                              tbl.Z_POS = options.ZPos;
                                              tbl.ZDownBtnUp();
                                          }
                                      }
                                      Thread.Sleep(500);
                                      Console.WriteLine("TBL Move Finished!");
                                  }
                                  catch (Exception ex)
                                  {
                                      Console.WriteLine("TBL Move Error: " + ex.Message);
                                  }
                              }
                            break;
                        default:
                            Console.WriteLine("unknown TBL command,please make sure the command format is correct!");
                            break;
                    }
                    break;
                case "wsdbk":
                    switch (cmdArray[1])
                    {
                        case "eject":
                            try
                            {
                                wsd.EjectDetector();
                                Console.WriteLine("Detector ejected");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("Eject Error: " + ex.Message);
                            }
                            Thread.Sleep(1000);
                            break;
                        case "insert":
                            try
                            {
                                wsd.InsertDetector(Byte.Parse(cmdArray[2]));
                                Console.WriteLine("Detector " + wsd.DET_ID.ToString() + " is inserted in Wall Bucky successfully");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("detector inserting failed");
                                Console.WriteLine("Error: " + ex.Message);
                            }
                            break;
                        case "check":
                            Console.WriteLine("WSD Detector: " + wsd.DET_ID.ToString());
                            break;
                        default:
                            Console.WriteLine("unknown WSD bucky command,please make sure the command format is correct!");
                            break;
                    }
                    break;
                case "tblbk":
                    switch (cmdArray[1])
                    {
                        case "eject":
                            try
                            {
                                tbl.EjectDetector();
                                Console.WriteLine("Detector ejected");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("Eject Error: " + ex.Message);
                            }
                            Thread.Sleep(1000);
                            break;
                        case "insert":
                            try
                            {
                                tbl.InsertDetector(Byte.Parse(cmdArray[2]));
                                Console.WriteLine("Detector " + tbl.DET_ID.ToString() + " is inserted in Table Bucky successfully");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("detector inserting failed");
                                Console.WriteLine("Error: " + ex.Message);
                            }
                            break;
                        case "check":
                            Console.WriteLine("TBL Detector: " + wsd.DET_ID.ToString());
                            break;
                        default:
                            Console.WriteLine("unknown TBL bucky command,please make sure the command format is correct!");
                            break;
                    }
                    break;

                #region System CMD
                case "system":
                    switch (cmdArray[1])
                    {
                        case "up":
                            if (!busStarted)
                            {
                                try
                                {
                                    bus.StartBus();
                                    busStarted = true;
                                    Console.WriteLine("Can bus started successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("Can bus could not start!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }
                            }
                            else
                            {
                                Console.WriteLine("Can bus is already running,please run system power up when state is poweroff");
                            }
                            if (otcxyz.OP_MODE == ControlOpMode.NoInit)
                            {
                                try
                                {
                                    otcxyz.PowerUp();
                                    Console.WriteLine("OTC started successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("OTC could not start!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }

                            }
                            else
                            {
                                Console.WriteLine("OTC is already running");
                            }
                            if (wsd.OP_MODE == ControlOpMode.NoInit)
                            {
                                try
                                {
                                    wsd.PowerUp();
                                    Console.WriteLine("WSD started successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("WSD could not start!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }

                            }
                            else
                            {
                                Console.WriteLine("WSD is already running");
                            }
                            if (tbl.OP_MODE == ControlOpMode.NoInit)
                            {
                                try
                                {
                                    tbl.PowerUp();
                                    Console.WriteLine("TBL started successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("TBL could not start!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }

                            }
                            else
                            {
                                Console.WriteLine("TBL is already running");
                            }
                            if (!col.POW_ON)
                            {
                                try
                                {
                                    col.PowerUp();
                                    Console.WriteLine("Collimator started successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("Collimator could not start!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }
                            }
                            else
                            {
                                Console.WriteLine("Collimator is already running");
                            }

                            if (busStarted && col.POW_ON && (otcxyz.OP_MODE == ControlOpMode.NoInit) && (wsd.OP_MODE == ControlOpMode.NoInit) && (otcxyz.AB_OPMODE == ControlOpMode.NoInit) && (tbl.OP_MODE == ControlOpMode.NoInit))
                            {
                                Console.WriteLine("Virtual Lab System Started Successfully!");
                            }
                            break;

                        case "off":
                            if (otcxyz.OP_MODE != ControlOpMode.NoInit)
                            {
                                try
                                {
                                    otcxyz.PowerOff();
                                    Console.WriteLine("OTC stopped successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("OTC could not stop!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }

                            }
                            else
                            {
                                Console.WriteLine("OTC is already stopped");
                            }
                            if (wsd.OP_MODE != ControlOpMode.NoInit)
                            {
                                try
                                {
                                    wsd.PowerOff();
                                    Console.WriteLine("WSD stopped successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("WSD could not stop!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }

                            }
                            else
                            {
                                Console.WriteLine("WSD is already stopped");
                            }
                            if (tbl.OP_MODE != ControlOpMode.NoInit)
                            {
                                try
                                {
                                    tbl.PowerOff();
                                    Console.WriteLine("TBL stopped successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("TBL could not stop!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }

                            }
                            else
                            {
                                Console.WriteLine("TBL is already stopped");
                            }
                            if (col.POW_ON)
                            {
                                try
                                {
                                    col.PowerOff();
                                    Console.WriteLine("Collimator stopped successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("Collimator could not stop!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }
                            }
                            else
                            {
                                Console.WriteLine("Collimator is already stopped");
                            }
                            if (busStarted)
                            {
                                try
                                {
                                    bus.StopBus();
                                    busStarted = false;
                                    Console.WriteLine("Can bus stopped successfully!");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("Can bus could not stop!");
                                    Console.WriteLine("Error: " + ex.Message);
                                    break;
                                }
                            }
                            else
                            {
                                Console.WriteLine("Can bus is already stopped,please run system power off when system is running");
                            }
                            break;
                        case "getstat":
                            Console.WriteLine("Can Bus: " + busStarted.ToString());
                            Console.WriteLine("OTC XYZ: " + otcxyz.OP_MODE.ToString());
                            Console.WriteLine("OTC AB: " + otcxyz.AB_OPMODE.ToString());
                            Console.WriteLine("WSD: " + wsd.OP_MODE.ToString());
                            Console.WriteLine("TBL: " + tbl.OP_MODE.ToString());
                            Console.WriteLine("COLLIMATOR:" + col.POW_ON.ToString());
                            break;
                        default:
                            Console.WriteLine("unknown SYS command,please make sure the command format is correct!");
                            break;
                    }
                    break;

                #endregion

                default:
                    Console.WriteLine("unknown SYS command,please make sure the command format is correct!");
                    break;
            }
        }