Information produit SIMATIC Automation Tool V3.1 SP4

Au chapitre Instructions Exemples Notions élémentaires Historique Outils
Démarrer Précédent Suivant

Information produit SIMATIC Automation Tool V3.1 SP4

Ce chapitre contient des informations sur les sujets suivants :
  • Fonctions de SIMATIC Automation Tool
  • Problèmes connus


Fonctions de SIMATIC Automation Tool

Nouveautés dans V3.1 SP4

Fonctions de SIMATIC Automation Tool

Vous utilisez SIMATIC Automation Tool pour la maintenance du réseau et la mise en service des constituants de réseau.

SIMATIC Automation Tool offre les fonctionnalités suivantes :

  • Analyse du réseau et création d'une table recensant les appareils accessibles sur le réseau

  • Clignotement des LED ou des vues IHM permettant de localiser un appareil

  • Chargement des adresses (IP, sous-réseau, passerelle) dans un appareil

  • Chargement du nom PROFINET (nom de station) dans un appareil

  • Commutation en mode RUN ou STOP d'une CPU

  • Réglage de l'heure d'une CPU sur celle de votre console de programmation

  • Chargement d'un programme sur une CPU ou un pupitre IHM

  • Chargement, ajout ou suppression de données de recette d'une CPU

  • Chargement ou suppression de données d'un Data log d'une CPU

  • Sauvegarde/restauration de données dans/depuis un fichier de sauvegarde pour une CPU ou un pupitre IHM

  • Récupération des données de maintenance d'une CPU

  • Lecture du tampon de diagnostic d'une CPU

  • Effacement général d'une CPU

  • Réinitialisation de la CPU aux paramètres d'usine

  • Réinitialisation des paramètres de communication

  • Mise à jour du firmware de l'appareil

  • Exportation des diagnostics de l'appareil

  • Exportation des informations de l'appareil

  • Exportation des données PC

Voir le guide utilisateur pour plus de détails sur l'utilisation du produit.

Nouveautés dans V3.1 SP4

La version V3.1 SP4 du SIMATIC Automation Tool inclut la prise en charge d'appareils et versions supplémentaires comme décrit dans le catalogue des appareils.


Problèmes connus

Problèmes connus

Ce chapitre contient des informations sur les sujets suivants :
  • Échec du changement d'adresse IP sur les appareils ET 200
  • Programme exemple pour la méthode API DeleteDataLog
  • Programme exemple pour la méthode API DeleteRecipe
  • Programme exemple pour la méthode API UploadDataLog
  • Programme exemple pour la méthode API UploadRecipe
  • Programme exemple pour la méthode API DownloadRecipe


Échec du changement d'adresse IP sur les appareils ET 200

Cause Solution

Échec du changement d'adresse IP sur les appareils ET 200

Cause

Un changement de nom PROFINET a été effectué avant le changement d'adresse IP.

Solution

Procédez comme suit :

  1. Restaurer les paramètres d'usine de l'appareil.

  2. Réglez l'adresse IP.

  3. Définissez le nom PROFINET.


Programme exemple pour la méthode API DeleteDataLog

Programme exemple pour la méthode API DeleteDataLog

L'exemple de code pour la méthode API DeleteDataLog dans le guide utilisateur ne possède pas le code pour actualiser l'état après la définition du mot de passe CPU.

L'exemple de code corrigé suivant utilise la propriété DataLogFolder pour itérer tous les Data logs sur la carte mémoire de la CPU et supprimer chaque Data log :

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Cette méthode retourne une liste de chaines de caractères.
//
        Chaque chaîne de caractères de la liste représente une
// interface réseau disponible.
//
        La liste peut être itérée à l'aide d'une notation array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}
retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        L'action a été terminée avec succès. Poursuivre les opérations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        L'action SetCurrentNetworkInterface a échoué.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        L'action QueryNetworkInterfaceCards a échoué.

           //
        Poursuivre les opérations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        L'action SetPassword a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        L'action RefreshStatus a échoué.
