SIMATIC Automation Tool V3.1 SP4 Product information

In section Instructions Examples Basics History Extra
Start Previous Next

SIMATIC Automation Tool V3.1 SP4 Product information

This section contains information on the following topics:
  • SIMATIC Automation Tool features
  • Known problems


SIMATIC Automation Tool features

What’s new in V3.1 SP4

SIMATIC Automation Tool features

You use the SIMATIC Automation Tool for network maintenance and commissioning of network devices.

The SIMATIC Automation Tool provides these features:

  • Scan the network and create a table that maps the accessible devices on the network

  • Flash device LEDs or HMI screens to physically locate a device

  • Download addresses (IP, subnet, gateway) to a device

  • Download PROFINET name (station name) to a device

  • Put a CPU in RUN or STOP mode

  • Set the time in a CPU to the current time in your programming device

  • Download a program to a CPU or HMI device

  • Upload, add, or delete Recipe data from a CPU

  • Upload or delete Data log data from a CPU

  • Backup/Restore data to/from a backup file for CPU and HMI device

  • Retrieve service data from a CPU

  • Read the diagnostic buffer of a CPU

  • Perform a CPU memory reset

  • Reset CPU to factory default values

  • Reset communication parameters

  • Update device firmware

  • Export of device diagnostics

  • Export of device information

  • Export of PC data

See the User Guide for details about product operation.

What’s new in V3.1 SP4

Version 3.1 SP4 of the SIMATIC Automation Tool includes support for additional devices and versions as listed in the Device Catalog.


Known problems

Known problems

This section contains information on the following topics:
  • IP address change operation fails on ET 200 devices
  • Example program for API DeleteDataLog method
  • Example program for API DeleteRecipe method
  • Example program for API UploadDataLog method
  • Example program for API UploadRecipe method
  • Example program for API DownloadRecipe method


IP address change operation fails on ET 200 devices

Cause Remedy

IP address change operation fails on ET 200 devices

Cause

A PROFINET name change operation was performed before an IP address change operation.

Remedy

Follow these steps:

  1. Reset the device to factory defaults.

  2. Set the IP address.

  3. Set the PROFINET name.


Example program for API DeleteDataLog method

Example program for API DeleteDataLog method

The code example for the API DeleteDataLog method in the user guide is missing code to refresh the status after setting the CPU password.

The following corrected code example uses the DataLogFolder property to iterate all data logs on the CPU memory card and delete each data log:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        The method returns a List of strings.
//
        Each string in the list represents an
// available network interface.
//
        The list can be iterated using array notation.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}
retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        The action succeeded. Continue with operations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        The SetCurrentNetworkInterface action failed.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        The QueryNetworkInterfaceCards action failed.

           //
        Continue the operations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        The SetPassword action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        The RefreshStatus action failed.
//
        Continue to next device
        .
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Check that data logs are available on the memory card
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Search for all data log files
//------------------------------------------
foreach (IRemoteFile datalog in
devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Delete the data log
//------------------------------------------
retVal = devAsCpu.DeleteDataLog(datalog.Name);
if (retVal.Failed)
{
//-----------------------------------------
//
        The DeleteDataLog action failed.
//
         Continue the operations.
//-----------------------------------------
continue;
}
}
}
}
}
}
}


Example program for API DeleteRecipe method

Example program for API DeleteRecipe method

The code example for the API DeleteRecipe method in the user guide is missing code to refresh the status after setting the CPU password.

The following corrected code example uses the RecipeFolder property to iterate all recipes on the CPU memory card and delete each recipe:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        The method returns a List of strings.
//
         Each string in the list represents an
//
         available network interface.
//
         The list can be iterated using array notation.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        The action succeeded. Continue with operations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        The SetCurrentNetworkInterface action failed.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        The QueryNetworkInterfaceCards action failed.
//
        Continue the operations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        The SetPassword action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        The RefreshStatus action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Check that recipes are available on the memory card
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Search for all recipes
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Delete the recipe.
//------------------------------------------
retVal = devAsCpu.DeleteRecipe(recipe.Name);
if (retVal.Failed)
{
//-------------------------------------------
//
        The DeleteRecipe action failed.
//
        Continue the operations.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Example program for API UploadDataLog method

Example program for API UploadDataLog method

The code example for the API UploadDataLog method in the user guide is missing code to refresh the status after setting the CPU password.

The following corrected code example uses the DataLogFolder property to iterate all data logs on the CPU memory card and upload a copy of each data log to the folder C:\MyDataLogs:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        The method returns a List of strings.
//
        Each string in the list represents an
//
        available network interface.
//
        The list can be iterated using array notation.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        The action succeeded. Continue with operations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        The SetCurrentNetworkInterface action failed.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        The QueryNetworkInterfaceCards action failed.
//
         Continue the operations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        The SetPassword action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        The RefreshStatus action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Check that data logs are available on the memory card
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Search for all data log files
//------------------------------------------
foreach (IRemoteFile datalog in devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Upload a copy of each data log
//------------------------------------------
retVal = devAsCpu.UploadDataLog(datalog.Name, @"C:\MyDataLogs");
if (retVal.Failed)
{
//-------------------------------------------
//
        The UploadDataLog action failed.
//
        Continue the operations.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Example program for API UploadRecipe method

Example program for API UploadRecipe method

The code example for the API UploadRecipe method in the user guide is missing code to refresh the status after setting the CPU password.

The following updated code example uses the RecipeFolder property to iterate all recipes on the CPU memory card and upload a copy of each recipe is uploaded to the folder C:\MyRecipes:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        The method returns a List of strings.
//
        Each string in the list represents
//
        an available network interface.
//
        The list can be iterated using array notation.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        The action succeeded. Continue with operations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        The SetCurrentNetworkInterface action failed.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        The QueryNetworkInterfaceCards action failed.
//
        Continue the operations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        The SetPassword action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        The RefreshStatus action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteRecipesAllowed)
{
//------------------------------------------
//
        Check that recipes are available on the memory card.
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Search for all recipe files
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Upload a copy of each recipe.
//------------------------------------------
retVal = devAsCpu.UploadRecipe(recipe.Name, @"C:\MyRecipes");
if (retVal.Failed)
{
//-------------------------------------------
//
        The UploadRecipe action failed.
//
        Continue the operations.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Example program for API DownloadRecipe method

Example program for API DownloadRecipe method

The code example for the API DownloadRecipe method in the user guide is missing code to refresh the status after setting the CPU password.

The following updated code example shows how to write a recipe to the CPU memory card:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        The method returns a List of strings.
//
        Each string in the list represents
//
        an available network interface.
//
        The list can be iterated using array notation.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        The action succeeded. Continue with operations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        The SetCurrentNetworkInterface action failed.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        The QueryNetworkInterfaceCards action failed.
//
        Continue the operations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        The SetPassword action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}
}

                  retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        The RefreshStatus action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}

                  IRemoteFolder recipes = devAsCpu.RecipeFolder;
recipes.Selected = true;
retVal = recipes.SetRemoteFile(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        The SetRemoteFile action failed.
// Continue the operations
        .
//---------------------------------------------------
continue;
}

                  retVal = devAsCpu.DownloadRecipe(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        The DownloadRecipe action failed.
//
        Continue the operations.
//---------------------------------------------------
continue;
}
}
}
}