Beispiel #1
0
        private void BeginArmMovement(int timeForMovement, Model_Arm.ArmPosition newPosn)
        {
            // Should only get here with a positive time and the _ArmTimer not running
            // Double check the arm and grip are not already moving
            if ((timeForMovement >= 0) &&
                (Model_Arm.ArmStatus.HALT == ArmStatus) &&
                (Model_Arm.GripStatus.HALT == GripStatus) &&
                (false == _ArmTimer.Enabled))
            {
                // Set the Arm status to moving as we simulate the arm movement
                ArmStatus = Model_Arm.ArmStatus.MOVING;

                // Set the current arm position to unknown as we simulate that we cannot know where it is
                ArmPosition = Model_Arm.ArmPosition.UNKNOWN;

                // Do not change grip position
                FutureGripPosition = GripPosition;

                // Future arm position set
                FutureArmPosition = newPosn;

                _ArmTimer.Interval = timeForMovement;
                _ArmTimer.Enabled  = true;
                _ArmTimer.Start();
            }
        }
Beispiel #2
0
        public int MoveArmToNewPosition(Model_Arm.ArmPosition newPosn)
        {
            int ElapsingTime = -1;

            if (newPosn == ArmPosition)
            {
                ElapsingTime = 0;
            }
            else
            {
                switch (ArmPosition)
                {
                case Model_Arm.ArmPosition.INPUT_RACK:
                    // From the Input Rack position the arm can only move to the Grind Station
                    if (Model_Arm.ArmPosition.GRIND_STATION == newPosn &&
                        Model_Arm.ArmStatus.HALT == ArmStatus &&
                        Model_Arm.GripStatus.HALT == GripStatus)
                    {
                        ElapsingTime = (int)Model_Arm.TIME_FROM_INPUT_TO_GRIND_ms;
                    }
                    break;

                case Model_Arm.ArmPosition.GRIND_STATION:
                    // From the Grind Station position the arm can only move to the Dispense Station
                    if (Model_Arm.ArmPosition.DISPENSE_STATION == newPosn &&
                        Model_Arm.ArmStatus.HALT == ArmStatus &&
                        Model_Arm.GripStatus.HALT == GripStatus)
                    {
                        ElapsingTime = (int)Model_Arm.TIME_FROM_GRIND_TO_DISPENSE_ms;
                    }
                    break;

                case Model_Arm.ArmPosition.DISPENSE_STATION:
                    // From the Dispense Station position the arm can move to Input or Output Racks

                    // Must be carrying "empty" input vial back to input rack
                    if (Model_Arm.ArmPosition.INPUT_RACK == newPosn &&
                        Model_Arm.ArmStatus.HALT == ArmStatus &&
                        Model_Arm.GripStatus.HALT == GripStatus)
                    {
                        ElapsingTime = (int)Model_Arm.TIME_FROM_DISPENSE_TO_INPUT_ms;
                    }
                    // Must be carrying "full" output vial back to output rack
                    else if (Model_Arm.ArmPosition.OUTPUT_RACK == newPosn &&
                             Model_Arm.ArmStatus.HALT == ArmStatus &&
                             Model_Arm.GripStatus.HALT == GripStatus)
                    {
                        ElapsingTime = (int)Model_Arm.TIME_FROM_DISPENSE_TO_OUTPUT_ms;
                    }
                    else
                    {
                        // N/A
                    }
                    break;

                case Model_Arm.ArmPosition.OUTPUT_RACK:
                    // From the Output Rack position the arm can only move to the Dispense station
                    if (Model_Arm.ArmPosition.DISPENSE_STATION == newPosn &&
                        Model_Arm.ArmStatus.HALT == ArmStatus &&
                        Model_Arm.GripStatus.HALT == GripStatus)
                    {
                        ElapsingTime = (int)Model_Arm.TIME_FROM_OUTPUT_TO_DISPENSE_ms;
                    }
                    break;

                case Model_Arm.ArmPosition.UNKNOWN:
                    break;
                }
            }

            if (ElapsingTime >= 0)
            {
                BeginArmMovement(ElapsingTime, newPosn);
            }

            return(ElapsingTime);
        }