Beispiel einer Init_MultiBeltModule-Aktion

Überblick

Der folgende Code zeigt ein Beispiel für die Initialisierung eines MultiBeltModules. Es werden 4 Züge und 3 Stationen konfiguriert.

HINWEIS: Das MultiBeltModule arbeitet mit Verweisen auf MultiBelt-Daten. Daher ist die folgende Codezeile unverzichtbar.

 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.stDepartu­reMove.lrAcc := 5000;  

stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartu­reMove.lrDec := 5000;  

stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartu­reMove.lrVel := 1000;  

stMultiBeltItf.astStation[1].i_rstParameter.stIndexed.stDepartu­reMove.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.lrPassByMo­veOffset:= -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.lrLockOutDi­stance := 0;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrMasterPeriod := 360;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrMinProduct­Length := 10;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrPhase := 30;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrStartDelayDi­stance := 0;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrSynchronStart := 30;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.lrSynchronEnd := 30;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartu­reMove.lrVel := 1000;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartu­reMove.lrAcc := 5000;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartu­reMove.lrDec := 5000;  

stMultiBeltItf.astStation[3].i_rstParameter.stSynchron.stDepartu­reMove.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;