cancel
Showing results for 
Search instead for 
Did you mean: 
SOLVED

Robot path acceleration management with PLC Open FB or CXA_Motion Library

Robot path acceleration management with PLC Open FB or CXA_Motion Library

giustola69
Long-established Member

Hello,

I'm having problems to understand how the robot path accelertion works on our FB in the PlcOpen library ( the same behaviour on the CXA_Motion function) . As you can see in the attached screenshots to get a trace difference in the acceleration feedback and in the cycle time I had to change the acceleration settings from 5000 mm/s2 ( 1st case ) to 1 mm/s2.

This is very strange to me but maybe I'm missing something.

Please could you have me to understand and eventually corret what generate that behaviour ?

Many Thanks

Giuseppe

 

14 REPLIES 14

CodeShepherd
Community Moderator
Community Moderator

I am a little confused because in your code you are using functions, that does not exist. Did you write your own function blocks from the motion functions?

CodeShepherd_0-1631260394889.png

It would also be easier for us if you would have sent us the complete project or appData, not only this program snippets.

CodeShepherd_0-1631264809198.png

It could happen that you are simply missing the ramp values. So for me there are some open questions:

  • What are your set axis and kinematic limits?
  • What are your set kinematic units?
  • In your code the command MC_AddAxisToGroup is missing for all axes. So they will not be part of the kinematic interpolation.
  • The minimum time between the dots in the trace is limited by the task it gets called in, in my case 10ms.
    CodeShepherd_2-1631263187687.png

     

    CodeShepherd_1-1631263143926.png

My measurement with your unchanged command values (vel=200,acc=dec=1000,jrk=100000) increased limits and standard units. There I miss the ramping up because of the high acceleration 1000m/s2:

CodeShepherd_1-1631265140279.pngCodeShepherd_3-1631263640543.png

EDIT: My measurement with your unchanged command values (vel=200,acc=dec=1000,jrk=100000) increased limits and changed units:

CodeShepherd_1-1631266553235.png

CodeShepherd_0-1631266498331.png

 

 

 

 

giustola69
Long-established Member

Hello,

sorry I miss the MC_AddAxisToGroup in the previous program, now I added it ( see new attached file  ) but the result are quite the same.

I also added some new screenshots about the trace and the axis and kinematics settings I have.

Please look at the action aPlcOpen in the PLC_PROG program.

Please let me know if you need more infos

Waintng for your feedback.

Many thanks

Giuseppe

 

giustola69
Long-established Member

I added the Appdata configuration backup too.

 

In your screenshots you gave your self the answer I guess:

CodeShepherd_0-1631275047049.png

You think you are commanding mm/s² but the motion kernel calculates m/s² so it is a extremely fast acceleration (5000m/s²) and in 80ms, what then must be the cycle time of your task, the ramp up of the values is simply already done from one to the other measuring point.

Please have look to my second measurement in my previous post where I changed the units.

giustola69
Long-established Member

Hello,

 

Ok thanks a changed the measuring units and now it OK.

One question : is it posisble to avoid the acceleration jump at each block change during the robot path that is shown in the screenshot below ?

 

giustola69_0-1631279182489.png

 

What exactly do you like to avoid there? The actual acceleration will always change when velocity changes. It only looks like a peak because the time it is not zero is that short. If you like to keep it lower command less or use a lower jerk.

giustola69
Long-established Member

But in this case the velocity is the same in all the programmed point. There is no velocity change as you can see in the screenshot. So why we have an acceleration jump each block change .

With the old control (MLC/XM) using continuos slope this was not happening.

Just to understand the behaviour.

Many Thanks

Giuseppe

As soon as you are using cont slope in the ctrlX MOTION it will also not happen there. But for now you are using block slope. So what you see in the values is always the actual running command. That means that the peak at 13s is the change between the first and the second command while blending.

Also your still having a quite low resolution in your trace so you cannot see any ramping up or down or even at 13,25s it seems your record is missing a peak.

giustola69
Long-established Member

Hello

OK Thanks, but How could I set the Contonuos Slope ? In the MLC/XM there is an FB input parameter to do it  but I could not find it in the same FB in CtrlX. Could you help me ??

giustola69_0-1632119493622.png

Many Thanks

