Example for an Init_MultiBeltModule Action

Overview

The following code shows an example for the initialization of a MultiBeltModule. 4 trains and 3 stations are configured.

NOTE: The MultiBeltModule works with references on MultiBelt data.
 fbMultiBeltModule.InitModuleInterface(iq_stMultiBeltModuleItf:= stMultiBeltItf);
// Standard Interface  
astSubModuleInterface[c_udiMultiBelt].i_sModuleName:= CONCAT(STR1:= iq_stStandardModuleItf.i_sModuleName,  
 STR2:= ': MultiBelt');  
astSubModuleInterface[c_udiMultiBelt].i_xLogEnable:= TRUE;  
astSubModuleInterface[c_udiMultiBelt].i_wLogDataFilter:= UDINT_TO_WORD(TPL.ET_LogDataFilter.ModuleDefault); etDiag:= GD.ET_Diag.Ok;
// General initialisations  
stMultiBeltItf.stMain.i_rstParameter.uiNumOfBelts := 4;  
stMultiBeltItf.stMain.i_rstParameter.uiNumOfStations := 3;  
stMultiBeltItf.stMain.i_rstParameter.uiTrainsPerBelt := 1;  
stMultiBeltItf.stMain.i_rstParameter.lrCrashDistance := 5;  
stMultiBeltItf.stMain.i_rstParameter.lrBeltLength := 9000;  
stMultiBeltItf.stMain.i_rstParameter.lrTrainLength := 500;  
stMultiBeltItf.stMain.i_alrMotionActiveVelLimit[0] := 1;
stMultiBeltItf.stMain.i_aetMotionActiveVelType[0] := MTBM.ET_VelocityType.RefVelocity;
//Loading Station  
stMultiBeltItf.astStation[1].i_rstParameter.sName := 'Beladestation';  
stMultiBeltItf.astStation[1].i_rstParameter.etStationType := MTB.ET_StationType.Indexed;  
stMultiBeltItf.astStation[1].i_rstParameter.lrStationPos := 0;  
stMultiBeltItf.astStation[1].i_rstParameter.alrSteps[0] := 100.0;  
stMultiBeltItf.astStation[1].i_rstParameter.uiNumOfSteps := 5;  
stMultiBeltItf.astStation[1].i_rstParameter.lrAdditionalStep := 0;  
stMultiBeltItf.astStation[1].i_rstParameter.lrWarningDistance := 75;  
stMultiBeltItf.astStation[1].i_rstParameter.lrStopDistance := 50;  
stMultiBeltItf.astStation[1].i_rstParameter.lrTrainsDistance := 10;  
stMultiBeltItf.astStation[1].i_rstParameter.etStartLock := MTB.ET_StartLock.AllSignals;  
stMultiBeltItf.astStation[1].i_rstParameter.ifTpStart := TP_1;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.lencHelp := LE_StartDelayStation1;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.lrStartDelayTime := 50;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.lrMinProductTime := 20;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.lrLockOutTime := 10;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stStepMove.lrAcc := 5000;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stStepMove.lrDec := 5000;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stStepMove.lrVel := 500;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stStepMove.lrJerk := 1000000;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartureMove.lrAcc := 5000;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartureMove.lrDec := 5000;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartureMove.lrVel := 1000;  
stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartureMove.lrJerk:= 1000000;  
stMultiBeltItf.astStation[1].iq_plrTeachStationPosRetain:= ADR(lrLoadPosRetainStation1);  
//PassBy Station
stMultiBeltItf.astStation[2].i_rstParameter.sName := 'SlowDownStation';  
stMultiBeltItf.astStation[2].i_rstParameter.etStationType := MTB.ET_StationType.PassBy;  
stMultiBeltItf.astStation[2].i_rstParameter.lrStationPos := 3000;  
stMultiBeltItf.astStation[2].i_rstParameter.uiNumOfSteps := 1;  
stMultiBeltItf.astStation[2].i_rstParameter.alrSteps[0] := 500.0;  
stMultiBeltItf.astStation[2].i_rstParameter.lrAdditionalStep := 0;  
stMultiBeltItf.astStation[2].i_rstParameter.lrTrainsDistance := 10;  
stMultiBeltItf.astStation[2].i_rstParameter.etStartLock := MTB.ET_StartLock.BoolOnly;  
stMultiBeltItf.astStation[2].i_rstParameter.stPassBy.stMove:= stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stStepMove;  
stMultiBeltItf.astStation[2].i_rstParameter.stPassBy.stMove.lrVel:= 500;  
stMultiBeltItf.astStation[2].i_rstParameter.stPassBy.stDepartureMove:= stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartureMove;  
stMultiBeltItf.astStation[2].i_rstParameter.stPassBy.lrPassByMoveOffset:= -100;  
stMultiBeltItf.astStation[2].iq_plrTeachStationPosRetain:= ADR(lrLoadPosRetainStation2);
//Unloading Station
stMultiBeltItf.astStation[3].i_rstParameter.sName := 'Unloading Station';  
stMultiBeltItf.astStation[3].i_rstParameter.etStationType := MTB.ET_StationType.Synchron;  
stMultiBeltItf.astStation[3].i_rstParameter.lrStationPos := 6000;  
stMultiBeltItf.astStation[3].i_rstParameter.uiNumOfSteps := 1;  
stMultiBeltItf.astStation[3].i_rstParameter.alrSteps[0] := 500.0;  
stMultiBeltItf.astStation[3].i_rstParameter.lrAdditionalStep := 0;  
stMultiBeltItf.astStation[3].i_rstParameter.lrTrainsDistance := 10;  
stMultiBeltItf.astStation[3].i_rstParameter.etStartLock := MTB.ET_StartLock.BoolOnly;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.etEventTrigger := MTB.ET_EventTrigger.SyncOnPhase;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.ifMaster := DRV_Slave3;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lencHelp := LE_Master;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrLockOutDistance := 0;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrMasterPeriod := 360;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrMinProductLength := 10;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrPhase := 30;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrStartDelayDistance := 0;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrSynchronStart := 30;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrSynchronEnd := 30;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartureMove.lrVel := 1000;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartureMove.lrAcc := 5000;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartureMove.lrDec := 5000;  
stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartureMove.lrJerk := 50000;  
stMultiBeltItf.astStation[3].iq_plrTeachStationPosRetain:= ADR(lrLoadPosRetainStation3);  
//Trains
stMultiBeltItf.astTrain[1].i_rstParameter.ifDrive := DRV_Train1;  
stMultiBeltItf.astTrain[1].i_rstParameter.ifTpHome := TP_0;  
stMultiBeltItf.astTrain[2].i_rstParameter.ifDrive := DRV_Train2;  
stMultiBeltItf.astTrain[2].i_rstParameter.ifTpHome := TP_1;  
stMultiBeltItf.astTrain[3].i_rstParameter.ifDrive := DRV_Train3;  
stMultiBeltItf.astTrain[3].i_rstParameter.ifTpHome := TP_2;  
stMultiBeltItf.astTrain[4].i_rstParameter.ifDrive := DRV_Train4;  
stMultiBeltItf.astTrain[4].i_rstParameter.ifTpHome := TP_3;  
//Warmstart Parameter
stMultiBeltItf.stMain.i_rstParameter.stWarmStartMove.lrAcc := 5000;  
stMultiBeltItf.stMain.i_rstParameter.stWarmStartMove.lrDec := 5000;  
stMultiBeltItf.stMain.i_rstParameter.stWarmStartMove.lrVel := 1000;  
stMultiBeltItf.stMain.i_rstParameter.stWarmStartMove.lrJerk := 100000;  
//Manual Parameter
stMultiBeltItf.stManual.i_stMove.lrVel := 1000;  
stMultiBeltItf.stManual.i_stMove.lrAcc := 1000;  
stMultiBeltItf.stManual.i_stMove.lrDec := 10000;  
stMultiBeltItf.stManual.i_stMove.lrJerk := 100000;  
stMultiBeltItf.stManual.i_lrMaxJogDistance := 5000;
//Homing Parameter
stMultiBeltItf.stHome.i_etMode:= MTBM.ET_HomeMode.SetPos;  
stMultiBeltItf.stHome.i_stOnTpParameter.uiTPSignalsPerTrain := 1;  
stMultiBeltItf.stHome.i_stOnTpParameter.lrMaxTPSignalDistance := stMultiBeltItf.stMain.i_rstParameter.lrBeltLength;  
stMultiBeltItf.stHome.i_stOnTpParameter.lrMinTPSignalDistance := 10;  
stMultiBeltItf.stHome.i_stOnTpParameter.xTpNegEdge := FALSE;  
stMultiBeltItf.stHome.i_stOnTpParameter.stMove.lrVel := 400;  
stMultiBeltItf.stHome.i_stOnTpParameter.stMove.lrAcc := 2000;  
stMultiBeltItf.stHome.i_stOnTpParameter.stMove.lrDec := 2000;  
stMultiBeltItf.stHome.i_stOnTpParameter.stMove.lrJerk := 100000;  
stMultiBeltItf.stHome.astSetPosParameter[1].iq_pstRestorePosRetain := ADR(astRestoreTrain[1]);  
stMultiBeltItf.stHome.astSetPosParameter[2].iq_pstRestorePosRetain := ADR(astRestoreTrain[2]);  
stMultiBeltItf.stHome.astSetPosParameter[3].iq_pstRestorePosRetain := ADR(astRestoreTrain[3]);  
stMultiBeltItf.stHome.astSetPosParameter[4].iq_pstRestorePosRetain := ADR(astRestoreTrain[4]);  
stMultiBeltItf.stHome.astSetPosParameter[1].i_lrHomePosition := 0;  
stMultiBeltItf.stHome.astSetPosParameter[2].i_lrHomePosition := -510;  
stMultiBeltItf.stHome.astSetPosParameter[3].i_lrHomePosition := -1020;  
stMultiBeltItf.stHome.astSetPosParameter[4].i_lrHomePosition := -1530;