Durchführung einer ADS Broadcast-Suche

Zum Auslösen einer TwinCAT Broadcast-Suche und Auffinden eines unbekannten entfernten ADS-Geräts können die ConsumeXml() und ProduceXml() Methoden aus der ITcSmTreeItem Schnittstelle verwendet werden.

Allgemeine Broadcast-Suche

Code-Ausschnitt (C#):

          string xmlString = "<TreeItem><RoutePrj><TargetList><BroadcastSearch>true</BroadcastSearch></TargetList></RoutePrj></TreeItem>";
ITcSmTreeItem routes = sysMan.LookupTreeItem("TIRR");
routes.ConsumeXml(xmlString);
string result = routes.ProduceXml();

Code-Ausschnitt (Powershell):

          $xmlString = "<TreeItem><RoutePrj><TargetList><BroadcastSearch>true</BroadcastSearch></TargetList></RoutePrj></TreeItem>"
$routes = $systemManager.LookupTreeItem("TIRR")
$routes.ConsumeXml($xmlString)
$result = $routes.ProduceXml()

Die Variable „result“ enthält nun eine XML-Darstellung aller gefundenen ADS-Geräte im Netzwerk. Zur Auswahl eines spezifischen Geräts aus dieser Liste kann der reguläre .NET Mechanismus für XML-Umgang verwendet werden.

Code-Ausschnitt (C#):

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(result);
string amsNetId = xmlDocument.SelectSingleNode("//TreeItem/RoutePrj/TargetList/Target/IpAddr[text()=\"" + ipAddress + "\"]/../NetId").InnerText;
string name = xmlDocument.SelectSingleNode("//TreeItem/RoutePrj/TargetList/Target/IpAddr[text()=\"" + ipAddress + "\"]/../Name").InnerText;

Code-Ausschnitt (Powershell):

$xmlDocument = [xml]$result
$localAmsNetId = $xmlDocument.TreeItem.RoutePrj.Target

Diese Informationen können dann verwendet werden, um eine Route zu diesem ADS-Gerät hinzuzufügen, wie dies in einem separaten Artikel beschrieben ist.

Direkte Broadcast-Suche

Erfordert mindestens TwinCAT 3.1 Build 4020.10 oder höher.

Zur Ausführung einer Broadcast-Suche mit einem gegebenen Hostnamen oder einer IP-Adresse kann die folgende XML-Struktur in ConsumeXml() verwendet werden.

XML – Suche nach Hostnamen:

<TreeItem>
  <RoutePrj>
    <TargetList>
      <Search>CX-12345</Search>
    </TargetList>
  </RoutePrj>
</TreeItem>

XML – Suche nach IP-Adresse:

<TreeItem>
  <RoutePrj>
    <TargetList>
      <Search>172.17.60.153</Search>
    </TargetList>
  </RoutePrj>
</TreeItem>

Ein nachfolgendes ProduceXml() gibt den gefundenen Host wie folgt aus:

XML – Gefundener Host:

<TreeItem>
  <RoutePrj>
    <TargetList>
      <Target>
        <Name>CX-12345</Name>
        <NetId>172.17.60.153.1.1</NetId>
        <IpAddr>172.17.60.153</IpAddr>
        <Version>3.1.4020</Version>
        <OS>Windows 7</OS>
      </Target>
    </TargetList>
  </RoutePrj>
</TreeItem>