Targets per Broadcast-Suche finden
Das Netzwerk lässt sich über ConsumeXml auf dem Routen-Knoten nach TwinCAT-Zielsystemen durchsuchen, entweder allgemein für alle Geräte im Netz oder gezielt per IP-Adresse oder Hostname. Das Ergebnis wird anschließend per ProduceXml abgerufen.
Voraussetzungen
- Eine TwinCAT-Solution ist geöffnet.
- Das Zielsystem ist im Netzwerk erreichbar.
Allgemeine Broadcast-Suche für alle Geräte
C#:
string xmlString = "<TreeItem><RoutePrj><TargetList><BroadcastSearch>true</BroadcastSearch></TargetList></RoutePrj></TreeItem>";
ITcSmTreeItem routes = sysMan.LookupTreeItem("TIRR");
routes.ConsumeXml(xmlString);
string result = routes.ProduceXml();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(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;PowerShell:
$xmlString = "<TreeItem><RoutePrj><TargetList><BroadcastSearch>true</BroadcastSearch></TargetList></RoutePrj></TreeItem>"
$routes = $systemManager.LookupTreeItem("TIRR")
$routes.ConsumeXml($xmlString)
$result = $routes.ProduceXml()
$xmlDocument = [xml]$result
$localAmsNetId = $xmlDocument.TreeItem.RoutePrj.TargetDie Variable result enthält eine XML-Darstellung aller gefundenen ADS-Geräte im Netzwerk. Aus dieser Liste ist ein bestimmtes Gerät auswählbar:
Direkte Broadcast-Suche ab TwinCAT 3.1 Build 4020.10
C# Beispiel:
ITcSmTreeItem routeNode = sysManager.LookupTreeItem("TIRR");
// Search by IP address
string searchXml = @"<TreeItem>
<RoutePrj>
<TargetList>
<Search>192.168.1.100</Search>
</TargetList>
</RoutePrj>
</TreeItem>";
routeNode.ConsumeXml(searchXml);
string resultXml = routeNode.ProduceXml();
// Parse result
var doc = new System.Xml.XmlDocument();
doc.LoadXml(resultXml);
var netIdNode = doc.SelectSingleNode("//Target/NetId");
string amsNetId = netIdNode?.InnerText;PowerShell Beispiel:
$routeNode = $sysManager.LookupTreeItem("TIRR")
$searchXml = "<TreeItem><RoutePrj><TargetList><Search>CX-12345</Search></TargetList></RoutePrj></TreeItem>"
$routeNode.ConsumeXml($searchXml)
[xml]$result = $routeNode.ProduceXml()
$target = $result.TreeItem.RoutePrj.TargetList.Target
Write-Host "Name: $($target.Name)"
Write-Host "NetId: $($target.NetId)"
Write-Host "IP: $($target.IpAddr)"XML-Struktur der Broadcast-Suche:
<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.4026</Version>
<OS>Windows (10.0)</OS>
</Target>
</TargetList>
</RoutePrj>
</TreeItem>