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

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>");