PLC Variante I (Trigger via XtsUtility)

Sie haben die Möglichkeit, die Mover ID-Erkennung über die PLC Variante I auszulösen. Um die Suche automatisch anzusteuern, können Sie die folgenden Beispiel-Codes für das Processing Unit-Objekt und das TcIoXtsDrv-Objekt nutzen:

XTS Processing Unit-Objekt


// Declaration Part

PROGRAM MAIN
VAR
     stMoverRef                       : ARRAY [1..cAxcnt] OF AXIS_REF;

     fbXtsUnit                        : FB_XtsUnit;

     eMoverIdDetectionMode            : MoverIdDetectionMode:= MoverIdDetectionMode.Mover1; 
                                        //Should be the same as shown in the TcIoXtsDrv object
     bStartMoverIdDetection           : BOOL := TRUE; //Can also be written to trigger the process
                                        manually after start up

     bMoverIdDetectionError           : BOOL;
     bMoverIdDetected                 : BOOL;
     bMoverIdDetectionActive          : BOOL;
END_VAR

VAR CONSTANT
     cAxcnt                           : INT:=10; // Example
END_VAR

//----------------------------------------------------------------------------------------------------

// Programm Part
// Cyclic call of the main block of the XtsUtility Library.

fbXtsUnit(Axis := stMoverRef);

// Check if the position detection of the Movers has been completed.
IF NOT fbXtsUnit.stXtsUnit.stTcIoXtsDrv.stParameter.bAreAllMoverPositionsValid THEN
     // If not all Mover positions are valid, do not process any further.
     RETURN;
END_IF

// Mover1 Functionality
// Check if "MoverIdDetectionMode" has been activated.
IF eMoverIdDetectionMode = E_MoverIdDetectionMode.Mover1 THEN

     // Check if the "MoverIdDetection" has already been started or the Mover1 was found.
     IF bStartMoverIdDetection AND NOT (bMoverIdDetectionActive OR bMoverIdDetected) THEN
          bStartMoverIdDetection:=FALSE;

          // Trigger the "MoverIdDetection".
          fbXtsUnit.stXtsUnit.stTcIoXtsDrv.ipTcXtsIo.TriggerMoverIdDetection();
          bMoverIdDetectionActive:=TRUE;
     END_IF

     // Check for error or success of "MoverIdDetection".
     bMoverIdDetectionError := fbXtsUnit.stXtsUnit.stTcIoXtsDrv.stParameter.bHasMoverIdDetectionError;
     bMoverIdDetected       := fbXtsUnit.stXtsUnit.stTcIoXtsDrv.stParameter.bIsMoverIdDetectionValid;

     // If the detection has an error, check for errors in output and try again.
     IF bMoverIdDetectionError THEN
          bMoverIdDetectionActive:=FALSE;
          RETURN;
     END_IF

     // Do not process any further until the "MoverId" was deteced.
     IF NOT bMoverIdDetected THEN
          RETURN;
     END_IF
     bMoverIdDetectionActive:=FALSE;

// If the "MoverIdDetection" was not activated,
// then the start of the "MoverIdDetection" and the search of Mover1 is skipped.
ELSE
     ;
END_IF

TcIoXtsDrv-Objekt


// Declaration Part

PROGRAM MAIN
VAR
     fbXtsEnvironment                 : FB_TcIoXtsEnvironment;
     bInit                            : BOOL;

     bStartMoverIdDetection           : BOOL:=TRUE; // Can also be written to trigger the process
                                        manually after start up

     bMoverIdDetectionError           : BOOL;
     bMoverIdDetected                 : BOOL;
     bMoverIdDetectionActive          : BOOL;
END_VAR

//----------------------------------------------------------------------------------------------------

// Programm part
//Trigger only once in init.
IF NOT bInit THEN
     IF fbXtsEnvironment.Init(TRUE) THEN
          fbXtsEnvironment.Init(FALSE);
          bInit:=TRUE;
     END_IF
     RETURN;
END_IF

// Check if the position detection of the Movers has been completed.
IF NOT fbXtsEnvironment.XpuTcIo(1).GetAreAllPositionsValid() THEN
     // If not all Mover positions are valid, do not process any further.
     RETURN;
END_IF

// Mover1 Functionality
// Check if "MoverIdDetectionMode" has been activated under the XtsProcessingUnit object.
IF fbXtsEnvironment.XpuTcIo(1).GetMoverIdDetectionMode() = MoverIdDetectionMode.Mover1 THEN

     // Check if the "MoverIdDetection" has already been started or the Mover1 was found.
     IF bStartMoverIdDetection AND NOT (bMoverIdDetectionActive OR bMoverIdDetected) THEN
          bStartMoverIdDetection:=FALSE;

          // Trigger the "MoverIdDetection".
          fbXtsEnvironment.XpuTcIo(1).TriggerMoverIdDetection();
     END_IF

     // Check for error or success of "MoverIdDetection".
     bMoverIdDetectionError := fbXtsEnvironment.XpuTcIo(1).GetHasMoverIdDetectionError();
     bMoverIdDetected := fbXtsEnvironment.XpuTcIo(1).GetIsMoverIdDetectionValid();
     bMoverIdDetectionActive := fbXtsEnvironment.XpuTcIo(1).GetIsMoverIdDetectionActive();

     // If the detection has an error, check for errors in output and try again.
     IF bMoverIdDetectionError THEN
          RETURN;
     END_IF

     // Do not process any further until the "MoverId" was deteced.
     IF NOT bMoverIdDetected THEN
          RETURN;
     END_IF

     // Do not process any further until the "MoverId" was deteced.
     IF NOT bMoverIdDetected THEN
          RETURN;
     END_IF

// If the "MoverIdDetection" was not activated in the XtsProcessingUnit object,
// then the activation of the "MoverIdDetection" and the search of Mover1 is skipped.
ELSE
     ;
END_IF