NC-Achsen mit I/O oder PLC verknüpfen

Eine NC-Achse muss nach dem Anlegen mit einem I/O-Drive verbunden werden, damit sie auf Prozessdaten zugreifen kann. Dafür stehen zwei Varianten zur Verfügung. Variante 1 übergibt den Pfad zum I/O-Drive über ConsumeXml mit einem NcAxisDef-Element. TwinCAT wählt dabei automatisch passende PDO-Mappings. Variante 2 setzt die Verknüpfungen für einzelne Prozessvariablen explizit über ConsumeMappingInfo, was vollständige Kontrolle über das Mapping gibt.

Voraussetzungen

Variante 1: Achse mit I/O-Drive verknüpfen

get_Child(1) liefert das erste Kind des TINC-Knotens, also die erste NC-Task. Der Achsenordner wird anschließend über LookupChild("Axes") aufgerufen. Das NcAxisDef-XML gibt den Pfad zum I/O-Drive und den Kanal an.

// Look up NC axis
ITcSmTreeItem ncConfig = sysManager.LookupTreeItem("TINC");
// LookupChild("Axes") is more reliable than a path string with a potential SAF suffix
ITcSmTreeItem axesFolder = ncConfig.get_Child(1).LookupChild("Axes");
ITcSmTreeItem ncAxis = axesFolder.LookupChild("Axis 1");

// Variant 1: link axis with I/O drive (source-verified)
string linkXml = @"<TreeItem>
  <NcAxisDef>
    <AxisType>1</AxisType>
    <AxisIoType>CANopen-DS402</AxisIoType>
    <IoItem>
      <PathName>TIID^Device 1 (EtherCAT)^Term 1 (EK1100)^Drive 2 (AX8206-0000-0105)</PathName>
      <Channel>0</Channel>
    </IoItem>
  </NcAxisDef>
</TreeItem>";

ncAxis.ConsumeXml(linkXml);

Variante 2: Einzelne Variablen explizit verknüpfen

ConsumeMappingInfo ist ab ITcSysManager3 verfügbar. Das Interface wird per Cast auf das bestehende sysManager-Objekt bezogen. Das XML-Format erwartet jeweils den vollständigen Baumpfad zu Achse und Drive sowie die Variablennamen beider Seiten.

// Variant 2: manually link individual variables (ConsumeMappingInfo)
// OwnerA = NC axis, OwnerB = I/O drive
string mappingXml = @"<VarLinks>
  <OwnerA Name=""TICC^CNC^Axes^Axis_1"">
    <OwnerB Name=""TIID^Device 1 (EtherCAT)^Drive 1 (AX5125-0000-0203)"">
      <Link VarA=""Inputs^Drive status word"" VarB=""AT^Drive status word""/>
      <Link VarA=""Inputs^Position feedback 1 value"" VarB=""AT^Position feedback 1 value""/>
      <Link VarA=""Outputs^Master control word"" VarB=""MDT^Master control word""/>
      <Link VarA=""Outputs^Position command value"" VarB=""MDT^Position command value""/>
    </OwnerB>
  </OwnerA>
</VarLinks>";

ITcSysManager3 sysMan3 = (ITcSysManager3)sysManager;
sysMan3.ConsumeMappingInfo(mappingXml);