EtherCAT SyncUnits konfigurieren

EtherCAT-Slaves werden einer SyncUnit zugewiesen, um sie einem gemeinsamen Task-Zyklus zuzuordnen. Alle Slaves in derselben SyncUnit werden im gleichen Echtzeitkontext synchronisiert. Die Zuweisung erfolgt per ConsumeXml auf dem jeweiligen Slave-Knoten.

Voraussetzungen

Einfache SyncUnit-Zuweisung

C#:

ITcSmTreeItem ecSlave = sysManager.LookupTreeItem(@"TIID^EtherCAT Master^EK1100");

ecSlave.ConsumeXml(@"<TreeItem>
  <EtherCAT>
    <Slave>
      <SyncUnits>
        <SyncUnit>SyncUnit1</SyncUnit>
      </SyncUnits>
    </Slave>
  </EtherCAT>
</TreeItem>");

PowerShell:

$ecSlave = $sysManager.LookupTreeItem("TIID^EtherCAT Master^EK1100")
$ecSlave.ConsumeXml("<TreeItem><EtherCAT><Slave><SyncUnits><SyncUnit>SyncUnit1</SyncUnit></SyncUnits></Slave></EtherCAT></TreeItem>")

Erweitert: SyncUnit mit Task-Zuweisung über SuTask

Wenn die zugeordnete Task bekannt ist, kann die Task-OID direkt als SuTask-Attribut übergeben werden. Damit wird die SyncUnit direkt mit einer spezifischen Task verknüpft, ohne dass TwinCAT die Zuordnung automatisch auflösen muss. Die Task-OID lässt sich über ProduceXml auf dem EtherCAT-Master ermitteln.

// SuTask value = OID of the task (e.g. "#x2010020") — read from ProduceXml on the EC master
ecSlave.ConsumeXml(@"<TreeItem>
  <EtherCAT>
    <Slave>
      <SyncUnits>
        <SyncUnit RepeatSupport=""true"" SuTask=""#x2010020"">MySyncUnit</SyncUnit>
      </SyncUnits>
    </Slave>
  </EtherCAT>
</TreeItem>");

Die zugehörige Task-OID lässt sich aus dem EC-Master per ProduceXml lesen. Beispiel:

<Cdls><Cdl><TaskOid>#x2010020</TaskOid></Cdl></Cdls>
EtherCAT SyncUnits konfigurieren 1:

Wenn der angegebene SyncUnit-Name noch nicht existiert, legt TwinCAT automatisch eine neue SyncUnit mit diesem Namen im EtherCAT-Master an. Dieses Verhalten ist durch die TwinCAT-Implementierung definiert und tritt konsistent auf. Ein Slave kann nur einer SyncUnit angehören. Die SuTask-OID muss exakt mit der Task-OID im EtherCAT-Master übereinstimmen.