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
fbCarriageAchse.
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).

- 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 dieCyclic()Methode in einer langsameren Task auf und initialisieren Sie die Standardparametrierung mittels derParamInit()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