PLC-Datentypen für EtherCAT-Klemmen konfigurieren
TwinCAT kann für EtherCAT-Klemmen automatisch PLC-Datentypen erzeugen, die den Prozessdaten der Klemme entsprechen. Der erzeugte Typ wird direkt mit einer PLC-Variablen verknüpft, sodass der Zugriff auf die Klemme typsicher über die PLC erfolgt. Die Konfiguration wird über ConsumeXml am Tree-Item der Klemme gesetzt. Dafür stehen zwei Varianten zur Verfügung: kanalweise im Modus "Per Channel" oder als aggregierter Typ über alle Kanäle.
Voraussetzungen
- TwinCAT ab Build 4026.7
- Eine TwinCAT-Solution ist geöffnet und eine DTE-Verbindung ist aktiv.
ITcSysManagerwurde als COM-Objekt in einem STA-Thread initialisiert.- Ein EtherCAT Master mit der Zielklemme ist in der I/O-Konfiguration vorhanden.
Variante 1: Datentyp je Kanal (Per Channel)
Jeder Kanal der Klemme bekommt einen eigenen Datentyp und wird mit einer separaten PLC-Variablen verknüpft. Index gibt den Kanal an (1-basiert). DataType enthält den gerätespezifischen Typnamen aus dem ESI-File der Klemme. LinkToPlc gibt den Zielpfad in der PLC im Format Variablenname (Instanzname) an.
ITcSmTreeItem ecSlave = sysManager.LookupTreeItem(@"TIID^EtherCAT Master^EL1809");
// Variant 1: per channel (CreateDataType with channel index)
string perChannelXml = @"<TreeItem>
<EtherCAT>
<Slave>
<Plc>
<CreateDataType>
<Channels>
<Channel Index=""1"">
<DataType LinkToPlc=""MAIN.Sensor1 (PLC1 Instance)"">MDP5001_250_37E19AF2</DataType>
</Channel>
<Channel Index=""2"">
<DataType LinkToPlc=""MAIN.Sensor2 (PLC1 Instance)"">MDP5001_250_37E19AF2</DataType>
</Channel>
</Channels>
</CreateDataType>
</Plc>
</Slave>
</EtherCAT>
</TreeItem>";
ecSlave.ConsumeXml(perChannelXml);
Variante 2: Aggregierter Typ (alle Kanäle)
// Variant 2: aggregated type (all channels in one data type)
string aggregatedXml = @"<TreeItem>
<EtherCAT>
<Slave>
<Plc>
<CreateDataType>
<DataType LinkToPlc=""MAIN.SensorAll (PLC1 Instance)"">MDP5001_250_B6F8A7F1</DataType>
</CreateDataType>
</Plc>
</Slave>
</EtherCAT>
</TreeItem>";
ecSlave.ConsumeXml(aggregatedXml);
Datentyp global machen
Ein lokaler PLC-Datentyp kann in einen globalen Datentyp für die GVL konvertiert werden. Dazu wird MakeDutGlobal am Tree-Item des DUTs aufgerufen.
ITcSmTreeItem dut = sysManager.LookupTreeItem(@"TIPC^PLC1^PLC1 Project^DUTs^MyStruct");
dut.ConsumeXml(@"
<TreeItem>
<PlcDutDef>
<MakeDutGlobal>
<Active>true</Active>
</MakeDutGlobal>
</PlcDutDef>
</TreeItem>");