Nach Geräten und Boxen suchen

Bei der Erstellung einer neuen Konfiguration ist es häufig notwendig, die TwinCAT XAE-Konfiguration der tatsächlich verfügbaren Hardware anzupassen. Eine Möglichkeit, dies zu tun, besteht darin eine völlig neue TwinCAT XAE-Konfiguration zu starten und dann die folgenden Schritte durchzuführen:

Ablauf

Die Vorgehensweise für die Erstellung der ITcSysManager-Schnittstelle (die 'systemManager'-Instanz hier) wird im Kapitel Auf TwinCAT-Konfigurationen zugreifen beschrieben. Diese Schnittstelle verfügt über eine LookupTreeItem-Methode, die einen ITcSmTreeItem Zeiger auf ein, mit seinem Pfadnamen angegebenes Tree Item zurückgibt.

Code-Ausschnitt (C#):

          ITcSysManager3 systemManager = null; 

public void ScanDevicesAndBoxes()
{     
  systemManager.SetTargetNetId("1.2.3.4.5.6");
  ITcSmTreeItem ioDevicesItem = systemManager.LookupTreeItem("TIID");
  string scannedXml = ioDevicesItem.ProduceXml(false);
  XmlDocument xmlDoc = newXmlDocument();     
  xmlDoc.LoadXml(scannedXml);
  XmlNodeList xmlDeviceList = xmlDoc.SelectNodes("TreeItem/DeviceGrpDef/FoundDevices/Device");     
  List<ITcSmTreeItem> devices = newList<ITcSmTreeItem>();
  int deviceCount = 0;
  foreach (XmlNode node in xmlDeviceList)     
  {
    int itemSubType = int.Parse(node.SelectSingleNode("ItemSubType").InnerText);         
    string typeName = node.SelectSingleNode("ItemSubTypeName").InnerText;
    XmlNode xmlAddress = node.SelectSingleNode("AddressInfo");     
    ITcSmTreeItem device = ioDevicesItem.CreateChild(string.Format("Device_{0}",++deviceCount),itemSubType,string.Empty,null);
    string xml = string.Format("<TreeItem><DeviceDef>{0}</DeviceDef></TreeItem>",xmlAddress.OuterXml);
    device.ConsumeXml(xml);
    devices.Add(device);     
  }
  foreach (ITcSmTreeItem device in devices)     
  {
    string xml = "<TreeItem><DeviceDef><ScanBoxes>1</ScanBoxes></DeviceDef></TreeItem>";
    try
    {
      device.ConsumeXml(xml);
    }
    catch (Exception ex)         
    {
      Console.WriteLine("Warning: {0}",ex.Message);
    }
    foreach (ITcSmTreeItem box in device)
    {
      Console.WriteLine(box.Name);
    }
  }
}