Definieren des Hauptprogramms des C2C Master Projekts

Beschreibung

Die folgenden Schritte werden im Hauptprogramm des C2C Master 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.

Wenn AxisState < 3, Lageregelung der Achse des C2C Master (TTS1) und Überwachung der Stromversorgung des C2C Master (TTS1) sind aktiviert.

3

Der Synchronisierungszustand zwischen C2C Master und dem teilnehmenden C2C Slave im C2C Netzwerk wird verifiziert.

Wenn SyncGroupState = 5, kann die Bewegung gestartet werden.

4

Die Achse wird mit dem YOffsetGenerator bewegt.

5

Die vom C2C Slave empfangenen Benutzerdaten werden in die Datenstruktur ST_MyData kopiert.

SR_Main definieren

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

PROGRAM SR_Main
VAR
   xSercosEncoderSetMasterEncoder: BOOL := TRUE;
   diSercEncSetMasterEncoderResult: DINT := 0;
   xSercosEncoderMotion : BOOL := TRUE;
   stMyData : ST_MyData;
   diDataCopyResult : DINT := 0;
   xEnableYOffsetGenerator : BOOL := TRUE;
END_VAR

IF xSercosEncoderSetMasterEncoder THEN
   //Connecting C2C Encoder Output (C2C_EncOut) with Logical encoder (LE_Enc)
   diSercEncSetMasterEncoderResult := SystemInterface.FC_SetMasterEncoder(i_stLEncId:= C2C_EncOut.stLogicalAddress, i_stMasterId:= DRV_Lexium62.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;
   ELSE
      // If SyncGroupState =5, then C2C network is synchronized.
      IF C2C_Master.SyncGroupState = 5 THEN
         // All C2C Slaves are synchronized, axis can be moved
         IF xEnableYOffsetGenerator = TRUE AND DRV_Lexium62.YOffsetState = 0 THEN
            DRV_Lexium62.YOffsetEnable := TRUE;
            xEnableYOffsetGenerator := FALSE;
         ELSE
            IF DRV_Lexium62.YOffsetState = 1 THEN
               DRV_Lexium62.YOffsetRefPosition := DRV_Lexium62.YOffsetRefPosition + 360;
               xSercosEncoderMotion := FALSE;
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// Copying input data (C2C Data input)
diDataCopyResult := FC_C2CDataCopy(i_stLogAddr:= C2C_DataIn.stLogicalAddress, i_dwPointerToData:=ADR(stMyData) , i_uiDataLen:= SIZEOF(stMyData));