Definieren des Hauptprogramms des C2C Master Projekts
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. |
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));