//
        Continue vers l'appareil suivant
        .
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Vérifier que la carte mémoire contient des Data logs
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Rechercher tous les fichiers Data log
//------------------------------------------
foreach (IRemoteFile datalog in
devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Supprimer le Data log
//------------------------------------------
retVal = devAsCpu.DeleteDataLog(datalog.Name);
if (retVal.Failed)
{
//-----------------------------------------
//
        L'action DeleteDataLog a échoué.
// Poursuivre les opérations.
//-----------------------------------------
continue;
}
}
}
}
}
}
}


Programme exemple pour la méthode API DeleteRecipe

Programme exemple pour la méthode API DeleteRecipe

L'exemple de code pour la méthode API DeleteRecipe dans le guide utilisateur ne possède pas le code pour actualiser l'état après la définition du mot de passe CPU.

L'exemple de code corrigé suivant utilise la propriété RecipeFolder pour itérer toutes les recettes sur la carte mémoire de la CPU et supprimer chaque recette :

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Cette méthode retourne une liste de chaines de caractères.
//
         Chaque chaîne de caractères de la liste représente une
//
         interface réseau disponible.
//
         La liste peut être itérée à l'aide d'une notation array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        L'action a été terminée avec succès. Poursuivre les opérations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        L'action SetCurrentNetworkInterface a échoué.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        L'action QueryNetworkInterfaceCards a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        L'action SetPassword a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        L'action RefreshStatus a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Vérifiez que les recettes sont disponibles sur la carte mémoire
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Rechercher toutes les recettes
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Supprimez les recettes.
//------------------------------------------
retVal = devAsCpu.DeleteRecipe(recipe.Name);
if (retVal.Failed)
{
//-------------------------------------------
//
        L'action DeleteRecipe a échoué.
//
        Poursuivre les opérations.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Programme exemple pour la méthode API UploadDataLog

Programme exemple pour la méthode API UploadDataLog

L'exemple de code pour la méthode API UploadDataLog dans le guide utilisateur ne possède pas le code pour actualiser l'état après la définition du mot de passe CPU.

L'exemple de code corrigé suivant utilise la propriété DataLogFolder pour itérer tous les Data logs sur la carte mémoire de la CPU et charger une copie de chaque Data log dans le dossier C:\MyDataLogs :

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Cette méthode retourne une liste de chaines de caractères.
//
        Chaque chaîne de caractères de la liste représente une
//
        interface réseau disponible.
//
        La liste peut être itérée à l'aide d'une notation array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        L'action a été terminée avec succès. Poursuivre les opérations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        L'action SetCurrentNetworkInterface a échoué.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        L'action QueryNetworkInterfaceCards a échoué.
//
         Poursuivre les opérations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        L'action SetPassword a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        L'action RefreshStatus a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteDataLogsAllowed)
{
//------------------------------------------
//
        Vérifier que la carte mémoire contient les Data logs
//------------------------------------------
if (devAsCpu.DataLogFolder.Exists)
{
//------------------------------------------
//
        Rechercher tous les fichiers Data log
//------------------------------------------
foreach (IRemoteFile datalog in devAsCpu.DataLogFolder.Files)
{
datalog.Selected = true;
//------------------------------------------
//
        Charger une copie de chaque Data log
//------------------------------------------
retVal = devAsCpu.UploadDataLog(datalog.Name, @"C:\MyDataLogs");
if (retVal.Failed)
{
//-------------------------------------------
//
        L'action UploadDataLog a échoué.
//
        Poursuivre les opérations.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Programme exemple pour la méthode API UploadRecipe

Programme exemple pour la méthode API UploadRecipe

L'exemple de code pour la méthode API UploadRecipe dans le guide utilisateur ne possède pas le code pour actualiser l'état après la définition du mot de passe CPU.

L'exemple de code mis à jour suivant utilise la propriété RecipeFolder pour itérer toutes les recettes sur la carte mémoire de la CPU et charger une copie de chaque recette est chargée dans le dossier C:\MyRecipes :

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Cette méthode retourne une liste de chaines de caractères.
//
        Chaque chaîne de caractères de la liste représente
//
        une interface réseau disponible.
//
        La liste peut être itérée à l'aide d'une notation array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        L'action a été terminée avec succès. Poursuivre les opérations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        L'action SetCurrentNetworkInterface a échoué.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        L'action QueryNetworkInterfaceCards a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        L'action SetPassword a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}
}

                 retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        L'action RefreshStatus a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}

                 if (devAsCpu.RemoteRecipesAllowed)
{
//------------------------------------------
//
        Vérifiez que la carte mémoire contient des recettes
//------------------------------------------
if (devAsCpu.RecipeFolder.Exists)
{
//------------------------------------------
//
        Rechercher tous les fichiers de recette
//------------------------------------------
foreach (IRemoteFile recipe in devAsCpu.RecipeFolder.Files)
{
recipe.Selected = true;
//------------------------------------------
//
        Charger une copie de chaque recette.
//------------------------------------------
retVal = devAsCpu.UploadRecipe(recipe.Name, @"C:\MyRecipes");
if (retVal.Failed)
{
//-------------------------------------------
//
        L'action UploadRecipe a échoué.
//
        Poursuivre les opérations.
//-------------------------------------------
continue;
}
}
}
}
}
}
}


