Wie Routen verwaltet werden

Routen lassen sich per ConsumeXml auf dem Routen-Knoten hinzufügen. Das direkte Löschen über das Automation Interface ist nicht möglich. Eine Alternative ist die direkte Bearbeitung der StaticRoutes.xml. Die Ziel-Net-ID des Projekts lässt sich über ITcSysManager2 bequem setzen und auslesen.

Wie Routen verwaltet werden 1:

Über diesen Weg werden nur unverschlüsselte Routen angelegt; ADS Secure / verschlüsselte Routen werden nicht unterstützt.

Voraussetzungen

TwinCAT 3 ist installiert. Für die Routenlöschung ist Schreibzugriff erforderlich auf:
C:\TwinCAT\3.1\TargetStaticRoutes.xml

Route hinzufügen mit IP-Adresse

C#:

string xmlString = "<TreeItem><RoutePrj><TargetList><BroadcastSearch>true</BroadcastSearch></TargetList><AddRoute><RemoteName>RouteName</RemoteName><RemoteNetId>10.1.128.217.1.1</RemoteNetId><RemoteIpAddr>10.1.128.217</RemoteIpAddr><UserName>Administrator</UserName><Password>1</Password><NoEncryption></NoEncryption></AddRoute></RoutePrj></TreeItem>";
ITcSmTreeItem routes = systemManager.LookupTreeItem("TIRR");
routes.ConsumeXml(xmlString);

PowerShell:

$xmlString ="<TreeItem><ItemName>Route Settings</ItemName><PathName>TIRR</PathName><RoutePrj><TargetList><BroadcastSearch>true</BroadcastSearch></TargetList><AddRoute><RemoteName>RouteName</RemoteName><RemoteNetId>10.1.128.217.1.1</RemoteNetId><RemoteIpAddr>10.1.128.217</RemoteIpAddr><UserName>Administrator</UserName><Password>1</Password><NoEncryption></NoEncryption></AddRoute></RoutePrj></TreeItem>"
$routes = $systemManager.LookupTreeItem("TIRR")
$routes.ConsumeXml($xmlString)

Route hinzufügen mit Hostname

<TreeItem>
  <ItemName>Route Settings</ItemName>
  <PathName>TIRR</PathName>
  <RoutePrj>
    <TargetList>
      <BroadcastSearch>true</BroadcastSearch>
    </TargetList>
    <AddRoute>
      <RemoteName>RouteName</RemoteName>
      <RemoteNetId>1.2.3.4.5.6</RemoteNetId>
      <RemoteHostName>CX-12345</RemoteHostName>
      <UserName>userName</UserName>
      <Password>password</Password>
      <NoEncryption></NoEncryption>
      <LocalName>LocalName</LocalName>
    </AddRoute>
  </RoutePrj>
</TreeItem>

Projektroute hinzufügen

<TreeItem>
  <ItemName>Route Settings</ItemName>
  <PathName>TIRR</PathName>
  <RoutePrj>
    <TargetList>
      <BroadcastSearch>true</BroadcastSearch>
    </TargetList>
    <AddProjectRoute>
      <Name>RouteName</Name>
      <NetId>1.2.3.4.5.6</NetId>
      <IpAddr>1.2.3.4</IpAddr>
    </AddProjectRoute>
  </RoutePrj>
</TreeItem>
Wie Routen verwaltet werden 2:

Die XML-Struktur für reguläre und Projektrouten kann gleichzeitig verwendet werden.

Net-ID setzen und auslesen

// Net-ID setzen (ITcSysManager2)
ITcSysManager2 sysMan2 = (ITcSysManager2)sysManager;

sysMan2.SetTargetNetId("5.23.233.156.1.1");  // Auf Remote-System
sysMan2.SetTargetNetId("");                   // Zurück auf lokales System

string currentNetId = sysMan2.GetTargetNetId();

Route aus StaticRoutes.xml löschen

var xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load(@"C:\TwinCAT\3.1\Target\StaticRoutes.xml");

string routeToRemove =
    "<Route>" +
        "<Name>CX-17E99C</Name>" +
        "<Address>CX-17E99C</Address>" +
        "<NetId>5.23.233.156.1.1</NetId>" +
        "<Type>TCP_IP</Type>" +
    "</Route>";

string xmlString = xmlDoc.InnerXml;
xmlString = xmlString.Replace(routeToRemove, "");
xmlDoc.InnerXml = xmlString;
xmlDoc.Save(@"C:\TwinCAT\3.1\Target\StaticRoutes.xml");
Wie Routen verwaltet werden 3:

SetTargetNetId("") setzt das Projekt auf die lokale AMS Net-ID zurück. GetTargetNetId() gibt die aktuell im Projekt eingestellte Net-ID zurück. Änderungen an der StaticRoutes.xml wirken sich erst nach einem Neustart des TwinCAT-Diensts aus.