TwinCAT - MotionControl - Abläufe

twincatter

Level-1
Beiträge
137
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen SPSler,

ich schreibe ein kleines Testprogramm welches im Wesentlichen folgendes tun soll.

Fahre auf Position 1
Fahre auf Position 2
Fahre auf Position 3

ok, das funktioniert immmerhin.

Ich verwende den Baustein MC_MoveAbsolute

Frage:
Ist es besser für jede Positionierung eine eigene Instanz von MC_MoveAbsolute zu verwenden?
Ist es besser eine einzige Instanz von MC_MoveAbsolute zu verwenden?

wo könnten Vor- und Nachteile liegen?

Da es mein erstes Projekt mit MotionControl ist und ich sowieso TwinCAT-Neuling habe ich noch viele 'grundsätzliche' Fragen.

Vielen Dank, Michael
 
Was machst du wenn du 100 Positionen anfahren musst?
Instanzierst du dann 100 mal?


Ein MC_MoveAbsolute mehr nicht.
Es gibt keine Vorteile durch die mehrfachinstanzierung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo soma,

erst einmal Danke für die Antwort.

Ich habe mich da durch folgenden Satz in Beckhoff-Schulungsunterlagen irritieren lassen:
"Ablaufketten können nur sinnvoll funktionieren wenn für jeden Befehl eine neue Instanz des MC-Bausteins gebildet wird."

Dies war allerdings auf KUP, KOP und CFC in Verbindung mit Kaskaden bezogen. Ich nehme an die Kaskaden sind hierbei entscheident.

Mir ist eine einzige Instanz bei programmierung mit ST ebenfalls sympatischer.

Grüße, Michael
 
Mit einem Baustein wird es funktionieren, wenn jede Bewegung mit Done abgeschlossen wird. Dann kann mit einer Flanke auf Execute die nächste Bewegung gestartet werden.
Wenn die nächste Bewegung auf das nächste Ziel vorzeitig getriggert werden soll ohne auf Done zu warten (weil z.B. der Job erledigt ist) dann kann es mit einem Baustein Probleme geben. Ein Baustein kann sich nämlich nicht selbst unterbrechen. Ich habe so was mal mit zwei Bausteinen realisiert, die abwechselnd getriggert werden und sich so gegenseitig unterbrechen.

Gruß
witkatz
 
Du brauchst entsprechend der Anzahl der chronologischen Schritte deines FBs, auch eine entsprechende Zahl von Schritten in der Schrittkette. Dann geht es es auch mit nur einem FB.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit einem Baustein wird es funktionieren, wenn jede Bewegung mit Done abgeschlossen wird. Dann kann mit einer Flanke auf Execute die nächste Bewegung gestartet werden.
Wenn die nächste Bewegung auf das nächste Ziel vorzeitig getriggert werden soll ohne auf Done zu warten (weil z.B. der Job erledigt ist) dann kann es mit einem Baustein Probleme geben. Ein Baustein kann sich nämlich nicht selbst unterbrechen. Ich habe so was mal mit zwei Bausteinen realisiert, die abwechselnd getriggert werden und sich so gegenseitig unterbrechen.

Gruß
witkatz

So ist es gedacht. Da gibt es auch einen "Abort Mode" mit dem man definieren kann, wie der Übergang zwischen zwei Positionierkommandos realisiert werden soll.
 
Für Fahrbefehle die nacheinander ablaufen genügt eine Instanz (wie oben).
Für Überlagerungen benötigt man zwei wie oben schon geschrieben. Auf BufferMode und Rücksetzen der Execute Eingänge usw. achten.
Bei Überlagerungen aber auch normalen Fahrbefehlen kann es auch sein das die NC einen Berechnungsfehler ausgibt wenn diese meint es würde nicht umsetzbar sein...
;)
Gruß,
RE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mir einen FB für die ganze Motion Control gebaut - mein "Achs-Baustein". Der kapselt alle wichtigen Funktionalitäten (wie zB MoveAbsolute, MoveVelocity, MoveRealtive, Homing, etc.) und kann somit für alle Projekte weiterverwendet werden. Dem FB übergebe ich dann nur eine Kennung für die Art der Bewegung und die erforderlichen Werte. Der Achs-FB wird im Programm nur ein einziges Mal aufgerufen.
Intern enthält er für MoveAbsolute zwei Instanzen des FB_MoveAbsolute. Die werden unabhängig vom Fahrauftrag jedes Mal abwechselnd aufgerufen. Somit kann ich bei Bedarf immer nachtriggern (also meinen Achs-FB) und muss mir im Vorfeld keine Gedanken darüber machen, wie viele Instanzen ich benötige.
 
Zurück
Oben