Programme exemple pour la méthode API DownloadRecipe

Programme exemple pour la méthode API DownloadRecipe

L'exemple de code pour la méthode API DownloadRecipe dans le guide utilisateur ne possède pas le code pour actualiser l'état après la définition du mot de passe CPU.

L'exemple de code mis à jour suivant montre le mode d'écriture d'une recette sur la carte mémoire de la CPU :

Network myNetwork = new Network();

        List<String> interfaces = new List<String>();
Result retVal = myNetwork.QueryNetworkInterfaceCards(out interfaces);
if (retVal.Succeeded)
{
//-----------------------------------------------------
//
        Cette méthode retourne une liste de chaines de caractères.
//
        Chaque chaîne de caractères de la liste représente
//
        une interface réseau disponible.
//
        La liste peut être itérée à l'aide d'une notation array.
//-----------------------------------------------------
for (Int32 index1 = 0; index1 < interfaces.Count; index1++)
{
String strInterfaceName = interfaces[index1];
}

           retVal = myNetwork.SetCurrentNetworkInterface(interfaces[3]);
if (retVal.Succeeded)
{
//---------------------------------------------------
//
        L'action a été terminée avec succès. Poursuivre les opérations.
//---------------------------------------------------
}
else
{
//---------------------------------------------------
//
        L'action SetCurrentNetworkInterface a échoué.
//---------------------------------------------------
return;
}

           string currentInterface = myNetwork.CurrentNetworkInterface;
}
else
{
//---------------------------------------------------
//
        L'action QueryNetworkInterfaceCards a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
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)
{
//---------------------------------------------------
//
        L'action SetPassword a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}
}

                  retVal = devAsCpu.RefreshStatus();
if (retVal.Failed)
{
//---------------------------------------------------
//
        L'action RefreshStatus a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}

                  IRemoteFolder recipes = devAsCpu.RecipeFolder;
recipes.Selected = true;
retVal = recipes.SetRemoteFile(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        L'action SetRemoteFile a échoué.
// Poursuivre les opérations
        .
//---------------------------------------------------
continue;
}

                  retVal = devAsCpu.DownloadRecipe(rcpFile);
if (retVal.Failed)
{
//---------------------------------------------------
//
        L'action DownloadRecipe a échoué.
//
        Poursuivre les opérations.
//---------------------------------------------------
continue;
}
}
}
}