Definieren des Hauptprogramms des C2C Master Projekts

Beschreibung

Die folgenden Schritte werden im Hauptprogramm des C2C Slave Projekts ausgeführt:

Schritt

Aktion

1

Zur Nutzung des Sercos-Gebers wird das C2C Geberausgang-Objekt an das Log. Geber-Objekt mit der Funktion FC_SetMasterEncoder angeschlossen.

2

Der Zustand der Achse wird geprüft.

oFalls AxisState < 3, Lageregelung der Achse des C2C Slave (TTS2) und Überwachung der Stromversorgung des C2C Slave (TTS2) aktiviert sind.

oWenn AxisState >= 3, wird der Funktionsbaustein FB_MultiCam gestartet.

3

Dann wird die Achse des C2C Slave (TTS2) mit einem einfachen linearen Profil und dem Funktionsbaustein FB_MultiCam bewegt.

SR_Main definieren

Den folgenden Kode im SR_Main Programm des C2C Slave Projekts eingeben:

PROGRAM SR_Main
VAR
   xSercosEncoderSetMasterEncoder: BOOL := TRUE;
   diSercEncSetMasterEncoderResult: DINT := 0;
   stSercosEncoderMultiCamData: PDL .ST_MultiCam;
   stSercosEncoderMultiCamDataExt: PDL.ST_MultiCamExt;
   fbMultiCam: PDL.FB_MultiCam;
   xSercosEncoderMotion : BOOL := TRUE;
   xSercEncEnable: BOOL := TRUE;
   xSercEncStart: BOOL := FALSE;
   xSercEncNewCam: BOOL := FALSE;
   xSercEncInstantNewCam: BOOL := FALSE;
   stMyData : ST_MyData;
   diDataCopyResult : DINT := 0;
END_VAR

IF xSercosEncoderSetMasterEncoder THEN
//Connecting C2C Encoder Input (C2C_EncIn) with Logical encoder (LE_Enc)
   diSercEncSetMasterEncoderResult := SystemInterface.FC_SetMasterEncoder(i_stLEncId:= LE_Enc.stLogicalAddress, i_stMasterId:= C2C_EncIn.stLogicalAddress);
   xSercosEncoderSetMasterEncoder := FALSE;
END_IF
IF xSercosEncoderMotion THEN
// If the axis is not ready (AxisState < 3), enable position control for axis and monitoring for Power supply.
   IF DRV_Lexium62.AxisState <3 THEN
      DRV_Lexium62.ControllerEnableSet := TRUE;
      PSM_Lexium62.PowerSupplyCheckSet := TRUE;
   // Disable FB_MultiCam.
      xSercEncEnable := FALSE;
      xSercEncStart := FALSE;
   ELSE
   // If the axis is ready and follows the reference values (AxisState >= 3), enable and start FB_Multicam
      xSercEncEnable := TRUE;
      xSercEncStart := TRUE;
   END_IF
   //Setting inputs, inputs/outputs and outputs of FB_MultiCam   fbMultiCam(
   i_xEnable:= xSercEncEnable,
   i_ifDrive:= DRV_Lexium62,
   i_xStart:= xSercEncStart,
   i_xWsSelect:= FALSE,
   i_etCsModeSlave:= PDL.ET_MultiCamCsModeSlave.SetSlavePositionToFirstCamPosition,
   i_etCsModeMaster:= PDL.ET_MultiCamCsModeMaster.SetMasterPositionToFirstCamPosition,
   i_etWsMode:= PDL.ET_MultiCamWsMode.NewCamMoveAlwaysNoPositionCheck,
   i_lrWsWindow:= 360.0,
   i_lrWsVel:= 100.0,
   i_lrWsAcc:= 1000.0,
   i_lrWsJerk:= 1000.0,
   i_xWsStart:= FALSE,
   i_diTXEnd:= 0,
   i_lrInstantXLimMax:= 400.0,
   iq_lencMaster:= LE_Enc,
   iq_stExt:= stSercosEncoderMultiCamDataExt,
   iq_xNewCam:= xSercEncNewCam,
   iq_xInstantNewCam:= xSercEncInstantNewCam,
   iq_stMultiCamData:= stSercosEncoderMultiCamDataOut,
   q_xActive=> ,
   q_xReady=> ,
   q_etDiag=> ,
   q_etDiagExt=> ,
   q_sMsg=> ,
   q_xInWsWindow=> ,
   q_xSynActive=> ,
   q_lrPositionX=> ,
   q_lrPositionY=> ,
   q_xXLowEnd=> ,
   q_xXHighEnd=> ,
   q_stActualCamData=> );
END_IF