simens langage:STEP 7

Instructions:

STEP 7 propose la fonction KNOW_HOW_PROTECT pour protéger les programmes. Si vous ouvrez un bloc protégé par cette fonction, vous ne pouvez que visualiser l'interface du bloc (paramètres IN-, OUT- et IN/OUT) et le commentaire du bloc. Le code du programme, les variables temporaires et statiques, les commentaires réseaux ne sont pas affichés. Il n'est pas possible de changer le bloc protégé. ...

Le tableau ci-dessous décrit la procédure à suivre pour implanter la fonction .....



KNOW_HOW_PROTECT dans vos blocs (FBs, FCs et DBs):

No.Procédure
1Ouvrez le bloc de fonction à éditer. Dans l'éditeur du bloc, vous générez le code source sous "Fichier>Générer le code source"
2Dans la boite de dialogue qui s'ouvre, vous renseignez un nom de fichier exemple "Protect_FB".
3La boite de dialogue "Générer code source " s'ouvre. Ici, vous sélectionnez le bloc pour lequel le code source doit être généré. Vous utilisez le bouton "->" pour déplacer ce bloc dans la fenêtre de droite. Validez avec OK pour générer le code source et refermez l'éditeur de bloc.


Fig 01

4Ouvrez la source dans le répertoire "Source" de votre programme S7.
5Insérez une ligne avec la commande "KNOW_HOW_PROTECT" dans la section de déclaration du bloc source sous la ligne "TITRE".


Fig 02

6Sauvegardez et compilez la source STL, sous "Fichier > Enregistrer" et "Fichier > Compiler". le bloc est maintenant protégé.

Le tableau ci-dessous décrit la procédure pour désactiver la fonction KNOW_HOW_PROTECT de vos programmes (FBs, FCs et DBs) :

No.Procédure
1Ouvrez vote code source.
2Enlevez l'entrée "KNOW_HOW_PROTECT" ou placez la en commentaire avec deux slash.
3Sauvegardez et compilez la source STL, sous "Fichier > Enregistrer" et "Fichier > Compiler".
4La protection du bloc est maintenant désactivée.

Trucs et astuces pour l'appel et le paramétrage de SFBs, SFCs et de fonctions standards IECau début

Instructions:
Cette contribution contient quelques trucs et astuces pour l'appel et le paramétrage de SFBs, SFCs et de fonctions standards IEC

  1. Général - Où est-ce que je peux obtenir des informations sur les SFBs, SFCs et fonctions standards IEC?
  2. Comment se fait le paramétrage des entrées "IN1" et "IN2" de la fonction standard IEC FC11 (FIND)?
  3. A quoi faut-il faire attention lors de la configuration du pointeur ANY du type ARRAY ou STRUCT à la sortie "RECORD" des SFC14/15?
  4. Comment peuvent être transférées des plage de données du type de données "STRING" avec le SFC20?
  5. Pourquoi la valeur de retour RET_VAL du SFC20 est différente en fonction de la CPU utilisée?
  6. Pourquoi la fonction standard IEC FC38 délivre un "0" comme valeur de retour, bien que la variable String se trouve dans une plage admissible ?

Le tableau suivant contient des informations et des remèdes und remèdes:

Nr.Trucs et astuces pour l'appel et le paramétrage de SFBs, SFCs et de fonctions standards IEC:
1Général - Où est-ce que je peux obtenir des informations sur les SFBs, SFCs et fonctions standards IEC?
Vous trouverez des informations sur les SFBs, SFCs et fonctions standards IEC pour la configuration et le paramétrage
  • dans l'aide en ligne, en marquant le bloc et en appuyant sur la touche F1 et
  • dans le manuel "Logiciel système pour SIMATIC S7-300/400 Fonctions standard et fonctions système" dans la contribution ID:
2Comment se fait le paramétrage des entrées "IN1" et "IN2" de la fonction standard IEC FC11 (FIND)?
La chaîne de caractères à rechercher "IN2" ne doit pas être égale que la chaîne de caractères "IN1". Si les deux chaînes de caractères sont identiques, alors le bloc FC11 (FIND) indique aussi nul. Utilisez le FC10 (EQ_STRNG) pour une interrogation d'égalité ou combinez les deux blocs.
3A quoi faut-il faire attention lors de la configuration du pointeur ANY du type ARRAY ou STRUCT à la sortie "RECORD" des SFC14/15?
STEP 7 met les ARRAY et es STRUCT toujours aux limites de mot dans la mémoire. Un nombre d'octets impairs (par ex. ARRAY <>) est comblée de 1 octet si bien que le pointeur ANY délivre une longueur inexacte. Cela conduit au message d'erreur :
  • 80B1: "La longueur de la zone cible indiquée diffère de la longueur configurée avec STEP 7 pour les données utiles"

