NC-Achse anlegen und initialisieren

Zum Anlegen einer NC-Achse gibt es verschiedene Möglichkeiten. Im folgenden Beispiel wird ein exemplarisches Vorgehen dargestellt.

1. Legen Sie die drei Instanzen folgender Objekte an:
fbCarriageAxis (FB_AxisNcBase): TF8560 Achse (hier NC)
fbCarriage (FB_Carriage): Spezifisch implementierter Achstyp (hier Wagenachse)
fbCarriageHmi (FB_CarriageHmi): Parallele HMI-Schnittstelle des Achstyps (hier Wagenachse)
{attribute 'qualified_only'}
VAR_GLOBAL
    {attribute 'TcHmiSymbol.Hide'}
    {attribute 'TcContextName':='MotionTask'}
    fbCarriageAxis:        FB_AxisNcBase('', Tc3_PlasticBaseAppStaticParams.cnMaxPtpPoints, 0, 0, 0);
    {attribute 'TcHmiSymbol.Hide'}
    fbCarriage:            FB_Carriage;
    
    fbCarriageHmi:         FB_CarriageHmi;    
END_VAR
2. Erstellen/Verknüpfen Sie eine NC-Achse im Projekt auf die angelegte Instanz der fbCarriage Achse.
NC-Achse anlegen und initialisieren 1:
Wenn die TF8560 Achsen aus der PLC nicht in dem Auswahldialog erscheinen, wurde das Projekt nicht erstellt. Erst wenn das PLC-Projekt nach Anlegen der Instanz einmal erfolgreich erstellt wurde, werden die Instanzen im Mapping sichtbar.
3. Es ist zu empfehlen, dass Sie für den Antriebssteuerungs-Anteil eine PLC-Task mit der gleichen Zykluszeit der NC (default 2 ms) anlegen (falls nicht schon eine Achse existiert).
NC-Achse anlegen und initialisieren 2:
4. Weisen Sie in der PLC der spezifischen Achse eine TF8560 Achse zu.
Axes.fbCarriage.SetAxisRef(Axes.fbCarriageAxis);
5. Fügen Sie der Runtime die Achse hinzu.
Tasks.fbRuntime.Append(Axes.fbCarriage, Axes.fbCarriageHmi);

Falls Sie nicht mit der FB_BaseRuntime arbeiten möchten, sind die folgenden weiteren Schritte notwendig:

6. Weisen Sie der spezifischen Achse die HMI-Schnittstelle zu.
Axes.fbCarriage.SetHMI(Axes.fbCarriageHmi);
7. Initialisieren Sie die Achse mit einem einmaligen Aufruf der Init()-Methode und überprüfen Sie die Rückgabewerte.
IF NOT bInit THEN
    bInit := TRUE;
    
    Axes.fbCarriage.SetAxisRef(Axes.fbCarriageAxis);
    Axes.fbCarriage.SetHMI(Axes.fbCarriageHmi);
    
    hr             := Axes.fbCarriage.Init();
    bInitFailed    := FAILED(hr);
END_IF
8. Rufen Sie nach erfolgreicher Initialisierung die CoreCyclic() Methode der Achse mit einer schnellen Task auf.
IF NOT PRG_AxisApplication.bInitFailed THEN
        
        Axes.fbCarriage.CoreCyclic();
END_IF
9. Rufen Sie parallel zur CoreCyclic() Methode die Cyclic() Methode in einer langsameren Task auf und initialisieren Sie die Standardparametrierung mittels der ParamInit() Methode.
VAR
    bInit:                    BOOL;
    bInitFailed:              BOOL;
    bParamInit:               BOOL;
    hr:                       HRESULT;
END_VAR



IF NOT bInit THEN
    bInit := TRUE;
    
    Axes.fbCarriage.SetAxisRef(Axes.fbCarriageAxis);
    Axes.fbCarriage.SetHMI(Axes.fbCarriageHmi);
    
    hr             := Axes.fbCarriage.Init();
    bInitFailed := FAILED(hr);
    
ELSIF NOT bInitFailed THEN
    IF NOT bParamInit THEN
        hr := Axes.fbCarriage.ParamInit();
        bParamInit := SUCCEEDED(hr);
    END_IF
    
    Axes.fbCarriage.Cyclic();
END_IF