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(); } }
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); }