La longueur du pointeur ANY doit toujours être indiquée en byte, par ex. avec la syntaxe: "P#M280.0 BYTE 5". Nous vous recommandons d'alimenter la variable ANY des SFC14 /15 par une programmation absolue.

4Comment peuvent être transférées des plage de données du type de données "STRING" avec le SFC20?
Avec la fonction de système SFC20 (BLKMOV) vous pouvez transférer des plages de données, par ex. du bloc de bloc de données DB1 vers un bloc de données DB2. Lors de l'écriture d'une variable locale type STRING dans un bloc de données, vous devez avant déposer cette variable . Pour le transfert au SFC20, vous devez alors programmer cette variable de façon symbolique (pas en absolu). L'image 01 vous montre un exemple pour la programmation du SFC20 avec une variable STRING.


Image 01

5Pourquoi la valeur de retour RET_VAL du SFC20 est différente en fonction de la CPU utilisée?
Lors de l'affectation d'un pointeur ANY incorrect avec la longueur "0" , les valeur de retour sont différentes entre les CPUs S7-300 et S7-400. En raison d'un traitement d'erreur différent dans les CPUs, il y a des différences dans les valeurs de retour du SFC20.
6Pourquoi la fonction standard IEC FC38 délivre un "0" comme valeur de retour, bien que la variable String se trouve dans une plage admissible ?
Lorsque la fonction IEC FC 38 est paramétrée par une variable String, qui est définie dans un DB sans une valeur initiale, alors un "0" se trouve dans l'octet contenant la longueur réelle de la chaîne de caractères. La variable dans le DB n'a pas été initialisée. La variable est certes créée, avec l'information "longueur max " mais sans une information sur la longueur réelle de la chaîne. Si maintenant une chaîne de caractères est inscrite dans le tableau variable sans adapter l'octet pour la longueur réelle, alors la chaîne de caractères ne sera pas reconnue par CPU. Ce n'est que si l'octet pour la longueur réelle est adapté sur la longueur réelle que la chaîne de caractères sera reconnue par la CPU.


Image 02

Note:
Veuillez également faire attention aux informations de l'aide en ligne de STEP 7, sous "Format du type de données STRING" .

Mots-clefs:
Comparaison de STRING

Comment se fait le transfert de variables String par ex. d'un bloc de données à un bloc fonctionnel ?au début
6ES7810-4..SIMATIC S7, STEP7 Vx.x

Instructions:
Programmez avec des mnémoniques pour ce cas d'utilisation ou accédez sur le nom symbolique des variables dans le bloc de données. Dans l'exemple suivant vous trouverez un bloc de données DB5 avec les deux variables "String_1" et "String_2".

Nr.Procédure:
1Le nom symbolique du DB5 est "Baustein". Les deux variables String doivent être connectées avec un bloc fonctionnel FB1. L'image 01 montre la déclaration des deux variables String et l'attribution du nom symbolique "Baustein" dans les propriétés du DB.


Image 01

2Dans le FB1est appelé la fonction standard IEC FC10 EQ_STRNG (Comparaison de deux variables au format STRING (égal à)). Les deux paramètres S1 et S2 du FC10 sont paramétrés avec les variables d'entrées "InputSTR1" et "InputSTR2". L'image 02 montre l'appel et le paramétrage de la fonction IEC standard FC10 (EQ_STRNG) dans le FB1.


Image 02

3Le FB2 appelle le FB1 avec son DB d'instance DB1 et les deux paramètres d'entrées "InputSTR1" et "InputSTR2" paramétrés avec les deux variables String du DB5 ("Baustein.String_1" et "Baustein.String_2") .


Image 03

Mots-clefs:
Chaîne de caractères, passage de paramètres

Informations sur le thème "Appel de Fonctions et Blocs Fonctionnels "au début
6ES7810-4..SIMATIC S7, STEP7 Vx.x
Comment réaliser la programmation d’un type de données complexe dans la zone IN-OUT d’un FB?au début
6ES7810-4..SIMATIC S7, STEP7 Vx.x

Enoncé :
Les variables de type composé sont mémorisées pour les paramètres (IN_OUT) du FB sous forme de renvoi avec un pointeur de 6 octets (48 Bit) dans le DB d’instance. Ainsi on ne trouve pas la valeur, mais un pointeur de 6 octets dans le DB d’instance. Ce pointeur indique le paramètre actuel, qui doit être obligatoirement affecté. STEP 7 englobe les types de données composées "Date_and_Time", "String", "Array", "Struct" et "UDT".

La vue 01 représente un exemple de programmation de l’accès indirect au premier octet de ce type de données. Cette procédure décrite dans l’exemple sert à la sauvegarde des données.


Vue 01

Le pointeur 6 octets est chargé par la variable IN_OUT "Symbol_des_InOut". Du pointeur 6 octets on transfère le numéro du bloc de données dans une variable temporaire "DB_Num". Avec ce numéro de DB mémorisé on ouvre le DB avec l’instruction "AUF DB[#DB_Num]" et on charge l’adresse dans le registre adresse 1.

