TwinCAT 2 Unterschied Aktionen zu klassischen POU?

itsdarkdownhere

Level-2
Beiträge
161
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen

Ich habe eine Frage zu TwinCAT 2.
Undzwar kann man hier bei den POU zu einem Programm, FB oder FC noch untergeordnete Aktionen hinzufügen. Diese Aktionen haben keine Bausteinschnittstelle. Beziehen sich diese dann auf die Deklarationen in der übergeordneten POU?
Entspricht das ungefähr den Aktionen in Ablaufsprache, nur dass man sie allgemein auf alle Programmiersprachen anwenden kann?

Vielen Dank

1762235459018.png
 
Die Aktion ist nur eine Teilmenge des Codes des POU. Die Aktion hat vollen Zugriff auf alle Variablen des POU. Du kannst beim Aufruf sowohl des POU als auch der Aktion entscheiden, welche Parameter der Bausteinschnittstelle Du übergibst. Du musst nicht alle Parameter verwenden. Du kannst eine Aktion auch komplett ohne Parameter aufrufen. Am übersichtlichsten lassen sich diese Aufrufe in ST gestalten.
 
Eine Aktion kannst Du nicht instanziieren.

Wenn, dann instanziierst Du den POU. Und dann rufst Du die MeineBausteinInstanz.BausteinAktion() auf. Wichtig ist, dass der POU eine Schnittstelle hat, also VAR_Input, VAR_Output und / oder VAR_InOut.

Mach mal Screenshots, dann dürfte das Problem besser sichtbar werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe jetzt mal ganz simpel ein Testprogramm erstellt. Was ist, wenn ich jetzt mein testVarIn aus der Schnittstelle des TestFB in die Aktion übergeben will? Aber eigentlich ist das unnötig, da die Aktion doch generell auf die Schnittstelle des FB zugreifen kann?
1762267046976.png
1762267077342.png
1762267371155.png
 

Anhänge

  • 1762267105515.png
    1762267105515.png
    7,3 KB · Aufrufe: 3
Also aktuell ruft Du die Aktion ja im Baustein auf, damit ist die Übergabe des Parameters obsolet. Wenn Du es aber machen willst, müsstest Du schreiben:
CSS:
TestAktion(testVarIn:=testVarIn)

Du merkst dabei, innerhalb des Bausteins wäre das tatsächlich ziemlich sinnlos. Ich benutze das auch nur, um meine Bausteine sinnvoll zu gruppieren.

Aber in gewissen Fällen macht es durchaus Sinn, eine Aktion von außerhalb aufzurufen. Kopiere mal das das Netzwerk 1 in das Netzwerk 2 und dann ändere im Netzwerk 2 TestFB in TestFB.TestAktion und testFB_Instanz in testFB_Instanz.TestAktion. Du hast dann immer noch den selben Parameter im Aufruf, nur ob Du ihn beschreibst, ist dann Deine Sache. Im TwinCAT3 ist das schon wesentlich komfortabler, weil da kann man nicht verwendete Parameter ausblenden.
Ich benutze das z.B. wenn ich mit verschiedenen PLC-Tasks innerhalb eines Bausteins arbeiten will. Das setzt aber streng treadsicheres Programmieren voraus.
 
Zurück
Oben