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