SIMATIC Automation Tool V3.1 SP4 – Produktinformationen

Im Abschnitt Anleitungen Beispiele Grundlagen Verlauf Extras
Start Zurück Weiter

SIMATIC Automation Tool V3.1 SP4 – Produktinformationen

Dieses Kapitel enthält Informationen zu folgenden Themen:
  • Funktionen von SIMATIC Automation Tool
  • Bekannte Probleme


Funktionen von SIMATIC Automation Tool

Neu in V3.1 SP4

Funktionen von SIMATIC Automation Tool

Sie nutzen das SIMATIC Automation Tool zur Netzwerkwartung und zur Inbetriebnahme von Netzwerkgeräten.

Das SIMATIC Automation Tool bietet die folgenden Funktionen:

  • Durchsuchen des Netzwerks und Erstellen einer Tabelle, die die erreichbaren Geräte im Netzwerk abbildet

  • Blinken lassen von Geräte-LEDs oder HMI-Displays, um ein Gerät zu lokalisieren

  • Laden von Adressen (IP, Subnetz, Gateway) in ein Gerät

  • Laden des PROFINET-Namens (Stationsname) in ein Gerät

  • Versetzen einer CPU in den Betriebszustand RUN oder STOP

  • Einstellen der Zeit in einer CPU auf die aktuelle Zeit Ihres Programmiergeräts

  • Laden eines Programms in eine CPU oder ein HMI-Gerät

  • Laden, Hinzufügen oder Löschen von Rezeptdaten aus einer CPU

  • Laden aus CPU oder Löschen von Datenprotokolldaten von einer CPU

  • Sichern/Wiederherstellen von Daten in/aus einer Sicherungsdatei für CPUs und HMI-Geräte

  • Abrufen von Servicedaten aus einer CPU

  • Lesen des Diagnosepuffers einer CPU

  • Urlöschen einer CPU

  • Rücksetzen einer CPU auf Werkseinstellungen

  • Rücksetzen von Kommunikationsparametern

  • Aktualisieren der Geräte-Firmware

  • Export der Gerätediagnose

  • Exportieren von Geräteinformationen

  • Export von PC-Daten

Im Benutzerhandbuch finden Sie Einzelheiten zur Bedienung des Produkts.

Neu in V3.1 SP4

Die Version 3.1 SP4 des SIMATIC Automation Tool unterstützt weitere Geräte und Versionen wie im Gerätekatalog aufgeführt.


Bekannte Probleme

Bekannte Probleme

Dieses Kapitel enthält Informationen zu folgenden Themen:
  • Die Änderung der IP-Adresse schlägt auf ET 200-Geräten fehl
  • Beispielprogramm für die API-Methode DeleteDataLog
  • Beispielprogramm für die API-Methode DeleteRecipe
  • Beispielprogramm für die API-Methode UploadDataLog
  • Beispielprogramm für die API-Methode UploadRecipe
  • Beispielprogramm für die API-Methode DownloadRecipe


Die Änderung der IP-Adresse schlägt auf ET 200-Geräten fehl

Ursache Abhilfe

Die Änderung der IP-Adresse schlägt auf ET 200-Geräten fehl

Ursache

Die Änderung des PROFINET-Namens wurde vorgenommen, bevor die IP-Adresse geändert wurde.

Abhilfe

Gehen Sie wie folgt vor:

  1. Setzen Sie das Gerät auf die Werkseinstellungen zurück.

  2. Legen Sie die IP-Adresse fest.

  3. Legen Sie den PROFINET-Namen fest.


Beispielprogramm für die API-Methode DeleteDataLog

Beispielprogramm für die API-Methode DeleteDataLog

Im Codebeispiel des Benutzerhandbuchs für die API-Methode DeleteDataLog fehlt Code, mit dem nach dem Festlegen des CPU-Passworts der Status aktualisiert wird.

Im folgenden korrigierten Codebeispiel werden mithilfe der Eigenschaft DataLogFolder alle Datenprotokolle auf der Memory Card der CPU iteriert und die einzelnen Datenprotokolle gelöscht:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Die Methode gibt eine Liste von Strings aus.
//
        Jede Zeichenkette in der Liste steht für eine
// verfügbare Netzwerkschnittstelle.
//
        Die Liste kann in Array-Notation iteriert werden.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}
retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        Die Aktion war erfolgreich. Mit den Vorgängen fortfahren.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        Die Aktion SetCurrentNetworkInterface ist fehlgeschlagen.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        Die Aktion QueryNetworkInterfaceCards ist fehlgeschlagen.

           //
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
return;
}

IProfinetDeviceCollection devices;

        IScanErrorCollection scanResult = myNetwork.ScanNetworkDevices(out devices);
