Normalcy Functions

Some types of cutting tools must be normal or perpendicular to the part that is being cut. These tools usually mount to a rotational axis so that the orientation of the tool can change as the position of the part changes. You can use normalcy mode to cause the controller to automatically maintain a perpendicular relation between axes in the normalcy plane and a rotary axis, which is called the normalcy axis. The controller maintains this perpendicular relation when it generates coordinated motion (MoveLinear(), MoveCw(), and MoveCcw()) on the axes in the normalcy plane.

The NormalcySetAxes() function lets you configure the normalcy axis and the axes that are part of the normalcy plane. The controller uses these axes when you activate normalcy mode.

function NormalcySetAxes($normalcyAxis as axis, $planeAxes[] as axis)

Configures the axes to use for normalcy mode.

Arguments

$normalcyAxis  The normalcy axis. This must be a dependent type axis.

$planeAxes  The axes to use as the X and Y axes of the normalcy plane. These axes must be dominant type axes.

The normalcy axis must be a dependent axis. Use the AxisType Parameter to configure an axis as dependent. You must program the normalcy axis in degrees and configure the rollover to 360°. To configure the programming units to degrees, set the CountsPerUnit Parameter equal to the number of encoder counts in 1 degree. You can use fractional values. To configure the rollover to 360°, set the RolloverCounts Parameter equal to 360.0 * CountsPerUnit.

You can use the NormalcySetTolerance() function to specify the absolute value of the minimum angular difference between two consecutive coordinated moves on the axes in the normalcy plane. The tolerance value is specified in degrees. By default, if you do not specify the NormalcySetTolerance() function, then the tolerance value is 0.01°.

To prevent jerking from occurring in the motion of the normalcy axis, you must set the NormalcySetTolerance() function to a small value.

IMPORTANT: Do not set the tolerance to a value that is too small. If you do, the controller causes slowdowns to zero velocity to make sure that it puts the normalcy alignment between moves that are almost at the same angle.

Moves that are almost tangential, but not fully tangential, are typically output by program post processors.

function NormalcySetTolerance($tolerance as real)

Configures the tolerance to use for normalcy mode.

Arguments

$tolerance  The normalcy mode tolerance, in degrees.

To enable normalcy mode, use the NormalcyOn() function. To disable normalcy mode, use the NormalcyOff() function.

function NormalcyOff()

Disables normalcy mode.

function NormalcyOn($normalcyAlignment as NormalcyAlignment)

Enables normalcy mode.

Arguments

$normalcyAlignment  The type of the normalcy mode.

When you enable the normalcy left mode or the normalcy right mode, the normalcy axis generates a normalcy alignment move in order to rotate to the necessary absolute angle. The controller generates a normalcy alignment move only if the absolute value of the angular difference between the normalcy axis and its necessary absolute angle is greater than the tolerance value that you specified to the NormalcySetTolerance() function.

A normalcy alignment move occurs before the first move that you specify after normalcy mode is enabled, and also occurs between consecutive non-tangent moves that you specify. The normalcy axis moves in the direction that results in the shortest move to the absolute angle. In Figure: Normalcy Motion that follows, when you enable normalcy left mode at Point A, the controller executes a normalcy alignment move to rotate the normalcy axis in the direction that results in the shortest move.

For Example

If the initial angle of the normalcy axis is 100°, the normalcy axis rotates to 270°. But if the initial angle of the normalcy axis is 80°, the normalcy axis rotates to -90°. The normalcy alignment move uses the axis speed and axis ramping, not the task speed and task ramping.

In Figure: Normalcy Motion, the arrows show the angle to which the normalcy axis points while the X and Y axes follow the programmed path.

When normalcy mode is enabled and you specify a coordinated arc move with the MoveCw() function or the MoveCcw() function, then normalcy mode continuously moves the normalcy axis during the move in order to maintain the correct angle. The motion on the normalcy axis is known as a normalcy concurrent move because the normalcy axis is moved concurrently with the axes in the normalcy plane. In Figure: Normalcy Motion, a normalcy concurrent move occurs on the normalcy axis as the axes in the normalcy plane generate an arc move from Point C to Point D.

Use the normalcy relative mode to add necessary offsets to the normalcy angles to prevent an initial alignment move.

For Example

If you activate normalcy relative mode at 280°, then the actual angle after Point A is 280° and the actual angle after Point B is 190°.

To see how normalcy relative mode behaves in normalcy mode, refer to the figure that follows:

  • The black line shows the coordinated move profile.
  • The blue axis shows the initial position of the normalcy axis before the moves start.
  • The red arrow shows the position of the normalcy axis when you use normalcy left mode.
  • The green arrow shows the position of the normalcy axis when you use normalcy relative mode.

Normalcy motion is generated from the commanded position of the normalcy axes. It is not generated from the position feedback.

The Home() function cycle disables normalcy motion.

If you use the VelocityBlendingOn() function, large accelerations on the normalcy axis can occur between the types of moves that follow:

  • Arc moves that are tangent (For example, large accelerations can occur between moves CD and DE in Figure: Normalcy Motion.)
  • MoveLinear(), MoveCw(), and MoveCcw() moves

These accelerations occur because the normalcy motion must change velocity immediately. For example, move CD in Figure: Normalcy Motion shows that the normalcy axis is moving. But in move DE, the normalcy axis is not moving.

To prevent these accelerations from occurring, set the DefaultDependentCoordinatedAccelLimit Parameter to the same value as the DefaultAxisRampRate Parameter on the normalcy axis.

Related Topics 

Advanced Motion Functions