Erstellung von und Umgang mit Netzwerkvariablen

In diesem Kapitel wird die Erstellung von und der Umgang mit Netzwerkvariablen ausführlich erklärt. Die folgende Liste enthält alle Kapitel dieses Artikels:

Beachten Sie, dass der Scripting Container ein ausführliches Beispiel bezüglich der Erstellung und Konfiguration von Netzwerkvariablen mit dem Automation Interface beinhaltet.

Allgemeine Informationen über Netzwerkvariablen

Netzwerkvariablen können dazu verwendet werden, Daten zwischen zwei TwinCAT-Geräten über ein IP-basiertes Netzwerk auszutauschen. Ein Gerät deklariert Variablen als „Publisher“ (Sender) und das andere Gerät empfängt Variablenwerte als „Subsriber“. Aus diesem Grund sprechen wir auch von Publisher-/Subscriber-Variablen. TwinCAT bietet Ihnen die Flexibilität, Netzwerkvariablen direkt innerhalb eines TwinCAT-Projekts zu konfigurieren, so dass Sie diese zu Ihrer SPS oder I/O mappen können.

Erstellung von und Umgang mit Netzwerkvariablen 1:

Netzwerkvariablen verwenden das EtherCAT Automation Protocol-Gerät für die Kommunikation über das lokale Netzwerk. Aus diesem Grunde müssen Sie dieses Gerät hinzufügen, bevor Sie eine Publisher- und/oder Subscriber-Box zusammen mit den entsprechenden Variablen konfigurieren können.

Weitere Informationen über Netzwerkvariablen und wie Sie diese in TwinCAT konfigurieren können, finden Sie hier.

Ein EtherCAT Automation Protocol-Gerät erstellen

Um das EtherCAT Automation Protocol-Gerät zu erstellen, können Sie die Methode ITcSmTreeItem::CreateChild() zusammen mit dem entsprechenden SubType dieses Geräts (112) verwenden.

Code-Ausschnitt (C#):

          ITcSmTreeItem devicesNode = systemManager.LookupTreeItem("TIID");
device = devicesNode.CreateChild("Device 1 (EtherCAT Automation Protocol)", 112, null, null);

Code-Ausschnitt (Powershell):

          $devicesNode = $systemManager.LookupTreeItem("TIID")
$device = $devicesNode.CreateChild("Device 1 (EtherCAT Automation Protocol)", 112, $null, $null)

Eine Publisher-Box erstellen

Die Publisher-Box ist der Container für Publisher-Variablen, die z.B. festlegen, welcher Kommunikationsmustertyp für die darin enthaltenen Variablen zu verwenden ist (Unicast, Multicast, Broadcast). Für das Hinzufügen einer Publisher-Box verwenden Sie einfach erneut die Methode ITcSmTreeItem::CreateChild() zusammen mit dem entsprechenden SubType (9051).

Code-Ausschnitt (C#):

          ITcSmTreeItem eapDevice = systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)"); 
pubBox = eapDevice.CreateChild("Box 1 (Publisher)", 9051, null, null);

Code-Ausschnitt (Powershell):

          $eapDevice = $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)")
$pubBox = $eapDevice.CreateChild("Box 1 (Publisher)", 9051, $null, $null)

Der kleine Code-Ausschnitt fügt eine Publisher-Box zum zuvor erzeugten EtherCAT Automation Protocol-Gerät hinzu. Um das Kommunikationsmuster dieser Box zu konfigurieren, müssen Sie deren Einstellungen mit Hilfe der Methode ITcSmTreeItem::ConsumeXml() anpassen. Dies wird ausführlicher im EtherCAT Automation Protocol-Beispiel des Scripting Container oder weiter unten auf dieser Seite beschrieben.

Eine Subscriber-Box erstellen

Die Subscriber-Box ist der Container für Subscriber-Variablen, die z.B. festlegen, welcher Kommunikationsmustertyp für die darin enthaltenen Variablen zu verwenden ist (Unicast, Multicast, Broadcast). Für das Hinzufügen einer Publisher-Box verwenden Sie einfach erneut die Methode ITcSmTreeItem::CreateChild() zusammen mit dem entsprechenden SubType (9052).

Code-Ausschnitt (C#):

          ITcSmTreeItem eapDevice = systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)"); 
subBox = eapDevice.CreateChild("Box 1 (Subscriber)", 9052, null, null);

Code-Ausschnitt (Powershell):

          $eapDevice = $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)")