if (scanResult.Succeeded)
{
foreach (IProfinetDevice dev in devices)
{
ICPU devAsCpu = dev as ICPU;
if (devAsCpu != null)
{
if (devAsCpu.Protected)
{
retVal = devAsCpu.SetPassword(new EncryptedString("Password"));
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion SetPassword ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion RefreshStatus ist fehlgeschlagen.
//
        Weiter mit nächstem Gerät
        .
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Prüfen, ob Datenprotokolle auf der Memory Card verfügbar sind
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Nach allen Datenprotokolldateien suchen
//------------------------------------------
foreach (IRemoteFile datalog in
devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Das Datenprotokoll löschen
//------------------------------------------
retVal = devAsCpu.DeleteDataLog(datalog.Name);
if (retVal.Failed)
{
//-----------------------------------------
//
        Die Aktion DeleteDataLog ist fehlgeschlagen.
//
         Mit den Vorgängen fortfahren.
//-----------------------------------------
continue;
}
}
}
}
}
}
}


Beispielprogramm für die API-Methode DeleteRecipe

Beispielprogramm für die API-Methode DeleteRecipe

Im Codebeispiel des Benutzerhandbuchs für die API-Methode DeleteRecipe im Benutzerhandbuch fehlt Code, mit dem nach dem Festlegen des CPU-Passworts der Status aktualisiert wird.

Im folgenden korrigierten Codebeispiel werden mithilfe der Eigenschaft RecipeFolder alle Rezeptdateien auf der Memory Card der CPU iteriert und die einzelnen Rezeptdateien gelöscht:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Die Methode gibt eine Liste von Strings aus.
//
         Jede Zeichenkette in der Liste steht für eine
//
         verfügbare Netzwerkschnittstelle.
//
         Die Liste kann in Array-Notation iteriert werden.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        Die Aktion war erfolgreich. Mit den Vorgängen fortfahren.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        Die Aktion SetCurrentNetworkInterface ist fehlgeschlagen.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        Die Aktion QueryNetworkInterfaceCards ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
return;
}

IProfinetDeviceCollection devices;

        IScanErrorCollection scanResult = myNetwork.ScanNetworkDevices(out devices);
