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:
- Erstellen einer neuen TwinCAT XAE-Konfiguration
- Festlegen der Adresse des Zielsystems
- Scannen der verfügbaren Geräte
- Hinzufügen und Parametrisierung der zu verwendenden Geräte
- Scannen und Einfügen von Boxen für jedes Gerät
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);
}
}
}