$subBox = $eapDevice.CreateChild("Box 1 (Subscriber)", 9052, $null, $null)

Der kleine Code-Ausschnitt fügt eine Subscriber-Box zum zuvor erzeugten EtherCAT Automation Protocol-Gerät hinzu. Um das Kommunikationsmuster dieser Box zu konfigurieren, müssen Sie deren Einstellungen mit Hilfe der Methode ITcSmTreeItem::ConsumeXml() anpassen. Dies wird ausführlicher im EtherCAT Automation Protocol-Beispiel des Scripting Container oder weiter unten auf dieser Seite beschrieben.

Publisher-Variablen erstellen

Nachdem Sie erfolgreich eine Publisher-Box hinzugefügt haben, können Sie nun Publisher-Variablen in diese Box hinzufügen, indem Sie die Methode ITcSmTreeItem::CreateChild() verwenden zusammen mit den benötigten Parametern für SubType (0) und vInfo, welche den Datentyp der Publisher-Variablen festlegen, z.B. "BOOL".

Code-Ausschnitt (C#):

          ITcSmTreeItem pubBox = systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Publisher)");
pubVar = pubBox.CreateChild("MAIN.bTestVar", 0, null, "BOOL");

Code-Ausschnitt (Powershell):

          $pubBox = $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Publisher)")
$pubVar = $pubBox.CreateChild("MAIN.bTestVar", 0, $null, "BOOL")

Siehe auch das Scripting Container-Beispiel "EtherCAT Automation Protocol" für weitere Informationen.

Parameter für eine Publisher-/Subscriber-Box setzen

Es müssen zwei Kommunikationsmuster auf einer Publisher- und/oder Subscriber-Box konfiguriert werden: RT-Ethernet oder UDP/IP . Der folgende Screenshot zeigt die entsprechende Konfigurationsregisterkarte von TwinCAT XAE.

Erstellung von und Umgang mit Netzwerkvariablen 2:

Ausführlichere Informationen bezüglich dieser Optionen finden Sie hier.

Um die Box für RT-Ethernet zu konfigurieren, müssen Sie die Methode ITcSmTreeItem::ConsumeXml() zum Importieren der folgenden XML-Struktur verwenden:

        <TreeItem>
<BoxDef>
<FieldbusAddress>1</FieldbusAddress>
<AmsAddress>
<AmsPort>0</AmsPort>
<AmsPortTimeout>5</AmsPortTimeout>
</AmsAddress>
<NvPubDef>
<Udp Enabled="false"/>
     <MacAddress>00 00 00 00 00 00</MacAddress>
<IoDiv>
    <Divider>1</Divider>
    <Modulo>0</Modulo>
</IoDiv>
<VLAN>
    <Enable>false</Enable>
    <Id>0</Id>
    <Prio>0</Prio>
</VLAN>
<ArpInterval>1000</ArpInterval>
<DisableSubscriberMonitoring>false</DisableSubscriberMonitoring>
<TargetChangeable>false</TargetChangeable>
</NvPubDef>
</BoxDef>
</TreeItem>

Die folgende Tabelle zeigt, wie die fett markierten Knoten entsprechend dem gewünschten Kommunikationsmuster angepasst werden müssen.

RT-Ethernet Kommunikationsmuster

<PublisherNetId>

<MacAddress>

Broadcast

0.0.0.0.0.0

FF FF FF FF FF FF

Multicast

0.0.0.0.0.0

Muss eine Multicast MAC Adresse enthalten, siehe hier für weitere Informationen.

Unicast - MAC Adresse

0.0.0.0.0.0

Muss eine Unicast MAC Adresse enthalten, siehe hier für weitere Informationen.

Unicast - AmsNetId

Enthält AmsNetId von Zielrechner.

00 00 00 00 00 00

Importieren Sie folgende XML-Struktur, wenn Sie UDP/IP verwenden möchten:

<TreeItem>
<BoxDef>
<FieldbusAddress>1</FieldbusAddress>
<AmsAddress>
<AmsPort>0</AmsPort>
<AmsPortTimeout>5</AmsPortTimeout>
</AmsAddress>
<NvPubDef>
<Udp Enabled="true">
    <Address>0.0.0.0</Address>
    <Gateway>0.0.0.0</Gateway>
</Udp>
<IoDiv>
    <Divider>1</Divider>
    <Modulo>0</Modulo>
