The following code shows an example for the initialization of a MultiBeltModule. 4 trains and 3 stations are configured.
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;