Giuseppe

 

Continuous slope is planned for release RM21.11 (1V12) end of November. So it cannot be used at the moment.

It looks like continuous slope is released now. I have been unable to successfully blend using this mode. My positions form a square, so I would expect a circle. Currently each point is moved to individually with no blending.

  2: // Set modes, velocity, acceleration and deceleration 
     arKinCtrl_gb[uiKinematicsIndex].CoordMode.DynValues.Velocity := 20;
	 arKinCtrl_gb[uiKinematicsIndex].CoordMode.DynValues.Acceleration := 2;
	 arKinCtrl_gb[uiKinematicsIndex].CoordMode.DynValues.Deceleration := 2;
     arKinCtrl_gb[uiKinematicsIndex].Admin._OpModeBits.MODE_COORD_POS_LIN_ABS := TRUE;
	 // SRG Additions (Set coordination mode to SlopeType)
	 arKinCtrl_gb[uiKinematicsIndex].CoordMode.SlopeType := MB_KIN_CONT_MOTION.ST_CONTINUOUS_SLOPE;
	 ackCoordMode := arKinCtrl_gb[uiKinematicsIndex].CoordMode.SlopeType;
     IF arKinStatus_gb[uiKinematicsIndex].Admin.CmdDone AND ackCoordMode = MB_KIN_CONT_MOTION.ST_CONTINUOUS_SLOPE THEN
       uiState := uiState + 1;
	 END_IF
     
  3: // move absolute - buffer commands
     arKinCtrl_gb[uiKinematicsIndex].CoordMode.Point := arPoints[0]; 
     aruliReturnedCmdId[0] := arKinCtrl_gb[uiKinematicsIndex].Admin.mTriggerMoveCmd(_OpMode:= ModeCoordPosLinAbs, Buffered:= TRUE, UserID:=CONCAT('ID ', TO_STRING(uiMyOwnId)) );
	 uiMyOwnId := uiMyOwnId + 1; 
     arKinCtrl_gb[uiKinematicsIndex].CoordMode.Point := arPoints[1];
     aruliReturnedCmdId[1] := arKinCtrl_gb[uiKinematicsIndex].Admin.mTriggerMoveCmd(_OpMode:= ModeCoordPosLinAbs, Buffered:= TRUE, UserID:=CONCAT('ID ', TO_STRING(uiMyOwnId)) );
     uiMyOwnId := uiMyOwnId + 1; 
     arKinCtrl_gb[uiKinematicsIndex].CoordMode.Point := arPoints[2];
     aruliReturnedCmdId[2] := arKinCtrl_gb[uiKinematicsIndex].Admin.mTriggerMoveCmd(_OpMode:= ModeCoordPosLinAbs, Buffered:= TRUE, UserID:=CONCAT('ID ', TO_STRING(uiMyOwnId)) );
     uiMyOwnId := uiMyOwnId + 1; 
	 arKinCtrl_gb[uiKinematicsIndex].CoordMode.Point := arPoints[3];
     aruliReturnedCmdId[3] := arKinCtrl_gb[uiKinematicsIndex].Admin.mTriggerMoveCmd(_OpMode:= ModeCoordPosLinAbs, Buffered:= TRUE, UserID:=CONCAT('ID ', TO_STRING(uiMyOwnId)) );
     uiMyOwnId := uiMyOwnId + 1; 

 

CodeShepherd
Community Moderator
Community Moderator

Please have a look to this topic for some information about continuous blending or to the official documentation of the ctrlX CORE - MOTION app.

giustola69
Long-established Member

Hi,

Will the continuos motion slote be implemented in the CXA_PlcOpen Library as a paramenter input in the kinematic motion command function blocks ( i.e.

MC_MoveLinearAbsolute (FB)

) like it was on the MLC/XM PlcOpen library?

If yes on which Ctrlx Works realesa will it be implemented ?

Many Thanks.

Giuseppe

Currently there are no plans to implement such command options into the command function blocks as we restructured our system architecture and the command options will not only be blending but have various functionality. To combine all of these in one interface (one function block) could get quite confusing/overloaded for users.

The only way would be to create such function block on your own, like we did similar in our "Template for cartesian handling systems". See method mMoveKin2TeachPoint.

Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist