Emergency Scan auf ein EtherCAT-Gerät ausführen
Ein Emergency Scan sendet eine konfigurierbare Anzahl von EtherCAT-Testframes über eine Verbindung und wertet die Rückantworten aus. Das Ergebnis gibt Aufschluss über die Verbindungsqualität. Verlorene Frames oder erhöhte Fehlerraten deuten auf Verkabelungsprobleme oder fehlerhafte Stecker hin. Der Scan wird per ConsumeXml gestartet und das Ergebnis per ProduceXml ausgelesen.
Voraussetzungen
- Eine TwinCAT-Solution ist geöffnet und eine DTE-Verbindung ist aktiv.
ITcSysManagerwurde als COM-Objekt in einem STA-Thread initialisiert.- Ein EtherCAT-Master ist in der I/O-Konfiguration vorhanden.
- TwinCAT ist im Config- oder Run-Modus aktiv.
C# Beispiel
Soll der Scan auf einem entfernten Zielsystem laufen, wird zuerst die Target-NetId über SetTargetNetId gesetzt. Diese Methode ist ab ITcSysManager10 verfügbar, weshalb das Interface per Cast bezogen wird. Bei lokalem Betrieb entfällt dieser Schritt. Der Scan selbst wird über ConsumeXml am EtherCAT-Gerät gestartet und das Ergebnis anschließend mit ProduceXml ausgelesen.
// Switch to remote target (leave empty for local)
ITcSysManager10 sysManager10 = sysManager as ITcSysManager10;
sysManager10.SetTargetNetId("5.56.2.150.1.1");
ITcSmTreeItem ecDevice = sysManager.LookupTreeItem(@"TIID^Device 1 (EtherCAT)");
// Start emergency scan: 100 test frames
string scanXml = @"<TreeItem>
<EtherCAT>
<EmergencyScan>
<TestFrames>100</TestFrames>
</EmergencyScan>
</EtherCAT>
</TreeItem>";
ecDevice.ConsumeXml(scanXml);
// Read scan result
string resultXml = ecDevice.ProduceXml();
PowerShell Beispiel
# Switch to remote target
$sysManager10 = $sysManager -as [TwinCAT.Xae.Interface.ITcSysManager10]
$sysManager10.SetTargetNetId("5.56.2.150.1.1")
$ecDevice = $sysManager.LookupTreeItem("TIID^Device 1 (EtherCAT)")
# Start emergency scan: 100 test frames
$scanXml = @"
<TreeItem>
<EtherCAT>
<EmergencyScan>
<TestFrames>100</TestFrames>
</EmergencyScan>
</EtherCAT>
</TreeItem>
"@
$ecDevice.ConsumeXml($scanXml)
# Read scan result
$resultXml = $ecDevice.ProduceXml()
![]() |
|
