Kurvenscheibe erstellen
Die Funktionen und die Handhabung rund um Kurvenscheiben sind bei der MC3 zentral im Funktionsbaustein MC_CamObject gebündelt. Zum einen können Sie in der Tc3_Mc3Camming-Bibliothek auf bekannte Funktionsbausteine aus der PLCopen zurückgreifen. Zum anderen finden Sie im MC_CamObject Methoden zur Erstellung und Modifikation von Kurvenscheiben sowie auslesbare Eigenschaften der aktiven Kurvenscheibe.
- Grundlegend kann eine Kurvenscheibe zur Konfigurationszeit im Projekt vorkonfiguriert werden.
- 1. Öffnen Sie Axes > Tables.
- 2. Machen Sie einen Rechtsklick auf die Tabelle im Strukturbaum und öffnen Sie den Dialog Insert TcCom Object.
- Die Objekt-ID des Moduls bzw. TcCOM-Objekts muss in diesem Fall mit einem MC_CamObject in der PLC verknüpft werden.

- Zur Laufzeit erfolgt die Initialisierung dieser Verbindung anschließend über die Methode MC_CamObject.Connect().
- Alternativ kann eine Kurvenscheibe auch zur Laufzeit angelegt werden. Durch einen Aufruf der MC_CamObject.Create() Methode aus der PLC heraus wird ein TcCOM Modul angelegt. Eine Verknüpfung und weitere Initialisierung sind in diesem Fall nicht notwendig.

Kurvenscheibe mit MotionFunctionPoint als Stützstellen füllen
Nach dem erfolgreichen Erstellen eines Kurvenscheiben-Objekts wird dieses im Anschluss mit den gewünschten Datenpunkten und Funktionen zur Interpolation gefüllt. Die Definition eines einzelnen Datenpunkte ist dabei über die Struktur MotionFunctionPoint gegeben. Mithilfe der Methode MC_CamObject.WriteData() kann eine Reihe von Datenpunkten (Array aus MotionFunctionPoints) synchron in das Kurvenscheiben-Objekt geladen werden. Mit Abschluss dieser Methode ist die grundlegende Konfiguration einer Kurvenscheibe vollzogen und Achsen können über die hinterlegte Vorschrift miteinander gekoppelt werden.
PROGRAM MAIN
VAR
fbCamObject : MC_CamObject;
fbCamObject2 : MC_CamObject;
motionFunctionPoints : ARRAY[0..360] OF MotionFunctionPoint;
bInit : BOOL;
i : INT;
END_VARIF NOT bInit THEN
fbCamObject.Connect();
FOR i:=0 TO 360 DO
motionFunctionPoints[i].Ignored := FALSE;
motionFunctionPoints[i].FunctionType := EMotionFunctionType.CubicSpline;
motionFunctionPoints[i].MasterPosition := i;
motionFunctionPoints[i].SlavePosition := -(COS(INT_TO_LREAL(i) / 360.0 * 2 * PI) - 1) * 100;
motionFunctionPoints[i].SlaveVelocity := STRING_TO_LREAL('#Ignore');
motionFunctionPoints[i].SlaveAcceleration := STRING_TO_LREAL('#Ignore');
motionFunctionPoints[i].SlaveJerk := STRING_TO_LREAL('#Ignore');
END_FOR
fbCamObject.WriteData(SourceData := ADR(motionFunctionPoints), NumberOfPoints := 361, Periodic:=FALSE);
fbCamObject2.Create();
fbCamObject2.CopyFrom(fbCamObject);
bInit:=TRUE;
END_IF