Información del producto SIMATIC Automation Tool V3.1 SP4

En el apartado Instrucciones Ejemplos Fundamentos Historial Herramientas
Inicio Atrás Siguiente

Información del producto SIMATIC Automation Tool V3.1 SP4

Este capítulo incluye información sobre los siguientes temas:
  • Funciones de la SIMATIC Automation Tool
  • Problemas conocidos


Funciones de la SIMATIC Automation Tool

Novedades de la versión V3.1 SP4

Funciones de la SIMATIC Automation Tool

SIMATIC Automation Tool se utiliza para el mantenimiento de redes y la puesta en marcha de dispositivos de red.

SIMATIC Automation Tool proporciona estas funciones:

  • Escanear la red y crear una tabla que represente los dispositivos accesibles en la red

  • Activar el parpadeo de LED o de pantallas HMI para localizar un dispositivo físicamente

  • Descargar direcciones (IP, de subred, de pasarela) a un dispositivo

  • Descargar el nombre PROFINET (nombre de estación) a un dispositivo

  • Poner una CPU en estado RUN o STOP

  • Ajustar la hora de una CPU a la hora actual de la programadora

  • Descargar un programa a una CPU o a un dispositivo HMI

  • Cargar, agregar o sustituir datos de recetas de una CPU

  • Cargar o borrar datos de registros de una CPU

  • Realizar copias de seguridad y restaurar datos a o desde un archivo de copia de seguridad para CPU y dispositivo HMI

  • Recuperar datos de servicio de una CPU

  • Leer el búfer de diagnóstico de una CPU

  • Realizar un borrado total de la CPU

  • Restablecer la configuración de fábrica de la CPU

  • Restablecer los parámetros de comunicación

  • Actualizar el firmware de dispositivos

  • Exportación de diagnósticos de dispositivos

  • Exportación de la información de dispositivos

  • Exportación de datos de PC

Encontrará información detallada sobre el uso del producto en la guía de usuario.

Novedades de la versión V3.1 SP4

La versión 3.1 SP4 de SIMATIC Automation Tool incluye el soporte de dispositivos y versiones adicionales como se indica en el catálogo de dispositivos.


Problemas conocidos

Problemas conocidos

Este capítulo incluye información sobre los siguientes temas:
  • La operación de cambio de dirección IP falla en dispositivos ET 200
  • Programa de ejemplo para el método DeleteDataLog de la API
  • Programa de ejemplo para el método DeleteRecipe de la API
  • Programa de ejemplo para el método UploadDataLog de la API
  • Programa de ejemplo para el método UploadRecipe de la API
  • Programa de ejemplo para el método DownloadRecipe de la API


La operación de cambio de dirección IP falla en dispositivos ET 200

Causa Solución

La operación de cambio de dirección IP falla en dispositivos ET 200

Causa

Se ha llevado a cabo una operación de cambio de nombre PROFINET antes de la operación de cambio de dirección IP.

Solución

Proceda del siguiente modo:

  1. Restablezca la configuración de fábrica del dispositivo.

  2. Ajuste la dirección IP.

  3. Ajuste el nombre PROFINET.


Programa de ejemplo para el método DeleteDataLog de la API

Programa de ejemplo para el método DeleteDataLog de la API

Al ejemplo de código para el método DeleteDataLog de la API en la guía de usuario le falta el código para actualizar el estado después de haber establecido la contraseña de la CPU.

El siguiente ejemplo de código corregido utiliza la propiedad DataLogFolder para iterar todos los registros en la tarjeta de memoria de la CPU y borrar cada registro:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        El método devuelve una lista de cadenas.
//
        Cada cadena de la lista representa una
// interfaz de red disponible.
//
        La lista puede iterarse utilizando la notación de array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}
retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        La acción se ha ejecutado correctamente. Continuar con las operaciones.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        La acción SetCurrentNetworkInterface ha fallado.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        La acción QueryNetworkInterfaceCards ha fallado.

           //
        Continuar con las operaciones.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        La acción SetPassword ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        La acción RefreshStatus ha fallado.
//
        Continuar con el próximo dispositivo
        .
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Comprobar que los registros están disponibles en la tarjeta de memoria
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Buscar todos los archivos de registros
//------------------------------------------
foreach (IRemoteFile datalog in
devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Borrar el registro
//------------------------------------------
retVal = devAsCpu.DeleteDataLog(datalog.Name);
if (retVal.Failed)
{
//-----------------------------------------
//
        La acción DeleteDataLog ha fallado.
//
         Continuar con las operaciones.
//-----------------------------------------
continue;
}
}
}
}
}
}
}


Programa de ejemplo para el método DeleteRecipe de la API

Programa de ejemplo para el método DeleteRecipe de la API

Al ejemplo de código para el método DeleteRecipe de la API en la guía de usuario le falta el código para actualizar el estado después de haber establecido la contraseña de la CPU.

