This is part of 2.1.0latest release.

Servofloat function

featured image
Image: Bruno/pixabay
5 minutes  

The servofloat function limits the torque and disables position error monitoring for the selected robot axes.

Servofloat is useful for applications with motions where the robot is expected to not reach the target position (e.g. due to tolerances of the workpiece) or where external forces may be applied to the robot (e.g. workpiece being pushed out of an injection molding machine).

Without servofloat such cases will lead to a position error and stop the process.

Servofloat can be used axis-wise (link servofloat) or cartesian (linear servofloat).

settingexample
link servofloattorque for S/L/U/R/B/Tlimit the torque for the S-axis
linear servofloatframe, force for X/Y/Z, torque for R/B/Tlimit the force of the Z-axis in the tool frame

For both of these servofloat types there are eight setting files available in the robot controller. The settings need to be written before any motion takes place (e.g. during startup).

Correct Tool data and Arm control data (e.g. U-Arm payload) are extremely important for servofloat.
Only one type of servofloat can be active at the same time. To switch from one to the other the active servofloat has to be deactivated first.
For the internal calculations, the servofloat motion is handled as any other motion. This means that even if the physical motion already stopped (e.g. when reaching a mechanical limit at 75% of the programmed path), the Sts_PC signal won’t become active until the internal motion calculation reaches 100%.
For a servofloat motion the command position will go all the way till the programmed target position while the feedback position might stop earlier (see monitoring ).

Library components

Data types
MLxAppDataServoFloatServofloat setting data.
MLxAxisServoFloatDataSettings for axis servofloat.
MLxFloatSettingDataServofloat settings for a single axis.
MLxLinearServoFloatDataSettings for linear servofloat.
Function blocks
MLxRobotSetServoFloatOffDeactivate the robot servofloat condition. Motion commands sent after this MLxRobotSetServoFloatOff are no longer executed as servofloat motion.
MLxRobotSetServoFloatOnActivate the robot servofloat condition. Motion commands sent after this MLxRobotSetServoFloatOn are executed as servofloat motion.
MLxRobotSetServoFloatPropertiesWrite servofloat settings to the robot controller.

Availability

Please refer to the function block documentation to see which robot controllers support this function.

Parameters

Below overview shows the relevant parameters for this function.

// Yaskawa parameters (cannot be changed by customer)
FD34      1       // link servofloat
          3       // link & linear servofloat

Restrictions

  • A standstill is required to switch servofloat on/off
  • Linear servofloat is only supported by selected manipulators
  • Servofloat cannot be used for jog commands

Monitoring

Servofloat active status

Certain events (e.g. MLxEnable) cause the servofloat to be switched off. Therefore it is necessary to monitor the servofloat status so that immediate action can be taken in case the servofloat was switched off unintendedly during the process.

This status is not part of the MotoLogix data packet but you can map it to one of the ReadPacket.DigitalInputs bits by adding a few lines in the robot CIO:

// CIOPRG.lst (PART2)
// MLx ReadPacket.DigitalInputs[0].0  <-- servofloat ON status of R1 (see Robot CIO manual)
STR #50510
OUT #00010
Make sure to monitor the servofloat status during servofloat motions.

TCP feedback data

By default, the actual TCP position red by MotoLogix is the command position. However, when performing servofloat motions the feedback position is more useful:

data fromafter reaching hard stop
command datainternal calculationskeeps moving
feedback dataphysical manipulatorsteady

In below image the same servofloat trajectory is ran twice:

  • first cycle shows command data
  • second cycle shows feedback data
Note how the end of the physical motion becomes visible around 13sec

command-vs-feedback
Command data vs. feedback data

Use the TCP feedback data to verify the physical robot position and speed during servofloat motion.
Check the MotoLogix code examples for a convenient way to read TCP position and speed.

BlendFactor

The blend factor requires some attention in a program with servofloat motions. Below rules apply to the last motion before activating/deactivating servofloat.

Before activating servofloat:

  • BlendFactor=0 results in a smooth transition into servofloat mode
  • Other blend factors might reduce cycle time but lead to a rough transition
  • Consider using a custom blend factor

Before deactivating servofloat:

  • BlendFactor=0 can lead to a unsuccessful fine positioning alarm and should be avoided
  • Consider using a custom blend factor

Creating a custom blend factor

You might consider to create a blend factor which is smaller than the default ones. This way you can make a setting which has a narrow positioning window but lacks the long time which comes with BlendFactor=0.

Pick a blend factor which is not yet used in your program and change its setting. Example: change blend factor 8 to a distance of 0.5mm:

parameteroriginal distance [µm]new distance [µm]
S1CxG 40500000500

Example

A typical use case is placing a workpiece into a fixture:

  • The height of the workpiece varies due to manufacturing tolerances
  • The workpiece will be pushed with a predefined force into the fixture using servofloat
  • Once in position, fixture clamps close and the gripper opens

Below pseudo code gives you an idea of the program structure for this use case.

// write files in startup routine
10  SetServoFloatProperties   // write servofloat settings
                              //  - ServoFloatNumber := 0 (pendant: #1)
                              //  - ServoFloatType := 1 (linear)
// -----------------------------------------------------------------------------

// production
10  SetUserFramePlace         // activate the user frame for the fixture

20  MovePtpApproach           // PtP motion to the approach position
                              // (transition: Sts_PC)

30  FloatOn                   // activate the linear servofloat function with settings #1
                              //  - ServoFloatNumber := 0
                              //  - ServoFloatType := 1

31  MoveLinBottom             // linear motion to the bottom of the fixture
                              // motion performed with limited Z-axis force
    <in fixture>              // product pushed into fixture with the pre-set force
                              //  - actual command position still moving
                              //  - actual feedback position no longer moving

    <motion completed>        // motion completed
                              //  - actual command position no longer moving
                              //  - actual feedback position no longer moving
                              // (transition: Sts_PC)

40  <close fixture>           // close fixture clamps

41  <open gripper>            // open robot gripper

50  FloatOff                  // deactivate the servofloat function
                              //  - actual command position will change to reflect
                              //    the physical robot position

51  MoveLinApproach           // linear motion to the approach position
For optimizing cycle time you could already start the clamp- and gripper action when the feedback data is steady (and within limits) for a certain time.

Pages built with Hugo - 23 Apr 2024 11:54 CEST