L’instruction "L B[AR1,P#0.0]" permet d’obtenir les données sauvegardées et l’adresse correcte. Si vous utilisiez l’instruction "L Symbol_des_InOut[1]", vous ne chargeriez pas les données sauvegardées du registre des adresses, mais les valeurs directement du paramètre IN_OUT, ces valeurs auraient pu être modifiées. Tenez compte des informations de l’aide en ligne STEP 7, sous la rubrique

  • "Comment éviter les erreurs lors de l’appel de blocs".

Indication:
L’exemple ne s’applique qu’aux DBs, sinon la CPU passe en "STOP". Le 0 (DB0) n’est pas supporté.

Le fichier "InOutvar.zip" contient un projet STEP 7 avec deux stations S7 pour le programme exemple précédemment décrit :

  • Station: "Beispiel in deutsch" avec commentaires en langue allemande,
  • Station: "Example in english" avec commentaires en langue anglaise.

InOutvar.zip ( 356 KB )

Comment créer et modifier de la multiinstance ?au début
Afficher le numéro de commande

Instructions:
Si vous devez utiliser fréquemment des blocs fonctionnels dans votre programmation structurée, vous avez besoin d'un bloc de données d'instance particulier pour chaque appel de FB. Avec de très petits FBs, les DBs d'instance se composent souvent de quelques mots. Par l'appel très fréquent de ces petits FBs et les blocs de données d'instance ainsi généré, il peut arriver que votre programme soit très confus ou que le nombre de DBs possible pour votre CPU soit atteint.

Comme un DB d'instance peut être plus grand que ce qui est nécessaire pour un FB, il existe la possibilité de regrouper plusieurs DBs d'instance dans une multiinstance. Une condition est cependant, que tous les appels à regrouper dans un FB soient programmés dans un FB. En outre le FB, que vous utilisez possède la fonctionnalité multiinstance. Cette contribution contient les deux notices d'instructions suivantes:

  1. Tableau 1: Programmation de multiinstances et actualisation de l'appel des instances modifiées
  2. Tableau 2: Déclaration ultérieure de la fonctionnalité de multiinstance ou de non multiinstance des FBs existants.

Dans le tableau 1 est décrit la procédure pour programmer une multiinstance et de pouvoir actualiser l'appel en cas de modification:

Nr.Procédure:
1Générez dans SIMATIC Manager le FB, dans lequel vous voulez installer votre multiinstance et ouvrez le. Indiquez un nom pour votre instance dans la partie statique de l'interface, avec lequel vous appellerez ultérieurement l' instance dans le programme. Indiquez comme type de données le FB ou le SFB, que vous souhaitez appeler.


Image 01

L' image 01 montre un exemple pour la déclaration de l'instance dans l'interface du FB.

2Appelez l'instance dans votre programme. Vous pouvez choisir l'instance soit à partir du catalogue sous "multiinstances" et le copiez par Drag&Drop dans votre réseau programme ou appeler l'instance avec une instruction CALL.


Image 02

Note sur STEP 7 V5.4 SP2 :

Si dans l'éditeur CONT/LOG, les multiinstances n'apparaissent pas dans le catalogue, nous vous recommandons d'insérer un bloc fonctionnel (en tant que provisoire) dans la partie déclarative des variables statiques puis de l'effacer. Les multiinstances pourront ensuite être sélectionnées.

