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:
- Allgemeine Informationen
- Einen EtherCAT-Teilnehmer erstellen
- EtherCAT-Boxen erstellen und in Topologie einfügen
- EtherCAT-Klemmen erstellen und in Topologie einfügen
- Ausnahmen zum ItemSubType 9099
- Den “Vorherigen Anschluss” einer EtherCAT-Klemme ändern
- Einer HotConnect-Gruppe EtherCAT-Slaves hinzufügen
- Hinzufügen von EtherCAT SyncUnits
- Umgang mit EtherCAT Abzweigdosen (CU1128)
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:
- Die Konfiguration aktivieren
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).
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")
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")
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.
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.
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:
- Das <GroupMemberCnt>-Tag muss die genaue Anzahl Klemmen plus das Gerät selber angeben.
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:
- Scan Devices über Automation Interface