</IoDiv>
<VLAN>
    <Enable>false</Enable>
    <Id>0</Id>
    <Prio>0</Prio>
</VLAN>
<ArpInterval>1000</ArpInterval>
<DisableSubscriberMonitoring>false</DisableSubscriberMonitoring>
<TargetChangeable>false</TargetChangeable>
</NvPubDef>
</BoxDef>
</TreeItem>

Die folgende Tabelle zeigt, wie die fett markierten Knoten entsprechend dem gewünschten Kommunikationsmuster angepasst werden müssen. Auf dem Knoten <Udp> muss das Attribut “Aktiviert” auf “true” gesetzt werden.

RT-Ethernet Kommunikationsmuster

<Address>

<Gateway>

Broadcast

255.255.255.255

0.0.0.0

Multicast

Muss eine Multicast IP-Adresse enthalten. Siehe hier für weitere Informationen.

Enthält gegebenenfalls ein standardmäßiges Gateway, an das die Pakete für’s Routing gesendet werden müssen. Andernfalls auf 0.0.0.0 lassen

Unicast

Muss eine (Unicast) IP-Adresse enthalten. Siehe hier für weitere Informationen.

Enthält gegebenenfalls ein standardmäßiges Gateway, an das die Pakete für’s Routing gesendet werden müssen. Andernfalls auf 0.0.0.0 lassen

Subscriber-Variablen erstellen

Nachdem Sie erfolgreich eine Publisher-Box hinzugefügt haben, können Sie nun Publisher-Variablen in diese Box hinzufügen, indem Sie die Methode ITcSmTreeItem::CreateChild() verwenden zusammen mit den benötigten Parametern für SubType (0) und vInfo, welche den Datentyp der Publisher-Variablen festlegen, z.B. "BOOL".

Code-Ausschnitt (C#):

          ITcSmTreeItem subBox = systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Subscriber)");
subVar = pubBox.CreateChild("MAIN.bTestVar", 0, null, "BOOL");

Code-Ausschnitt (Powershell):

          $subBox = $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Subscriber)")
$subVar = $pubBox.CreateChild("MAIN.bTestVar", 0, $null, "BOOL")

Siehe auch das Scripting Container-Beispiel "EtherCAT Automation Protocol" für weitere Informationen.

Publisher-/Subscriber-Variablen verknüpfen

Zum Verknüpfen von Publisher-/Subscriber-Variablen mit SPS-Variablen benutzen Sie einfach die Methode ITcSysManager::Linkvariables().

Code-Ausschnitt (C#):

          systemManager.LinkVariales("TIPC^PLC Project^PLC Project Instance^PlcTask Outputs^MAIN.bTestVar", "TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Publisher)^MAIN.bTestVar^Outputs^VarData");
        

Code-Ausschnitt (Powershell):

          $systemManager.LinkVariales("TIPC^PLC Project^PLC Project Instance^PlcTask Outputs^MAIN.bTestVar", "TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Publisher)^MAIN.bTestVar^Outputs^VarData")
        

Siehe auch das Scripting Container-Beispiel "EtherCAT Automation Protocol" für weitere Informationen.

Publisher-/Subscriber-Variablen-IDs lesen

Der folgende Code-Ausschnitt liest alle Variablen-IDs aus einer Publisher-Box und speichert sie in das List-Array "ids". Dies kann auch für Subscriber-Variablen verwendet werden.

Code-Ausschnitt (C#):

          List<uint> ids = new List<uint>();
ITcSmTreeItem pubBox = systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Publisher)");
foreach(ITcSmTreeItem var in pubBox)
{
if (var.ItemType == 35) // 35 = publisher variable, 36 = subscriber variable
{
string varStr = var.ProduceXml();
XmlDocument varXml = new XmlDocument();
varXml.LoadXml(varStr);
XmlNode id = varXml.SelectSingleNode("//TreeItem/NvPubVarDef/NvId");
ids.Add(Convert.ToUInt32(id.InnerXml));
}
}

Code-Ausschnitt (Powershell):

          $ids = New-Object System.Collections.ArrayList
$pubBox = $systemManager.LookupTreeItem("TIID^Device 1 (EtherCAT Automation Protocol)^Box 1 (Publisher)")
foreach($var in $pubBox)
{
  if($var.ItemType –eq 35)
  {
    $varXml = [Xml]$var.ProduceXml()
    $id = $varXml.TreeItem.NvPubVarDef.NvId
    $ids.Add($id)
  }
}