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

Merge two (or more) Blocks In discrete motion

Fred74
Member

Merge two (or more) Blocks In discrete motion

Hello,

I  just tried the buffer mode with the axis interface (discrete Motion)

Buffered_Prog.png

 The speed goes to zero between 2 Blocks (Move Absolute) see print screen.

My question : How could we manage a switching from the block N°1 to N°2 without stopping (by defining a speed setpoint at the postion set point) ? 

In the MLC there is the FB (Hydraulic) who manage the automatic swithing from one bloc to the next one. it is very usefull in a lot of applications. 

I was wondering if the buffer Mode could manage it. Is it plan to improve the buffer mode in the future?

Buffered.png

 Thak you very much.

1 REPLY 1
CodeShepherd
Community Moderator

Re: Merge two (or more) Blocks In discrete motion

Please have a look to the example of the motion interface itself that can be inserted as a template:

CodeShepherd_0-1643116818467.png

3: // move absolute - send three commands in one cycle 
     arAxisCtrl_gb[uiAxisIndex].PosMode.Position := 30;
     arAxisCtrl_gb[uiAxisIndex].PosMode.Velocity := 10;
     aruliReturnedCmdId[0] := arAxisCtrl_gb[uiAxisIndex].Admin.mTriggerMoveCmd(_OpMode:= ModePosAbs, Buffered:=TRUE, UserID:=CONCAT('my own id ', TO_STRING(uiMyOwnId)) );
     uiMyOwnId := uiMyOwnId + 1; 
     arAxisCtrl_gb[uiAxisIndex].PosMode.Position := -30;
     arAxisCtrl_gb[uiAxisIndex].PosMode.Velocity := 20;
     aruliReturnedCmdId[1] := arAxisCtrl_gb[uiAxisIndex].Admin.mTriggerMoveCmd(_OpMode:= ModePosAbs, Buffered:=TRUE, UserID:=CONCAT('my own id ', TO_STRING(uiMyOwnId)) ); 
     uiMyOwnId := uiMyOwnId + 1; 
     arAxisCtrl_gb[uiAxisIndex].PosMode.Position := 60;
     arAxisCtrl_gb[uiAxisIndex].PosMode.Velocity := 30;
     aruliReturnedCmdId[2] := arAxisCtrl_gb[uiAxisIndex].Admin.mTriggerMoveCmd(_OpMode:= ModePosAbs, Buffered:=TRUE, UserID:=CONCAT('my own id ', TO_STRING(uiMyOwnId)) ); 
     uiMyOwnId := uiMyOwnId + 1;
     uiState := uiState + 1;  // go direct to next state to avoid entering the commands again 
     
  4: // wait for CmdDone 
     IF arAxisStatus_gb[uiAxisIndex].Admin.CmdDone THEN
       uiState := uiState + 1;
		 END_IF
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