CDRFLEx.amoveb
Features
As an asynchronous moveb, it operates the same as the moveb() function except for the asynchronous process, and executes the next line by returning as soon as motion starts without waiting for the termination of motion. A new motion command generated before the motion is terminated by amovesj() function causes errors for security reasons. Therefore, the termination of the amoveb() motion must be confirmed using the mwait() function between amovesj() and the following motion command before the new motion command is executed.
Parameter
Parameter Name | Data Type | Default Value | Description |
tTargetPos | struct MOVE_POSB [MAX_MOVEB_POINT] | - | Maximum 25 path information |
nPosCount | unsigned char | - | Number of valid paths |
fTargetVel | float[2] | - | Linear Velocity, Angular Velocity |
fTargetAcc | float[2] | - | Linear Acceleration, Angular Acceleration |
fTargetTime | float | 0.f | Reach Time [sec] |
eMoveMode | enum.MOVE_MODE | MOVE_MODE_ ABSOLUTE | Refer to the Definition of Constant and Enumeration Type |
eMoveReference | enum.MOVE_REFERENCE | MOVE_REFERENCE_BASE | Refer to the Definition of Constant and Enumeration Type |
Note
- When fTargetTime is specified, values are processed based on fTargetTime ignoring fTargetVel and
- When eMoveMode is MOVE_MODE_RELATIVE, each pos on the posb list is defined as a relative coordinate for the preceding pos.
- This function does not support online blending of previous and subsequent motions.
Caution
- A user input error is generated if the blending radius in tTargetPos is 0.
- A user input error is generated due to the duplicated input of Line if contiguous Line-Line segments have the same direction.
- If the blending condition causes a rapid change in direction, a user input error is generated to prevent sudden acceleration.
- This function does not support online blending of previous and subsequent motions.
Return
Value | Description |
0 | Error |
1 | Success |
Example
// D-Out 3 seconds after the motion through all paths of xb begins
MOVE_POSB xb[4];
memset(xb, 0x00, sizeof(xb));
int segNum = 4;
float tvel = { 50, 50 };
float tacc = { 100, 100 };
xb[0]._iBlendType = 0; // line
xb[0]._fBlendRad = 50;
xb[0]._fTargetPos[0][0] = 559;
xb[0]._fTargetPos[0][1] = 234.5;
xb[0]._fTargetPos[0][2] = 651.5;
xb[0]._fTargetPos[0][3] = 0;
xb[0]._fTargetPos[0][4] = 180;
xb[0]._fTargetPos[0][5] = 0;
xb[1]._iBlendType = 1; // circle
xb[1]._fBlendRad = 50;
xb[1]._fTargetPos[0][0] = 559;
xb[1]._fTargetPos[0][1] = 234.5;
xb[1]._fTargetPos[0][2] = 451.5;
xb[1]._fTargetPos[0][3] = 0;
xb[1]._fTargetPos[0][4] = 180;
xb[1]._fTargetPos[0][5] = 0;
xb[1]._fTargetPos[1][0] = 559;
xb[1]._fTargetPos[1][1] = 434.5;
xb[1]._fTargetPos[1][2] = 451.5;
xb[1]._fTargetPos[1][3] = 0;
xb[1]._fTargetPos[1][4] = 180;
xb[1]._fTargetPos[1][5] = 0;
xb[2]._iBlendType = 0; // line
xb[2]._fBlendRad = 50;
xb[2]._fTargetPos[0][0] = 559;
xb[2]._fTargetPos[0][1] = 434.5;
xb[2]._fTargetPos[0][2] = 251.5;
xb[2]._fTargetPos[0][3] = 0;
xb[2]._fTargetPos[0][4] = 180;
xb[2]._fTargetPos[0][5] = 0;
xb[3]._iBlendType = 0; // line
xb[3]._fBlendRad = 50;
xb[3]._fTargetPos[0][0] = 559;
xb[3]._fTargetPos[0][1] = 234.5;
xb[3]._fTargetPos[0][2] = 251.5;
xb[3]._fTargetPos[0][3] = 0;
xb[3]._fTargetPos[0][4] = 180;
xb[3]._fTargetPos[0][5] = 0;
drfl.moveb(xb, segNum, tvel, tacc);
Sleep(3000);
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, 1);