twincatter
Level-1
- Beiträge
- 137
- Reaktionspunkte
- 1
-> Hier kostenlos registrieren
Hallo zusammen,
ich beschäftige mich aktuell mit TwinCAT3-OOP und habe zu Methoden noch einige Fragen.
In vielen Beispielen wird eine Methode aufgerufen und sofort (im gleichen Zyklus) ein Ergebnis geliefert. Beispielsweise bei der Berechnung einer Fläche. Dieser Fall ist klar.
Methode mit Schrittkette
Nehmen wir an, eine Methode benötigt mehrere Zyklen zur Ausführung. In der Methode sei eine Schrittkette enthalten.
Als Beispiel wähle ich einen Zylinder mit Endschaltern und Timeout-Überwachung. Er soll die Methoden „MoveToBase“ und „MoveToWork“ besitzen.
Aufruf der Methode
Da die Methode mehrere Zyklen zur Ausführung benötigt, muss dafür gesorgt werden, dass sie dementsprechend so oft aufgerufen wird, bis sie beendet ist.
Dies kann ja aus der übergeordneten Schrittkette leicht realisiert werden. Über eine Visu ist es allerdings nicht direkt möglich, jedenfalls wüsste ich nicht wie. In einem Beispiel von Beckhoff (Sortieranlage) wurde hierfür ein extra FB (fbVisu) programmiert. Über die Visu wird, wie gewohnt, eine Variable gesetzt, die von fBVisu ausgewertet wird und ggf. die Methode aufruft. Das ist auf alle Fälle ein höherer Aufwand.
Rückgabewerte der Methode
Ich denke es wäre sinnvoll, wenn jede Methode als Rückgabewert eine Struktur verwendet. Diese Struktur enthält Variablen wie: Busy, Error, Done, Message. Alternativ könnte natürlich auch der Funktionsblock die Rückgabewerte bereitstellen. Wenn jedoch die Methoden selbst die Rückgabewerte bereitstellen, könnten auch mehrere Methoden eines FBs „gleichzeitig“ aufgerufen werden.
Deklarierung von Variablen in der Methode
Bei normaler Deklaration von Variablen in einer Methode sind diese nur temporär.
Mit „VAR_INST“ können die Variablen so deklariert werden, dass sie sich so verhalten als seien sie im FB deklariert worden. Dies finde ich geschickt. Allerdings werden mir diese Variablen nicht angeboten (Intellisense), wenn ich eine Verknüpfung von der Visu herstellen will. Gebe ich den Namen direkt ein, funktioniert es aber.
Initialisieren der Methode.
Irgendwie muss beim Aufruf der Methode ein Init durchgeführt werden, damit z.B. die Schrittvariable der Schrittkette zurückgesetzt wird. Hierzu kann sicher ein Parameter der Methode verwendet werden, z.B: bStart. Wenn bStart := TRUE dann iStep := 0. Gefällt mit nicht so richtig, dann muss die Methode von der übergeordneten Schrittkette immer in 2 Schritten aufgerufen werden . Einmal mit Start = TRUE, und dann mit Start = FALSE. Das würde ich gerne vermeiden. Vielleicht ein SPS-Zykluszähler zur Detektion verwendet werden. Wenn Methode im letzten Zyklus nicht aufgerufen wurde, dann iStep := 0. Denke dies könnte funktionieren. Wenn allerdings die Methode aus irgendeinem Grund nur z.B. jeden 2ten SPS-Zyklus aufgerufen würde, gäbe es ein Problem.
Ja, es sind einige Fragen geworden. Diese hätte ich nicht, wenn ich wie bei „Nicht-OOP“ einfach eine boolsche Eingangsvariable des FBs verwenden würde.
Ich lasse mich gerne davon überzeugen, dass es dennoch gut ist mit Methoden zu arbeiten.
Bin gespannt welche Anmerkungen Ihr dazu habt.
Grüße vom Bodensee und bleibt gesund
Twincatter
ich beschäftige mich aktuell mit TwinCAT3-OOP und habe zu Methoden noch einige Fragen.
In vielen Beispielen wird eine Methode aufgerufen und sofort (im gleichen Zyklus) ein Ergebnis geliefert. Beispielsweise bei der Berechnung einer Fläche. Dieser Fall ist klar.
Methode mit Schrittkette
Nehmen wir an, eine Methode benötigt mehrere Zyklen zur Ausführung. In der Methode sei eine Schrittkette enthalten.
Als Beispiel wähle ich einen Zylinder mit Endschaltern und Timeout-Überwachung. Er soll die Methoden „MoveToBase“ und „MoveToWork“ besitzen.
Aufruf der Methode
Da die Methode mehrere Zyklen zur Ausführung benötigt, muss dafür gesorgt werden, dass sie dementsprechend so oft aufgerufen wird, bis sie beendet ist.
Dies kann ja aus der übergeordneten Schrittkette leicht realisiert werden. Über eine Visu ist es allerdings nicht direkt möglich, jedenfalls wüsste ich nicht wie. In einem Beispiel von Beckhoff (Sortieranlage) wurde hierfür ein extra FB (fbVisu) programmiert. Über die Visu wird, wie gewohnt, eine Variable gesetzt, die von fBVisu ausgewertet wird und ggf. die Methode aufruft. Das ist auf alle Fälle ein höherer Aufwand.
Rückgabewerte der Methode
Ich denke es wäre sinnvoll, wenn jede Methode als Rückgabewert eine Struktur verwendet. Diese Struktur enthält Variablen wie: Busy, Error, Done, Message. Alternativ könnte natürlich auch der Funktionsblock die Rückgabewerte bereitstellen. Wenn jedoch die Methoden selbst die Rückgabewerte bereitstellen, könnten auch mehrere Methoden eines FBs „gleichzeitig“ aufgerufen werden.
Deklarierung von Variablen in der Methode
Bei normaler Deklaration von Variablen in einer Methode sind diese nur temporär.
Mit „VAR_INST“ können die Variablen so deklariert werden, dass sie sich so verhalten als seien sie im FB deklariert worden. Dies finde ich geschickt. Allerdings werden mir diese Variablen nicht angeboten (Intellisense), wenn ich eine Verknüpfung von der Visu herstellen will. Gebe ich den Namen direkt ein, funktioniert es aber.
Initialisieren der Methode.
Irgendwie muss beim Aufruf der Methode ein Init durchgeführt werden, damit z.B. die Schrittvariable der Schrittkette zurückgesetzt wird. Hierzu kann sicher ein Parameter der Methode verwendet werden, z.B: bStart. Wenn bStart := TRUE dann iStep := 0. Gefällt mit nicht so richtig, dann muss die Methode von der übergeordneten Schrittkette immer in 2 Schritten aufgerufen werden . Einmal mit Start = TRUE, und dann mit Start = FALSE. Das würde ich gerne vermeiden. Vielleicht ein SPS-Zykluszähler zur Detektion verwendet werden. Wenn Methode im letzten Zyklus nicht aufgerufen wurde, dann iStep := 0. Denke dies könnte funktionieren. Wenn allerdings die Methode aus irgendeinem Grund nur z.B. jeden 2ten SPS-Zyklus aufgerufen würde, gäbe es ein Problem.
Ja, es sind einige Fragen geworden. Diese hätte ich nicht, wenn ich wie bei „Nicht-OOP“ einfach eine boolsche Eingangsvariable des FBs verwenden würde.
Ich lasse mich gerne davon überzeugen, dass es dennoch gut ist mit Methoden zu arbeiten.
Bin gespannt welche Anmerkungen Ihr dazu habt.
Grüße vom Bodensee und bleibt gesund
Twincatter