if (scanResult.Succeeded)
{
foreach (IProfinetDevice dev in devices)
{
ICPU devAsCpu = dev as ICPU;
if (devAsCpu != null)
{
if (devAsCpu.Protected)
{
retVal = devAsCpu.SetPassword(new EncryptedString("Password"));
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion SetPassword ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion RefreshStatus ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Prüfen, ob Rezepte auf der Memory Card verfügbar sind
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Nach allen Rezepten suchen
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Das Rezept löschen.
//------------------------------------------
retVal = devAsCpu.DeleteRecipe(recipe.Name);
if (retVal.Failed)
{
//-------------------------------------------
//
        Die Aktion DeleteRecipe ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Beispielprogramm für die API-Methode UploadDataLog

Beispielprogramm für die API-Methode UploadDataLog

Im Codebeispiel des Benutzerhandbuchs für die API-Methode UploadDataLog im Benutzerhandbuch fehlt Code, mit dem nach dem Festlegen des CPU-Passworts der Status aktualisiert wird.

Im folgenden korrigierten Codebeispiel werden mithilfe der Eigenschaft DataLogFolder alle Datenprotokolle auf der Memory Card der CPU iteriert. Von den einzelnen Datenprotokollen wird jeweils eine Kopie im Ordner C:\MyDataLogs gespeichert:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Die Methode gibt eine Liste von Strings aus.
//
        Jede Zeichenkette in der Liste steht für eine
//
        verfügbare Netzwerkschnittstelle.
//
        Die Liste kann in Array-Notation iteriert werden.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        Die Aktion war erfolgreich. Mit den Vorgängen fortfahren.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        Die Aktion SetCurrentNetworkInterface ist fehlgeschlagen.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        Die Aktion QueryNetworkInterfaceCards ist fehlgeschlagen.
//
         Mit den Vorgängen fortfahren.
//---------------------------------------------------
return;
}

IProfinetDeviceCollection scannedDevices;

        IScanErrorCollection scanResult = myNetwork.ScanNetworkDevices(out scannedDevices);
if (scanResult.Succeeded)
{
foreach (IProfinetDevice dev in scannedDevices)
{
ICPU devAsCpu = dev as ICPU;
if (devAsCpu != null)
{
if (devAsCpu.Protected)
{
retVal = devAsCpu.SetPassword(new EncryptedString("Password"));
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion SetPassword ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion RefreshStatus ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Prüfen, ob Datenprotokolle auf Memory Card verfügbar sind
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Nach allen Datenprotokolldateien suchen
//------------------------------------------
foreach (IRemoteFile datalog in devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Eine Kopie jedes Datenprotokolls hochladen
//------------------------------------------
retVal = devAsCpu.UploadDataLog(datalog.Name, @"C:\MyDataLogs");
if (retVal.Failed)
{
//-------------------------------------------
//
        Die Aktion UploadDataLog ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Beispielprogramm für die API-Methode UploadRecipe

Beispielprogramm für die API-Methode UploadRecipe

Im Codebeispiel des Benutzerhandbuchs für die API-Methode UploadRecipe im Benutzerhandbuch fehlt Code, mit dem nach dem Festlegen des CPU-Passworts der Status aktualisiert wird.

Im folgenden aktualisierten Codebeispiel werden mithilfe der Eigenschaft RecipeFolder alle Rezepte auf der Memory Card der CPU iteriert. Von den einzelnen Rezepten wird jeweils eine Kopie im Ordner C:\MyRecipes gespeichert:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Die Methode gibt eine Liste von Strings aus.
//
        Jede Zeichenkette in der Liste steht für
//
        eine verfügbare Netzwerkschnittstelle.
//
        Die Liste kann in Array-Notation iteriert werden.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        Die Aktion war erfolgreich. Mit den Vorgängen fortfahren.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        Die Aktion SetCurrentNetworkInterface ist fehlgeschlagen.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        Die Aktion QueryNetworkInterfaceCards ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
return;
}

        IProfinetDeviceCollection devices;
IScanErrorCollection scanResult = myNetwork.ScanNetworkDevices(out devices);
if (scanResult.Succeeded)
{
foreach (IProfinetDevice dev in devices)
{
ICPU devAsCpu = dev as ICPU;
if (devAsCpu != null)
{
if (devAsCpu.Protected)
{
retVal = devAsCpu.SetPassword(new EncryptedString("Password"));
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion SetPassword ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion RefreshStatus ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteRecipesAllowed)
{
//------------------------------------------
//
        Prüfen, ob Rezepte auf der Memory Card verfügbar sind.
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Nach allen Rezeptdateien suchen
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Eine Kopie jedes Rezepts hochladen.
//------------------------------------------
retVal = devAsCpu.UploadRecipe(recipe.Name, @"C:\MyRecipes");
if (retVal.Failed)
{
//-------------------------------------------
//
        Die Aktion UploadRecipe ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Beispielprogramm für die API-Methode DownloadRecipe

Beispielprogramm für die API-Methode DownloadRecipe

Im Codebeispiel des Benutzerhandbuchs für die API-Methode DownloadRecipe im Benutzerhandbuch fehlt Code, mit dem nach dem Festlegen des CPU-Passworts der Status aktualisiert wird.

Das folgende aktualisierte Codebeispiel zeigt, wie ein Rezept in die Memory Card einer CPU geschrieben wird.

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Die Methode gibt eine Liste von Strings aus.
//
        Jede Zeichenkette in der Liste steht für
//
        eine verfügbare Netzwerkschnittstelle.
//
        Die Liste kann in Array-Notation iteriert werden.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        Die Aktion war erfolgreich. Mit den Vorgängen fortfahren.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        Die Aktion SetCurrentNetworkInterface ist fehlgeschlagen.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        Die Aktion QueryNetworkInterfaceCards ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
return;
}

uint targetIPAddress = 0xC0A80001; // 192.168.0.1
string rcpFile = @"C:\NewRecipe.csv";

IProfinetDeviceCollection devices;

IScanErrorCollection scanResult = myNetwork.ScanNetworkDevices(out devices);
if (scanResult.Succeeded)
{
   foreach (IProfinetDevice dev in devices)
   {
      ICPU devAsCpu = dev as ICPU;

      if (devAsCpu == null)
      continue;

              if ((devAsCpu.IP == targetIPAddress) &&
(devAsCpu.RemoteRecipesAllowed))
{
if (devAsCpu.Protected)
{
retVal = devAsCpu.SetPassword(new EncryptedString("Password"));
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion SetPassword ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}
}

                  retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion RefreshStatus ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}

                  IRemoteFolder recipes = devAsCpu.RecipeFolder;
recipes.Selected = true;
retVal = recipes.SetRemoteFile(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion SetRemoteFile ist fehlgeschlagen.
// Mit den Vorgängen fortfahren.
        .
//---------------------------------------------------
continue;
}

                  retVal = devAsCpu.DownloadRecipe(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        Die Aktion DownloadRecipe ist fehlgeschlagen.
//
        Mit den Vorgängen fortfahren.
//---------------------------------------------------
continue;
}
}
}
}