Décoder le type de données ANY (STEP 7]

Sous forum réservé aux tutoriaux concernant les produits de la marque Siemens
Répondre
Avatar de l’utilisateur
djé
Créateur de langage
Créateur de langage
Messages : 513
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Décoder le type de données ANY (STEP 7]

Message par djé » 29 mai 2019, 08:03

Bonjour,

Pour les personnes curieuses/intéressées voici un bout de code pour décortiquer une variable ANY et comprendre comment ce type de données est construit.

Petit rappel : le type de donnée ANY est codé sur 10 octets

Pour les détails, n'hésitez pas à consulter l'aide de STEP7, rubrique "Format du type de données Paramètre ANY"


Code : Tout sélectionner

FUNCTION FC 2 : VOID
TITLE =Extraction d'un pointer ANY
//Permet de décomposer le pointeur ANY :
//le Type de données
//le facteur de répetition (combien de données)
//La zone pointeur (la zone affectée avec l'adresse de départ)
//le Numero de DB (si c'est un DB en entrée)
AUTHOR : jedri
FAMILY : test
VERSION : 1.0


VAR_INPUT
  pANY : ANY ;	//Pointeur ANY d'entrée
END_VAR
VAR_OUTPUT
  DataTyp : BYTE ;	//Type de Données (02 : octet)
  Count : INT ;	//Facteur de répetition
  numDB : INT ;	//Numéro de DB
  Pointeur : DWORD ;	//Pointeur de zone (type de mémoire et adresse (format octet.bit)
  Adresse : INT ;	//Adresse Simple au format Octet
END_VAR
BEGIN
NETWORK
TITLE =

      SET   ; 
      L     P##pANY; 
      LAR1  ; 

      L     B [AR1,P#0.0]; // le fameux 10h pour visu uniquement

      L     B [AR1,P#1.0]; // type de données
      T     #DataTyp; 

      L     W [AR1,P#2.0]; 
      T     #Count; 

      L     W [AR1,P#4.0]; 
      T     #numDB; 

      L     D [AR1,P#6.0]; 
      T     #Pointeur; 
      SRD   3; 
      T     #Adresse; 



END_FUNCTION


Dans l'écriture du code on peut remarquer la manière assez unique d'aller chercher les infos dans une zone mémoire qui n'est pas définie :
L W [AR1,P#4.0] par exemple.
En général on utilise l'identifiant de la zone (L pour temporaire, M pour les mémentos, DB pour les blocs de données, etc...).
C'est assez déroutant et pas très bien documenté au niveau de l'aide

Source à compiler (FC2), puis à simuler avec différentes variantes en variable d'entrée (mots,bit, tableaux, DB, entrée, pointeurs ANY...).
Observez les valeurs en sorties de blocs en fonction de la variable d'entrée.
Le type ANY accepte tout type de données.
Modifié en dernier par djé le 29 mai 2019, 08:30, modifié 2 fois.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...

Avatar de l’utilisateur
djé
Créateur de langage
Créateur de langage
Messages : 513
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: Décoder le type de données ANY

Message par djé » 29 mai 2019, 08:23

djé a écrit :
29 mai 2019, 08:03

Dans l'écriture du code on peut remarquer la manière assez unique d'aller chercher les infos dans une zone mémoire qui n'est pas définie :
En visu dynamique, on s'aperçoit que le registre d'adresse AR1 pointe sur les "données locales précédentes" (Zone V);
Cette zone correspond à une zone mémoire située au delà de la zone d'adresse locale (zone L) définie (ou pas) dans l'interface du bloc appelant.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...

Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 3477
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Décoder le type de données ANY (STEP 7]

Message par itasoft » 29 mai 2019, 11:23

slts,
disons que les logiciels de programmation automates évoluent mais ça manque encore cruellement de pointeurs
surtout quand on as fait du "C++ qui est un langage fait exclusivement de pointeurs, ceci dit ça rend le programme incompressible, type usine à gaz
les pointeurs c'est bien mais pas trop n'en faut
Automaticien privé (de tout)
itasoft@free.fr

Daviddu90
Première mise en service
Première mise en service
Messages : 53
Enregistré le : 18 janv. 2019, 08:23
Localisation : Territoire de Belfort

Re: Décoder le type de données ANY (STEP 7]

Message par Daviddu90 » 29 mai 2019, 19:55

Hi,

Merci pour la note.

@++
Automaticien Indépendant

Répondre