Erstellung von und Umgang mit EtherCAT-Teilnehmern

In diesem Artikel wird beschrieben, wie eine EtherCAT-Topologie mit Hilfe des TwinCAT-Automation Interface aufgebaut wird. Er besteht aus folgenden Themen:

Alle diese Themen behandeln den Fall einer Offline-Konfiguration, d.h. die realen Adressen aller Geräte sind zum Zeitpunkt der Konfiguration nicht bekannt. Im letzten Kapitel dieses Artikels wird daher auch erläutert, wie Sie:

Allgemeine Informationen

Diese Dokumentation sollte Ihnen einen Überblick darüber verschaffen, wie EtherCAT-Teilnehmer und deren entsprechende Topologie über das Automation Interface erzeugt und gehandhabt werden. Für ein tieferes Verständnis der Arbeitsweise von EtherCAT und wie es im Allgemeinen in TwinCAT System Manager/XAE integriert ist, lesen Sie bitte die EtherCAT-Systemdokumentation und das entsprechende Kapitel EtherCAT-Konfiguration in TwinCAT. EtherCAT-Boxen und -Klemmen, die mit einem EtherCAT-Master verbunden sind, werden auf die gleiche Art und Weise erstellt, wie in einem getrennten Artikel über E-Bus-Subtypen erläutert wird.

Einen EtherCAT-Teilnehmer erstellen

Der erste Schritt bei der Erstellung einer TwinCAT EtherCAT-Konfiguration besteht in der Erstellung eines EtherCAT-Teilnehmers, die möglicherweise die Erstellung eines EtherCAT-Masters, -Slaves oder eines Automatisierungsprotokolls beinhaltet (z.B. um Netzwerkvariablen zu verwenden, wie dies in einem getrennten Artikel beschrieben wird). Um einen EtherCAT-Master/Slave zu erstellen, verwenden Sie einfach die ITcSmTreeItem::CreateChild()-Methode mit dem entsprechenden Parameter für SubType (EtherCAT Master = 111, EtherCAT Slave = 130).

Erstellung von und Umgang mit EtherCAT-Teilnehmern 1:

EtherCAT-Master – Code-Ausschnitt (C#)

ITcSmTreeItem devices = systemManager.LookupTreeItem("TIID");
ethercatMaster = devices.CreateChild("EtherCAT Master", 111, null, null);

EtherCAT-Master – Code-Ausschnitt (Powershell)

$devices = $systemManager.LookupTreeItem("TIID")
$ethercatMaster = $devices.CreateChild("EtherCAT Master", 111, $null, $null)

EtherCAT-Slave – Code-Ausschnitt (C#)

ITcSmTreeItem devices = systemManager.LookupTreeItem("TIID");
ethercatSlave = devices.CreateChild("EtherCAT Slave", 130, null, null);

EtherCAT-Slave – Code-Ausschnitt (Powershell)

$devices = $systemManager.LookupTreeItem("TIID")
$ethercatSlave = $devices.CreateChild("EtherCAT Slave", 130, $null, $null)

EtherCAT-Boxen erstellen

Der zweite Schritt beinhaltet die Erstellung von EtherCAT-Boxen, zum Beispiel einen EK1100 EtherCAT-Koppler. Wie im Artikel über E-Bus SubTypes erklärt, verwenden alle untergeordneten Tree Items (es gibt wenige Ausnahmen, siehe unten) eines EtherCAT-Masters einen gemeinsamen SubType (9099) und sie werden über die Produkt-Revision identifiziert, die als vInfo-Parameter der Methode ITcSmTreeItem::CreateChild() übergeben werden muss.

Code-Ausschnitt (C#)

ITcSmTreeItem ethercatMaster = systemManager.LookupTreeItem("TIID^EtherCAT Master");
ethercatMaster.CreateChild("EK1100", 9099, "", "EK1100-0000-0017");

Code-Ausschnitt (Powershell)

$ethercatMaster = $systemManager.LookupTreeItem("TIID^EtherCAT Master")
$ethercatMaster.CreateChild("EK1100", 9099, "", "EK1100-0000-0017")

Erstellung von und Umgang mit EtherCAT-Teilnehmern 2:

Bitte beachten: Zusätzlich zu einer vollständigen Produkt-Revision können Sie auch einen Platzhalter verwenden. Wenn Sie nur "EK1100" als vInfo spezifizieren, erfasst Automation Interface automatisch die neueste Revisionsnummer und verwendet diese. Beispiel:

Code-Ausschnitt (C#):

ITcSmTreeItem ethercatMaster = systemManager.LookupTreeItem("TIID^EtherCAT Master");
ethercatMaster.CreateChild("EK1100", 9099, "", "EK1100");

Code-Ausschnitt (Powershell):

$ethercatMaster = $systemManager.LookupTreeItem("TIID^EtherCAT Master")
$ethercatMaster.CreateChild("EK1100", 9099, "", "EK1100")

EtherCAT-Klemmen erstellen und in Topologie einfügen

Die Erstellung von EtherCAT-Klemmen basiert auf den gleichen Konzepten wie die Erstellung von EtherCAT-Boxen. Alle Klemmen teilen ebenfalls einen gemeinsamen SubType und werden anhand der Produkt-Revision identifiziert, die als vInfo-Parameter der Methode ITcSmTreeItem::CreateChild() übergeben werden muss. Der Parameter bstrBefore bietet Ihnen die Möglichkeit, die Position zu bestimmen, an welcher die Klemme in die Konfiguration eingefügt wird.

Code-Ausschnitt (C#):

ITcSmTreeItem ek1100 = systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT)^EK1100");
ek1100.CreateChild("Term 4 (EL2004)", 9099, "Term 3 (EL2004)", "EL2004-0000-0017");

Code-Ausschnitt (Powershell):

$ek1100 = $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT)^EK1100")
$ek1100.CreateChild("Term 4 (EL2004)", 9099, "Term 3 (EL2004)", "EL2004-0000-0017")

Erstellung von und Umgang mit EtherCAT-Teilnehmern 3:

Bitte beachten: Sollten bei Verwendung des bstrBefore-Parameters Probleme auftreten, versuchen Sie bitte die Klemme auf einer “Geräteebene” einzufügen, zum Beispiel:

Code-Ausschnitt (C#):

ITcSmTreeItem device= systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT)");
device.CreateChild("Term 4 (EL2004)", 9099, "Term 3 (EL2004)", "EL2004-0000-0017");

Code-Ausschnitt (Powershell):

$device= $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT)")
$device.CreateChild("Term 4 (EL2004)", 9099, "Term 3 (EL2004)", "EL2004-0000-0017")

Die neue Klemme wird dann vor "Term 3 (EL2004)" unter der zuletzt eingefügten EtherCAT-Box eingefügt.

Bitte beachten: Zusätzlich zu einer vollständigen Produkt-Revision können Sie auch einen Platzhalter verwenden. Wenn Sie nur "EL2004" als vInfo spezifizieren, erfasst Automation Interface automatisch die neueste Revisionsnummer und verwendet diese. Beispiel:

Code-Ausschnitt (C#):

ITcSmTreeItem ek1100 = systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT)^EK1100");
ek1100.CreateChild("Term 4 (EL2004)", 9099, "Term 3 (EL2004)", "EL2004");

Code-Ausschnitt (Powershell):

$ek1100 = $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT)^EK1100")
$ek1100.CreateChild("Term 4 (EL2004)", 9099, "Term 3 (EL2004)", "EL2004")

Ausnahmen zum ItemSubType 9099

Es gibt wenige Ausnahmen zum ItemSubType 9099, z.B. die RS232-Klemmen EP6002 (ItemSubType 9101) und EL600X (ItemSubType 9101). Die folgende Tabelle gibt einen Überblick über alle Ausnahmen und deren entsprechenden ItemSubType.

I/O

ItemSubType

EP6002

9101

EL6001

9101

EL6002

9101

EP6001-0002

9101

EP6002-0002

9101

EL6021

9103

EL6022

9103

EL6021-0021

9103

BK1120

9081

ILXB11

9086

EL6731

9093

EL6751

9094

EL6752

9095

EL6731-0010

9096

EL6751-0010

9097

EL6752-0010

9098

EL6601

9100

EL6720

9104

EL6631

9106

EL6631-0010

9107

EL6632

9108

EL6652-0010

9109

EL6652

9110

Den “Previous Port” einer EtherCAT-Klemme ändern

Der vorherige Anschluss einer EtherCAT-Klemme bestimmt die Position der Klemme innerhalb der EtherCAT-Topologie.

Erstellung von und Umgang mit EtherCAT-Teilnehmern 4:

In TwinCAT XAE schließt das Dropdown-Listenfeld automatisch alle verfügbaren Previous Ports ein. Um diese Einstellung über das Automation Interface zu konfigurieren, können Sie die Methoden ITcSmTreeItem::ProduceXml() und ITcSmTreeItem::ConsumeXml() für die Bearbeitung der XML-Beschreibung der entsprechenden EtherCAT-Klemme verwenden. Die XML-Beschreibung beinhaltet hierzu einen oder mehrere XML-Knoten <PreviousPort>, wobei dessen (deren) Attribut "Selected=1" festlegt, welcher vorherige Anschluss derzeit ausgewählt ist. Jedes vorherige Anschlussgerät wird mittels seiner physikalischen Adresse identifiziert.

Beispiel (XML-Beschreibung)

<TreeItem>
  <EtherCAT>
    <Slave>
      <PreviousPort Selected="1">
        <Port>B</Port>
        <PhysAddr>1045</PhysAddr>
      </PreviousPort>
      <PreviousPort>
        <Port>B</Port>
        <PhysAddr>1023</PhysAddr>
      </PreviousPort>
    </Slave>
  <EtherCAT>
</TreeItem>

Wenn Sie den vorherigen Anschluss ändern möchten, müssen sie die <PhysAddr> des gewünschten Geräts kennen, welche ebenfalls über die XML-Beschreibung ermittelt werden kann.

Beim Einfügen von Childs in eine EtherCAT-Konfiguration kann der Parameter bstrBefore der ImportChild- oder CreateChild-Methode verwendet werden, um das vorherige Element beim Aufruf der ImportChild- oder CreateChild-Methode auf einem Slave anzugeben. Auf einem EtherCAT-Master muss diese Einstellung über die XML-Beschreibung von oben angegeben werden.

Einer HotConnect-Gruppe EtherCAT-Slaves hinzufügen

Mit Hilfe von EtherCAT HotConnect können vorkonfigurierte Abschnitte dem Datenverkehr vor dem Start oder während des Betriebs des Systems hinzugefügt oder aus ihm entfernt werden. Weitere Informationen über EtherCAT HotConnect finden Sie in unserer EtherCAT-Systemdokumentation.

In TwinCAT XAE kann einer HotConnect-Gruppe ein EtherCAT-Slave hinzugefügt werden, indem die entsprechende Option im Kontextmenü des Geräts angeklickt wird.

Erstellung von und Umgang mit EtherCAT-Teilnehmern 5:

ImTwinCAT-Automation Interface kann das gleiche mittels Verwendung der folgenden XML-Struktur auf dem EtherCAT-Slave erzielt werden:

Beispiel (XML-Beschreibung):

<TreeItem>
<EtherCAT>
<Slave>
<HotConnect>
    <GroupName>Term 1 (EK1101)</GroupName>
    <GroupMemberCnt>4</GroupMemberCnt>
    <IdentifyCmd>
     <Comment>HotConnect-Identität lesen</Comment>
     <Requires>cycle</Requires>
     <Cmd>1</Cmd>
     <Adp>0</Adp>
     <Ado>4096</Ado>
     <DataLength>2</DataLength>
     <Cnt>1</Cnt>
     <Retries>3</Retries>
     <Validate>
     <Data>0000</Data>
     <Timeout>5000</Timeout>
     </Validate>
    </IdentifyCmd>
</HotConnect>
</Slave>
</EtherCAT>
</TreeItem>

Bitte beachten:

Einstellung von EtherCAT SyncUnits

EtherCAT SyncUnits können über ITcSmTreeItem::ConsumeXml() und durch Verwendung der folgenden XML-Beschreibung eingestellt werden.

Beispiel (XML-Beschreibung):

<TreeItem>
  <EtherCAT>
    <Slave>
      <SyncUnits>
        <SyncUnit>SyncUnit1</SyncUnit>
      </SyncUnits>
    </Slave>
  </EtherCAT>
</TreeItem>

Umgang mit EtherCAT Abzweigdosen (CU1128)

EtherCAT Abzweigdosen können wie alle anderen Tree Items behandelt werden. Der folgende Beispielcode zeigt nachstehend, wie eine CU1128-Box und anschließend zwei EK1100-Boxen hinzugefügt werden:

Code-Ausschnitt (C#)

ITcSmTreeItem cu1128 = ethercatMaster.CreateChild("CU1128", 9099, null, "CU1128");
ITcSmTreeItem cu1128_devA = cu1128.get_Child(1);
ITcSmTreeItem cu1128_devB = cu1128.get_Child(2);
ITcSmTreeItem ek1100_1 = cu1128_devA.CreateChild("EK1100-1", 9099, null, "EK1100");
ITcSmTreeItem ek1100_2 = cu1128_devB.CreateChild("EK1100-2", 9099, null, "EK1100");

Code-Ausschnitt (Powershell)

$cu1128 = $ethercatMaster.CreateChild("CU1128", 9099, $null, "CU1128")
$cu1128_devA = $cu1128.get_Child(1)
$cu1128_devB = $cu1128.get_Child(2)
$ek1100_1 = $cu1128_devA.CreateChild("EK1100-1", 9099, $null, "EK1100")
$ek1100_2 = $cu1128_devB.CreateChild("EK1100-2", 9099, $null, "EK1100")

Die EtherCAT-Konfiguration aktivieren

Um eine erstellte TwinCAT-Konfiguration über das Automation Interface zu aktivieren, kann die Methode ITcSysManager::ActivateConfiguration() verwendet werden. Allerdings wurde in den vorigen Kapiteln lediglich erläutert, wie eine Offline-Konfiguration zu erstellen ist, d.h. dass alle erstellten Geräte noch keine reale Adresse haben, z.B. der EtherCAT-Master wurde noch nicht mit einer physikalischen Netzwerkschnittstellenkarte verbunden. Vor der Aktivierung der Konfiguration müssen Sie deshalb jedes Gerät mit Online-Adressen konfigurieren. Um die realen Adressen zu bestimmen, können Sie ein ScanDevices auf dem Online-System ausführen, die realen Adressen über die XML-Beschreibung (ITcSmTreeItem::ProduceXml()) ermitteln und dann die Adressinformation über ITcSmTreeItem::ConsumeXml() in die erstellte (Offline-) Konfiguration importieren. Es gibt zwei „Wie...“ Beispiele, die Ihnen bei genau dieser Art der Konfiguration helfen können: