Asynchronous Motion

This AeroScript program shows asynchronous motion.

// Asynchronous Motion Example:
// Demonstrates using MoveIncremental(), MoveAbsolute() and MoveFreerun() axis-based motion.

program

	// Enable and home the axes.
	Enable([X, Y, Z])
	Home([X, Y, Z])

	// Configure the axis-based ramping settings.

	// X and Y will use Linear ramping.  Z will use Sine ramping.
	SetupAxisRampType([X, Y], RampType.Linear)
	SetupAxisRampType(Z, RampType.Sine)

	// X, Y, and Z will use a ramp rate of 1000.0 units/sec/sec.
	SetupAxisRampValue([X, Y, Z], RampMode.Rate, 1000.0)
	SetupAxisRampValue(Z,0,500)

	// Move X, Y, and Z to an initial position of 10 units.
	// Move all axes at 20 units/second.
	// Note: The AeroScript program flow immediately continues after an asynchronous move
	// is started, so we must explicitly wait for the moves to complete.
	MoveAbsolute([X, Y, Z], [10.0, 10.0, 10.0], [20.0, 20.0, 20.0])
	WaitForInPosition([X, Y, Z])

	// Trigger a data collection snapshot in Studio.
	AppDataCollectionSnapshot()

	// Perform independent axis moves on X and Y using absolute target positions, followed by
	// a move on Z using an incremental distance.

	// Move X and Y independently to (27.0 units, 13.5 units).
	// X will move at a maximum speed of 50 units/second.
	// Y will move at a maximum speed of 75 units/second.
	MoveAbsolute([X, Y], [27.0, 13.5], [50.0, 75.0])
	WaitForMotionDone([X, Y])

	// Move Z from its current location by -15.5 units at a speed of 20.0 units/second.
	MoveIncremental(Z, -15.5, 20.0)
	WaitForMotionDone(Z)

	// Perform a freerun move on the Z axes to a constant velocity of +30.0 units/second.
	// After 2 seconds, change the speed to -40.0 units/second.
	// After 2 additional seconds, stop the motion.
	Dwell(1.0)
	MoveFreerun(Z, 30.0)
	Dwell(2.0)
	MoveFreerun(Z, -40.0)
	Dwell(2.0)
	MoveFreerunStop(Z)
	WaitForMotionDone(Z)

	// Stop data collection.
	AppDataCollectionStop()

	// Disable the axes.
	Disable([X, Y, Z])

end