Migration von der TcMC zur TcMC2
Um abzuschätzen, mit welchem Aufwand ein bestehendes Projekt von der Motion Control Bibliothek TcMC auf die erweiterte Bibliothek TcMC2 umzustellen ist, werden hier die wichtigsten Unterschiede und Anpassungen angeführt.
Achsdatenstruktur
Bisher wurden für eine Achse zwei Datenstrukturen angelegt, über die zyklische Daten mit der NC ausgetauscht werden.
NcToPlc_Axis1 AT %I* : NCTOPLC_AXLESTRUCT;
PlcToNc_Axis1 AT %Q* : PLCTONC_AXLESTRUCT;
An die meisten Funktionsbausteine, wie z. B. an den MC_MoveAbsolute wurde am Eingang Axis die Datenstruktur NCTOPLC_AXLESTRUCT übergeben. Einige wenige Funktionsbausteine, wie z. B. der MC_Power, haben zusätzlich die Struktur PLCTONC_AXLESTRUCT erwartet.
In der TcMC2 Umgebung ist die Achsstruktur erweitert worden und es sind alle notwendigen Informationen in nur einer Struktur enthalten, die an jeden MC-Funktionsbaustein übergeben wird.
Axis1 : AXIS_REF;
Die Struktur enthält sowohl die zyklischen Eingangs- und Ausgangsdaten zur NC, als auch zusätzliche Statusinformation. Ein bestehendes Projekt greift üblicherweise auf den Inhalt der NcToPlc-Struktur zu. Die enthaltenen Informationen sind in der Struktur Axis1 ebenfalls verfügbar und das Anwenderprogramm kann damit angepasst werden.
Beispiel:
TcMC : NcToPlc_Axis1.fPosSoll
TcMC2 : Axis1.NcToPlc.SetPos
Zu beachten ist, dass die Unterelemente der NcToPlc- bzw. PlcToNc-Strukturen jetzt englische Namen enthalten um dem internationalen Markt gerecht zu werden. Die aktuelle Sollposition einer Achse ist beispielsweise nicht mehr mit fPosSoll, sondern mit SetPos benannt.
Funktionsbausteine
Die Eingangs- und Ausgangsbeschaltung der Funktionsbausteine hat sich gegenüber der TcMC etwas geändert. Im Wesentlichen ist bei Move-Bausteinen die Unterstützung des MC_BufferMode hinzugekommen. Weiterhin unterstützten die Bausteine jetzt einen Busy und Active-Ausgang. Üblicherweise ist für diese Änderungen nur ein geringer Migrationsaufwand notwendig. Die folgende Tabelle enthält eine Auflistung der Bausteine mit umfangreicheren Änderungen.
TcMC |
TcMC2 |
Anmerkung |
MC_GearInFloat |
MC_GearIn akzeptiert jetzt den Getriebefaktor als Fließkommawert | |
MC_NewPos |
MC_Move... |
Durch den neu eingeführten BufferMode ist es mit jedem Move-Baustein möglich der Achse ein neues Fahrziel zuzuweisen oder die Geschwindigkeit zu ändern. Die NewPos Funktionsbausteine werden daher nicht mehr benötigt. |
MC_MoveAbsoluteOrRestart |
MC_Move... |
MoveAbsoluteOrRestart kann durch zwei Instanzen eines Move-Bausteins ersetzt werden (siehe BufferMode). |
MC_CamIn |
MC_CamIn |
Der neue Funktionsbaustein MC_CamIn führt die Funktion des erweiterten Bausteins MC_CamInExt aus. Die Eingangsbeschaltung wurde entsprechend angepasst. |
MC_SetReferenceFlag |
Das Setzen und Zurücksetzen des Referenz-Flags (Achse ist referenziert) kann mit dem Baustein MC_Home erreicht werden. | |
MC_SetPositionOnTheFly |
Für das fliegende Istwertsetzen wird MC_SetPosition im relativen Modus (Mode=TRUE) verwendet. | |
MC_SetActualPosition |
MC_SetActualPosition wird durch MC_SetPosition ersetzt. Der neue Funktionsbaustein setzt Ist- und Sollposition. | |
MC_GearOutExt |
MC_Move... |
Bewegungskommandos können auf gekoppelte Slave-Achsen angewendet werden, wenn diese Option in den Parametern der Achse explizit aktiviert worden ist (ab TwinCAT 2.11). Ein Bewegungskommando wie MC_MoveAbsolute führt dann automatisch zum Abkoppeln der Achse und das Kommando wird anschließend ausgeführt. In diesem Fall ist ausschließlich der Buffer-ModeAborting möglich. |
MC_OrientedStop |
MC_MoveModulo kann aus dem Stillstand oder aus der Bewegung gestartet werden. Im zweiten Fall verhält sich der Baustein wie MC_OrientedStop | |
MC_Stop |
MC_Halt führt einen normalen Halt während der Bewegung aus. Im Gegensatz dazu verriegelt MC_Stop die Achse gegen weitere Bewegungskommandos und sollte nur in besonderen Situationen angewendet werden. | |
MC_Home |
MC_Home überträgt das bCalibrationCam Signal des Homing-Sensors nur noch während der Baustein aktiv ist. Falls ein Homing aus dem SystemManager mit F9 durchgeführt werden soll, muss das Signal an anderer Stelle zur NC übertragen werden. Z. B. durch direkte Zuweisung: |
Bibliothek TcNC
Die bisherige Bibliothek TcMC benötigte Deklarationen und Funktionen aus der Bibliothek TcNC, sodass diese immer mit in ein Projekt eingebunden wurde. Die neue Bibliothek TcMC2 hat diese Abhängigkeit nicht mehr. Alle notwendigen Deklarationen und Funktionen sind jetzt in der TcMC2 selbst enthalten, sodass die TcNC nicht mehr benötigt wird. Dennoch ist es aus Kompatibilitätsgründen möglich, die TcNC zu verwenden.
Statusinformationen
In bisherigen Motion-Anwendungen wurden Statusinformationen einer Achse oft über einen Funktionsaufruf ermittelt (AxisHasJob(), AxisIsMoving() etc.). Diese Funktionen können zwar weiterverwendet werden wenn die Bibliothek TcNC eingebunden wird, es wird aber ein anderer Weg empfohlen:
Die Statusinformation einer Achse ist vollständig in der oben genannten Achsdatenstruktur Axis1:AXIS_REF enthalten. Es ist aber notwendig, diese Daten zyklisch durch einen Aufruf des Funktionsbausteins MC_ReadStatus oder durch einen Aufruf einer Aktion Axis1.ReadStatus am Anfang des SPS-Zyklus zu aktualisieren. Die Statusinformation ist damit an jeder Stelle des Programms zugreifbar und während des SPS-Zyklus aktuell.