3Paramétrez maintenant les entrées et les sorties du bloc et enregistrez le FB. Maintenant vous pouvez appeler le FB avec sa multiinstance dans le programme (par ex. dans l'OB1). Un bloc de données d'instance sera créé que vous pouvez aussi visualiser.

Note:
Veuillez faire attention, lors de la création de la multiinstance, que le FB - qui est appelé en multiinstance- soit toujours créé en premier et alors appelé en multiinstance. Si cette procédure n'est pas respectée, alors il peut arriver une inconsistance dans le programme. Cette inconsistance apparaît aussi, lorsqu'une multiinstance est modifiée.

4Si vous avez réalisé des modifications dans une instance, alors ouvrez ensuite le bloc appelant. Pendant l'ouverture du bloc appelant vous obtiendrez les messages qui indiquent que l'interface d'un UDT ou qu'une déclaration de variables locales ont été modifiées et qu'un conflit d'horodatage existe pour au moins un bloc. Validez les messages avec OK. L'instance appelée qui a été modifiée est marquée en rouge dans l'éditeur CONT/LOG/LIST.

Pour actualiser l'appel du bloc, cliquez avec un clic droit de souris sur le bloc et sélectionnez ensuite dans le menu contextuel qui s'est ouvert, la fonction "Actualiser l'appel...".


Image 03

5Exécutez dans le dialogue suivant la comparaison d'interface, en validant par OK.


Image 04

Note pour STEP 7 V5.3:
Lors de l'actualisation de l'appel d'un bloc avec la fonction "Fichier > Vérifier et actualiser les accès" STEP 7 V5.3 peut ne trouver aucune affectation univoque entre les variables et l'appel reste en rouge. Une correction par l'actualisation de l'appel par "Edition > Appel > Actualiser" n'est alors plus possible. L'unique possibilité de réactualiser l'appel consiste à effacer l'appel, d'actualiser l'interface dans la déclaration et d'appeler à nouveau le bloc en multiinstance. Dans le cas ou vous avez effacé des variables dans l'interface d'un FB, vous devez corriger tous les appels multiinstance par la fonction "Edition > Appel > Actualiser", sans appliquer avant la fonction "Vérifier et actualiser les accès". Après avoir actualisé cet appel multiinstance, vous pouvez utiliser comme d'habitude la fonction "Vérifier et actualiser les accès".

6Nous vous recommandons, après l'actualisation de l'appel d'exécuter le contrôle de la cohérence des blocs. Marquez dans SIMATIC Manager, le dossier des blocs dans le programme S7 et sélectionnez par un clic droit de souris la fonction "Vérifier la cohérence des blocs...". Il vous sera présenté maintenant la structure de votre programme S7.

Compilez le programme par la fonction "Programme > Compiler tout" ou par le deuxième bouton dans la barre des taches. Après la compilation, votre programme STEP 7 est cohérent.


Image 05

Si vous générez à nouveau un bloc fonctionnel, la fonctionnalité multiinstance (Image 06) est réglée par défaut dans les propriétés du bloc, que vous pouvez aussi modifier.


Image 06

Après la génération du bloc, une modification ultérieure de la fonctionnalité multiinstance est seulement possible de façon détournée, car vous ne pouvez plus le faire dans les propriétés du bloc. Vous pouvez seulement voir ici si votre bloc est multiinstance ou non.


Dans le tableau 2 est décrit la procédure pour pouvoir déclarer si les FBs existants ont la possibilité de multiinstance ou pas

Nr.Procédure:
1Pour déclarer ultérieurement un bloc fonctionnel en multiinstance ou non multiinstance, ouvrez le bloc correspondant dans l'éditeur CONT/LOG/LIST et générer une source pour le FB par la fonction "Fichier > Générer source...".

Sélectionnez votre projet dans le dialogue suivant et enregistrez la source dans votre dossier Sources, qui se trouve dans votre programme S7.

2Dans le dialogue "Générer source " (Image 07), sélectionnez le bloc dans la liste de gauche, que vous voulez mettre en multiinstance ou en non multiinstance et insérez le avec la flèche dans la liste de droite. Fermez la fenêtre du dialogue avec "OK".


Image 07

3Fermez l'éditeur CONT/LOG/LIST et ouvrez dans SIMATIC Manager à partir du dossier Source de votre projet, la source que vous avez précédemment créée. La fonctionnalité multiinstance est dépendante de l'entrée d'un attribut la ligne "Version : 0.1".


Image 08

  • Lorsque vous voulez déclarer votre FB en multiinstance, effacer l'attribut "CODE_VERSION1"
  • Lorsque vous voulez déclarer votre FB en non multiinstance, entrez comme dans l'image 08 l'attribut "CODE_VERSION1".

Enregistrez et compilez la source. Votre bloc est maintenant déclaré en multiinstance ou en non multiinstance.

4Vous devez maintenant compiler à nouveau tous les blocs modifiés, que vous appelez en multiinstance ou en non multiinstance. Nous vous recommandons ici d'exécuter la fonction "Vérifier la cohérence des blocs...". (décrite au tableau 1, nr. 6).

Téléchargement:
Le téléchargement joint contient les trois fonctions fonctionnels système SFB3 "TP",qui sont appelés en multiinstance dans le FB1. L'appel du FB1 avec son DB multiinstance est fait dans l'OB1. Copiez le fichier "Multiins.exe" dans un répertoire séparé sur votre disque dur et démarrez le fichier par un double clic. Le projet STEP 7 V5.4 sera automatiquement décompacté avec tous ses sous-répertoires. Ensuite vous pouvez ouvrir et traiter le projet décompacté avec SIMATIC Manager.

Multiins.exe ( 96 KB )

Exécutabilité et environnement de test:
L'exemple est utilisable sur toutes les variantes de CPU SIMATIC S7-300, S7-400, C7 et WinAC. Vous trouverez dans le tableau suivant les composants qui ont servis pour la création et la vérification du fonctionnement de cette contribution :

Environnement de test:Versions
Platte-forme PC Intel(R) Pentium(R) M processor 1,73GHz
Système d'exploitation du PCWindows XP
STEP 7V5.4
Paquets optionnels S7-PLCSIMV5.3

Comment actualiser des appels de blocs devenus invalides (conflits d'horodatage) dans les blocs appelants ?au début

Guide :
Si vous modifiez un bloc qui est appelé dans un autre bloc, ou si vous modifiez la définition d'un UDT qui est utilisé dans un DB, FB, FC ou dans un autre UDT, vous obtenez un conflit d'horodatage. La cohérence dans le programme STEP 7 est surveillée avec l'horodatage (horodatage du code et de l'interface des blocs). Vous trouverez d'autres informations sur les conflits d'horodatage dans l'aide en ligne de STEP 7 sous :

  • Horodatage comme propriété de bloc et conflits d'horodatage
  • Horodatage dans les blocs de données d'instance
  • Horodatage dans les UDT et DB repris d'UDT
  • Horodatage dans les blocs de code
  • Mettre à jour les appels de blocs ou les emplois d'UDT

Si vous avez modifié l'interface d'un bloc (FB, DC, DB), le message d'erreur suivant apparaît à l'ouverture du bloc appelant :

  • "Il y a un conflit d'horodatage pour un appel de bloc au moins".

Après avoir acquitté le message avec OK, le bloc appelé est représenté en rouge dans l'éditeur CONT/LIST/LOG. Le tableau suivant décrit une série de possibilités ou de remèdes pour corriger les conflits d'horodatage des blocs :

Remède :
1Menu : "Vérifier et actualiser les accès"
Cette commande vous permet de vérifier la compatibilité des types d'opérandes et d'afficher ces derniers en rouge en cas d'erreur. Les blocs de données sont actualisés ou régénérés et les interfaces d'appel sont comparées autant que possible.

Ouvrez le bloc appelant avec l'éditeur CONT/LIST/LOG et actualisez les appels de blocs via "Fichier > Vérifier et actualiser les appels".


Figure 01

Si, par exemple, vous avez supprimé des variables de l'interface du bloc appelé, le STEP 7 ne peut plus associer les paramètres et l'appel reste en rouge. Dans ce cas, poursuivez avec l'étape 2 ou exécutez la fonction "Actualiser l'appel".

2Menu : "Edition > Aller à > Erreur suivante"
Après l'ouverture de l'éditeur CONT/LIST/LOG, le menu "Edition > Aller à > Erreur suivante" vous permet de placer le curseur automatiquement à l'appel de bloc représenté en rouge.


Figure 02

3Actualisation d'appels de bloc
Dans l'éditeur CONT/LIST/LOG, sélectionnez le bloc représenté en rouge ou utilisez la fonction décrite à l'étape 2. Avec le menu "Edition > Appel > Actualiser", vous pouvez comparer automatiquement le bloc devenu invalide. Les modifications d'interfaces suivantes dans le bloc appelé sont alors automatiquement actualisées :
  • Insertion et suppression de paramètres.
  • Modification des noms et des types de paramètres.
  • Modification de la succession (déplacement) des paramètres.


Figure 03

Après avoir cliqué sur le bouton "Actualiser", la fenêtre "mise à jour de l'interface" s'ouvre. Cette boîte de dialogue représente dans la partie gauche le bloc avant la modification d'interface et dans la partie droite le bloc actuel. Vous pouvez alors comparer les paramètres existants déjà dans l'ancien bloc. Sélectionnez un paramètre dans l'ancien bloc et copiez ou déplacez-le dans le nouveau bloc.


Figure 04

Une fois la comparaison terminée, vous pouvez fermer la fenêtre avec "OK". Le bloc invalide est remplacé par le nouveau.

4Effacer et ressaisir l'appel du bloc
Vous pouvez également actualiser l'appel du bloc en l'effaçant puis en le ressaisissant.
  • Si vous sélectionnez le FB avec le curseur dans l'affichage LOG et que vous l'effacez via "Edition > Effacer", le DB d'instance est également effacé.
  • En LIST, vous devez effacer la ligne complète (par exemple CALL FB1,DB1).

Réappelez ensuite le bloc, y compris son DB d'instance, et validez ensuite le message avec "oui".


Figure 05

Le DB d'instance ou l'appel de bloc est alors actualisé et vous pouvez enregistrer l'éditeur CONT/LIST/LOG.

5

Poursuivre l'édition d'un DB lorsque l'UDT utilisé dans ce DB a été modifié
Si vous avez créé un bloc de données avec des variables de type de données UDT (type de données défini par l'utilisateur), vous devez toujours actualiser le bloc de données après une modification de l'UDT. Dès que vous ouvrez le bloc de données, le message d'erreur de la figure 06 apparaît :


Figure 06

Ce message indique également que l'horodatage de l'UDT est plus récent que celui du bloc de données. Après avoir acquitté le message décrit ci-dessus, les variables de type de données UDT sont représentées en rouge. D'autre part, la structure pour chaque UDT est représentée telle qu'elle était avant la modification. Le menu "Fichier > Vérifier et actualiser les appels" met à jour le bloc de données.

6Vérification de la cohérence des blocs
Exécutez une vérification de la cohérence des blocs et compilez la totalité du programme STEP 7 depuis l'outil de vérification de la cohérence des blocs avec la fonction "Programme > Compiler tout". La vérification de la cohérence des blocs permet de corriger simplement une grande partie des conflits d'horodatage et d'incohérence de blocs. Vous trouverez d'autres informations dans notre article :
  • "Comment se fait la vérification de la cohérence des blocs après une modification dans un programme STEP 7 ?"
    article ID 5416540

Mots-clefs :
User Defined Data Type

Comment déterminer dans un programme le numéro de BLOCK_FC, BLOCK_FB, TIMER ou COUNTER passé en paramètre ?au début

GUIDE :
Le code suivant permet de déterminer le numéro de BLOCK_FC, BLOCK_FB, TIMER ou COUNTER.

Exemple 1 pour blocs fonctionnels :
La variable Time_1 de type "Timer" est déclarée dans la partie déclarative du FB1. Lors de l'appel du FB1 dans le FB2, le paramètre Time_1 est renseigné avec la temporisation T5. Le numéro de 5 pour T5 est déterminé par le code représenté à la figure 1.


Fig. 1 : Détermination du numéro de temporisations dans un bloc fonctionnel

Exemple 2 pour fonctions :
La variable Time_1 de type "Timer" est déclarée dans la partie déclarative du FC1. Lors de l'appel du FC1 dans le FC2, le paramètre Time_1 est renseigné avec la temporisation T8. Le numéro 8 pour T8 est déterminé par le code représenté à la figure 2.


Fig. 2 : Détermination du numéro de temporisations dans une fonction

Pour les blocs fonctionnels avec mutliinstances, le programme de la figure 1 doit être étendu :

TAR2 //adresse de la multiinstance
LAR1 P##Time_1
+AR1 //ajouter l'adresse actuelle à l'adresse de la multiinstance
L W[AR1,P#0.0]
T MW00

Comment affecter en tant que paramètres d'une Fonction un Appel à des données de type Structurées ?au début

GUIDE :
Les paramètres d'une structure de données (ARRAY et STRUCT) offrent un moyen efficace pour l'échange d'une grande quantité de données entre le bloc appelant et le bloc appelé. Une variable de type STRUCT peut être transmise comme une variable complète à la fonction appelée.

Les variables de type STRUCT peuvent seulement être sauvées dans un bloc de donnée ou dans les variables locales. En conséquence, le paramètre actuel doit être déclaré soit dans le bloc de données (global ou d'instance) soit dans la liste des variables locales.

En vue du transfert, un paramètre du même type de données que le paramètre actuel doit être déclaré dans la fonction appelée. Le renseignement de ces paramètres (Types de données : ARRAY, STRUCT, DATE_AND_TIME und STRING) doit être fait via les mnémoniques.

L'éditeur CONT/LOG/LIST contrôle la compatibilité des types de données entre le paramètre transmis et le paramètre du bloc pendant la saisie du programme. Le transfert du paramètre actuel vers la fonction est réalisé par un pointeur avec le numéro du DB et un pointeur cible. Ce pointeur est créé dans la liste des variables locales du bloc appelant.


Image 1:

Les variables du type STRUCT peuvent seulement être sauvegardées dans la liste des variables locales (variables TEMP du FC12) ou dans un DB (DB5).

Note:
Pour de plus amples Informations à propos de l'accès selon le type des données ,veuillez consulter la Contribution suivante:

  • "Comment accède t-on à des paramètres IN/OUT de données structurées dans un FB ?"
    Contribution-ID: 19106712.

Mots clefs:
Programmation structurée.



Comment se fait la vérification de la cohérence des blocs après une modification dans un programme STEP 7 ?au début

Guide :
La vérification de la cohérence des blocs permet de rechercher et de corriger les incohérences causées par des modifications d'interfaces. Le tableau suivant vous décrit la procédure pour vérifier la cohérence à l'intérieur de tout le répertoire des blocs ou du programme complet d'une station S7.

Procédure :
1Dans le SIMATIC Manager, sélectionnez le répertoire des blocs à l'intérieur d'une station S7 et ouvrez la fenêtre "Vérifier la cohérence des blocs"
  • soit via le menu "Edition > Vérifier la cohérence des blocs..."
  • soit en cliquant avec le bouton droit de la souris et en choisissant la fonction "Vérifier la cohérence des blocs..." dans le menu contextuel.

La structure de votre programme S7 est alors représentée.


Figure 01

2Vous pouvez contrôler la cohérence des blocs à l'aide de cette structure. Si un bloc est représenté avec un rond rouge (ici : OB1 et FB1 dans la figure 01), c'est qu'un conflit d'interface est présent sur ce bloc. Le bloc qui en est la cause est représenté avec un point d'exclamation jaune (ici : FC1).

Pour déterminer la cause exacte du conflit d'interface, compilez la totalité du programme soit via le menu "Programme > Compiler tout" ou par l'icône "Compiler tout" (figure 02).

Tous les blocs sont alors compilés les uns après les autres. Si une erreur survient pendant la compilation, la cause en est indiquée dans la fenêtre de résultats avec un rond rouge.
Figure 02

3Un double-clic sur le message d'erreur correspondant permet d'ouvrir le bloc concerné. L'appel de bloc invalide est représenté en rouge. Actualisez l'appel de bloc. Vous trouverez d'autres informations sur l'actualisation d'appels de blocs dans notre article :
  • "Comment actualiser des appels de blocs devenus invalides (conflits d'horodatage) dans les blocs appelants ?"
    article ID : 12216780.


Figure 03

Après avoir corrigé le conflit d'horodatage et enregistré le bloc, la représentation correspondante disparaît dans l'arborescence. Le programme est alors cohérent.

Note :
La vérification de la cohérence des blocs est aujourd'hui prise en charge par les logiciels SIMATIC suivants :

  • STEP 7 à partir de V5.1
  • S7-GRAPH à partir de V5.2
  • S7-HiGraph à partir de V5.2
  • S7-SCL à partir de V5.3 SP1
  • S7-PDIAG V5.1

Tous les autres langages de programmation ne prennent pas en charge la vérification de la cohérence des blocs et ne peuvent pas être compilés avec la fonction "Compiler tout".

Remède :
Si un conflit d'horodatage ou une modification d'interface est détecté lors de la vérification de la cohérence des blocs, procédez de la manière suivante :

  • par un double-clic dans le SIMATIC Manager, ouvrez le bloc concerné et recompilez-le avec le compilateur associé.
  • Ceci pour tous les blocs avec un conflit d'horodatage ou avec une modification d'interface les uns après les autres.
  • Ensuite, répéter la vérification de la cohérence des blocs.

Comment passer un paramètre de type "BLOCK_DB" à un FC ?au début


GUIDE :
A l'appel d'une fonction (FC), il n'est pas possible de transmettre directement un paramètre de type "BLOCK_DB". Le message d'erreur suivant apparaît si vous essayer de donner un tel paramètre comme paramètre effectif à l'appel de la fonction :

"Paramètre effectif illicite pour le paramètre "

Le passage d'un paramètre de type BLOCK_DB n'est possible qu'à l'appel d'un FB (depuis un FB ou un FC).

A l'appel d'une fonction (depuis un FB ou un FC), le passage direct de type de données paramètres n'est pas permis. Ceci est décrit en détail dans l'aide en ligne du STEP 7 à la rubrique "Types de données autorisés pour la transmission de paramètres".

Pour pouvoir tout de même transmettre l'information d'un paramètre de type BLOCK_DB à un FC, vous pouvez déterminer le numéro du DB et le transmettre au FC sous forme d'un type de données élémentaire (par exemple WORD).
Dans l'exemple suivant, le bloc fonctionnel FB100 possède un paramètre IN de type "BLOCK_DB" (InData). Pour transmettre ce paramètre au FC101, le numéro du DB est déterminé et stocké dans une variable WORD temporaire (DB_Nr). A l'appel de la fonction, c'est le paramètre WORD qui est transmis au lieu du paramètre BLOCK_DB.


Fig. 01

Si l'interface du FB appelant peut être réalisée avec un paramètre WORD pour le transfert du numéro de DB, ce paramètre peut être passé directement au FC appelé.


Fig. 02



Quelle est la différence entre les instructions d'appel de bloc CALL et les instructions UC ou CC ?au début

Description :
Avec l'instruction d'appel CALL, vous appelez les FBs, FCs, SFBs et SFCs toujours de façon absolue, cela signifie que le bloc indiqué sera toujours appelé et traité indépendamment de la condition. Après l'opération CALL, la liste des paramètres de bloc (paramètres IN, OUT et INOUT).

Les Blocs Fonction FB et les Fonctions FC peuvent être appelés avec un RLG (Résultat Logique d'une instruction) - indépendamment de l'instruction d'appel UC et de l'instruction d'appel CC conditionné par le RLG . L'instruction UC est un instruction absolue et appelé un bloc sans tenir compte du RLG. Par contre dans le cadre de l'instruction conditionnée CC , le bloc est seulement appelé si le RLG est à l'état "1" . A la différence de l'instruction d'appel CALL , vous devez respecter les conditions suivantes pour les instructions d'appel UC-et CC ;

  • que les fonctions appelées n'aient aucun paramètre de bloc,
  • que les blocs fonctionnels appelés n'aient aucun bloc de données d'instance, mais aussi aucun paramètre de bloc ni aucune donnée locale statique.


Image 1

L'instruction d'appel UC appelé le bloc FB2 indépendamment du RLG. Le bloc FB3 sera alors appelé par l'instruction CC, lorsque l'entrée E200.0 sera à "1" .

Les instructions d'appel UC ou CC ne sont pas différentes dans l'exécution entre fonction et bloc fonctionnel. Les deux types de bloc sont traités de la même façon.

Instructions d'appel Appel de fonction Appel de bloc fonctionnelInstruction
CALLavec
paramètres de bloc
avec paramètres de bloc
avec bloc de données d'instance
(données locales inclues )
Absolue
UCsans paramètres de blocsans paramètre de bloc
sans bloc de données d'instance
(aucune donnée locale )
Absolue
CCsans paramètres de blocsans paramètre de bloc
sans bloc de données d'instance
(aucune donnée locale)
Conditionnelle

Tableau 1: Différences entre les instructions d'appel CALL et UC ou CC

Mots-clefs:
UC (Unconditional Call), CC (Conditional Call).

Pourquoi des blocs de données d'instance sont utilisés et quelle est la différence avec un bloc de données global ?au début

Description
Un bloc de données d'instance est affecté lors de chaque appel d'un bloc fonctionnel (FB). Dans le bloc de données d'instance sont déposés les paramètres actuels et les données statiques du FB. Les variables déclarées dans le FB déterminent la structure du bloc de données d'instance. L'appel d'un bloc fonctionnel est défini par l'instance. Si par exemple un bloc fonctionnel est appelé cinq fois dans le programme utilisateur S7 avec différents blocs de données d'instance, alors il existe cinq instances de ce bloc (plusieurs blocs de données d'instance pour un bloc fonctionnel).

Si vous affectez plusieurs blocs de données d'instance à un bloc fonctionnel (FB), qui par ex. commande un moteur, alors vous pouvez utiliser ce FB pour commander différents moteurs.
Les différentes données pour chacun des moteurs (comme par ex. la vitesse de rotation, le temps de démarrage, temps de fonctionnement total) seront enregistrés dans les différents blocs de données. Suivant le bloc de données qui est affecté au FB lors de l'appel, il peut commander un autre moteur. De cette manière, seulement un bloc fonctionnel est nécessaire pour plusieurs moteurs.


Image 01

Un bloc de données d'instance pour plusieurs blocs fonctionnels
Vous pouvez transmettre les données d'instance d'un FB pour différents moteurs regroupées dans un bloc de données d'instance. Vous devez réaliser l'appel des FBs de commande dans un autre FB et déclarer les FBs appelés dans les variables statiques de la partie de déclaration avec le type de données d'un FB pour chacune des instances.

Lorsque vous utilisez un bloc de données d'instance pour plusieurs FBs (Multiinstance), alors vous économisez de la place mémoire et vous optimisez l'utilisation des blocs de données. Dans l'image suivante, il est présenté un exemple d'appel , le bloc appelant est le bloc fonctionnel der FB 21 "Moteur Processing", les variables sont du type de données FB 22 et les instances sont désignées avec Motor_1, Motor_2 et Motor_3.


Image 02

Différence avec un bloc de données global
La différence entre un bloc de données d'instance et un bloc de données global est, que vous ne pouvez ajouter ou effacer aucune valeur dans un bloc de données d'instance. Aussi l'affectation de valeurs initiales et des valeurs actuelles ne peuvent pas être modifiées. Cela doit être réalisé dans FB correspondant. Lorsque vous voulez modifier ou effacer une valeur initiale ou une valeur en cours, tous les blocs de données d'instance appartenant au FB doivent être réactualisés ou effacés et régénérés. Vous pouvez ajouter et aussi modifier les valeurs initiales et en cours dans un bloc de données global.

Note sur la mise à jour de STEP 7 V4.02 en V5.x
Lors de la mise à jour de STEP 7 V4.02 en V5.x, il peut arriver, que quelques appels CALL dans l'éditeur CONT/LOG/LIST apparaissent en rouge. La cause de ce comportement est que qu'un DB d'instance utilisé dans l'appel du bloc a été défini en tant que DB Global dans la table de mnémonique. Cela n'est plus permis dans les règles de programmation de STEP 7 et n'est plus accepté à partir de la version V5.x de STEP 7.

Remèdes:
Afin que les bloc de données mal déclarés soient installés correctement, les remèdes suivants peuvent être utilisés :

  1. Effacez les lignes de la table de mnémonique, dans lesquels sont déclarés les DB demandés.
  2. Effacez ensuite les blocs de données, qui ont été mal déclarés.
  3. Ouvrez le bloc FB appelant et générez à nouveau les blocs de données d'instance avec la fonction CALL.


Commentaires