El siguiente ejemplo de código corregido utiliza la propiedad RecipeFolder para iterar todas las recetas en la tarjeta de memoria de la CPU y borrar cada receta:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        El método devuelve una lista de cadenas.
//
         Cada cadena de la lista representa una
//
         interfaz de red disponible.
//
         La lista puede iterarse utilizando la notación de array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        La acción se ha ejecutado correctamente. Continuar con las operaciones.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        La acción SetCurrentNetworkInterface ha fallado.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        La acción QueryNetworkInterfaceCards ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        La acción SetPassword ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        La acción RefreshStatus ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Comprobar que esas recetas están disponibles en la tarjeta de memoria
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Buscar todas las recetas
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Borrar la receta.
//------------------------------------------
retVal = devAsCpu.DeleteRecipe(recipe.Name);
if (retVal.Failed)
{
//-------------------------------------------
//
        La acción DeleteRecipe ha fallado.
//
        Continuar con las operaciones.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Programa de ejemplo para el método UploadDataLog de la API

Programa de ejemplo para el método UploadDataLog de la API

Al ejemplo de código para el método UploadDataLog de la API en la guía de usuario le falta el código para actualizar el estado después de haber establecido la contraseña de la CPU.

El siguiente ejemplo de código corregido utiliza la propiedad DataLogFolder para iterar todos los registros en la tarjeta de memoria de la CPU y cargar una copia de cada registro en la carpeta C:\MyDataLogs:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        El método devuelve una lista de cadenas.
//
        Cada cadena de la lista representa una
//
        interfaz de red disponible.
//
        La lista puede iterarse utilizando la notación de array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        La acción se ha ejecutado correctamente. Continuar con las operaciones.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        La acción SetCurrentNetworkInterface ha fallado.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        La acción QueryNetworkInterfaceCards ha fallado.
//
         Continuar con las operaciones.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        La acción SetPassword ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        La acción RefreshStatus ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Comprobar que hay registros disponibles en la tarjeta de memoria
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Buscar todos los archivos de registros
//------------------------------------------
foreach (IRemoteFile datalog in devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Cargar una copia de cada registro
//------------------------------------------
retVal = devAsCpu.UploadDataLog(datalog.Name, @"C:\MyDataLogs");
if (retVal.Failed)
{
//-------------------------------------------
//
        La acción UploadDataLog ha fallado.
//
        Continuar con las operaciones.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Programa de ejemplo para el método UploadRecipe de la API

Programa de ejemplo para el método UploadRecipe de la API

Al ejemplo de código para el método UploadRecipe de la API en la guía de usuario le falta el código para actualizar el estado después de haber establecido la contraseña de la CPU.

El siguiente ejemplo de código actualizado utiliza la propiedad RecipeFolder para iterar todas las recetas en la tarjeta de memoria de la CPU y cargar una copia de cada receta en la carpeta C:\MyRecipes:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        El método devuelve una lista de cadenas.
//
        Cada cadena de la lista representa
//
        una interfaz de red disponible.
//
        La lista puede iterarse utilizando la notación de array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        La acción se ha ejecutado correctamente. Continuar con las operaciones.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        La acción SetCurrentNetworkInterface ha fallado.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        La acción QueryNetworkInterfaceCards ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        La acción SetPassword ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        La acción RefreshStatus ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteRecipesAllowed)
{
//------------------------------------------
//
        Comprobar que esas recetas están disponibles en la tarjeta de memoria.
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Buscar todos los archivos de receta
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Cargar una copia de cada receta.
//------------------------------------------
retVal = devAsCpu.UploadRecipe(recipe.Name, @"C:\MyRecipes");
if (retVal.Failed)
{
//-------------------------------------------
//
        La acción UploadRecipe ha fallado.
//
        Continuar con las operaciones.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Programa de ejemplo para el método DownloadRecipe de la API

Programa de ejemplo para el método DownloadRecipe de la API

Al ejemplo de código para el método DownloadRecipe de la API en la guía de usuario le falta el código para actualizar el estado después de haber establecido la contraseña de la CPU.

El siguiente ejemplo de código actualizado muestra cómo se escribe una receta en la tarjeta de memoria de la CPU:

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        El método devuelve una lista de cadenas.
//
        Cada cadena de la lista representa
//
        una interfaz de red disponible.
//
        La lista puede iterarse utilizando la notación de array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        La acción se ha ejecutado correctamente. Continuar con las operaciones.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        La acción SetCurrentNetworkInterface ha fallado.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        La acción QueryNetworkInterfaceCards ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        La acción SetPassword ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}
}

                  retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        La acción RefreshStatus ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}

                  IRemoteFolder recipes = devAsCpu.RecipeFolder;
recipes.Selected = true;
retVal = recipes.SetRemoteFile(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        La acción SetRemoteFile ha fallado.
// Continuar con las operaciones
        .
//---------------------------------------------------
continue;
}

                  retVal = devAsCpu.DownloadRecipe(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        La acción DownloadRecipe ha fallado.
//
        Continuar con las operaciones.
//---------------------------------------------------
continue;
}
}
}
}