Ecriture dans un DB

Forum traitant des automates industriels de marque Siemens.
Répondre
Débutant
Apprend le binaire
Apprend le binaire
Messages : 1
Enregistré le : 24 janv. 2025, 16:17

Ecriture dans un DB

Message par Débutant »

Bonjour,
Je débute et je suis actuellement à la recherche d'informations concernant une zone de données d'un DB d'instance pour laquelle je ne trouve pas de traces de lecture ou d'écriture. L'API est un S7-300, les données sont des STAT. J'ai donc commencé par chercher dans le FB associé, puis par occurrences sur toute la plage du DB, je trouve des lectures et écriture sur certaines zone mais pas sur la plus grande partie de celui-ci...
Partant ce DB est copié vers un autre (DB stockage vers DB impression). Auriez vous un idée sur la question?

Merci d'avance!!
hgvieira
Code son premier grafcet
Code son premier grafcet
Messages : 41
Enregistré le : 02 sept. 2022, 13:26

Re: Ecriture dans un DB

Message par hgvieira »

Bonjour,
Quel est votre but, car je ne vois pas où vous vous voulez en venir.
Si vous savez vous mettre en ligne, souvent ça m'aide quand le programme n'as pas de commentaires. je vais sur l'appel du FB et je fait visualiser .
Il m'ouvre cette instance.
Si c'est une valeur Stat, bien vérifier les appels indirect, et faire occurrence suivante.
DurandO
Maître du binaire
Maître du binaire
Messages : 482
Enregistré le : 21 mars 2021, 15:31

Re: Ecriture dans un DB

Message par DurandO »

Bonjour,
Débutant a écrit : 24 janv. 2025, 16:49 Bonjour,
Je débute et je suis actuellement à la recherche d'informations concernant une zone de données d'un DB d'instance pour laquelle je ne trouve pas de traces de lecture ou d'écriture. L'API est un S7-300, les données sont des STAT. J'ai donc commencé par chercher dans le FB associé, puis par occurrences sur toute la plage du DB, je trouve des lectures et écriture sur certaines zone mais pas sur la plus grande partie de celui-ci...
Partant ce DB est copié vers un autre (DB stockage vers DB impression). Auriez vous un idée sur la question?

Merci d'avance!!
On peut accéder à de telles données de plusieurs manière.
1) Ces données peuvent être structurées et lues/écrites via un blockmove ou fill par exemple : dans ce cas on ne voit que l'accès au début de la zone.

2) via registre de DB, en ayant chargé le DB dans registre DB ou DI dans ce cas les références croisées n'aideront pas

Code : Tout sélectionner

    
    L 114
      T     #NumDB
      AUF   DB [#NumDB]
      u DBX100.0
      = DBX100.1
3) Ce code peut aussi être placé dans une fonction qui reçoit en entrée le DB on l’utilise ainsi à l’intérieur du FC :
Supposant IN_DB le nom du paramètre d'entrée de type DB

Code : Tout sélectionner

AUF IN_DB
4) dans une fonction qui reçoit en entrée le N°de DB. l’utilise ainsi à l’intérieur du FC :
Supposant NUMDB le nom du paramétré d'entrée de type INT

Code : Tout sélectionner

      AUF   DB [#NumDB]
 
5) Via les pointeur ANY
Le pointeur peut être passé en entré de bloc voici un exemple de son utilisation :
supposant V1 un paramètre d'entrée de type ANY

Code : Tout sélectionner

     L     P##V_1
      LAR1  

      L     D [AR1,P#6.0]
      L     DW#16#FF000000              //masque type Donnee Bloc Donnees (DB)
      UD    
      T     #DTmp

      L     #DTmp
      L     DW#16#81000000              //masque type Donnee (E)
      ==D   
      =     #AR1E

      L     #DTmp
      L     DW#16#82000000              //masque type Donnee (A)
      ==D   
      =     #AR1A

      L     #DTmp
      L     DW#16#83000000              //masque type Donnee Bloc Donnees (M)
      ==D   
      =     #AR1M

      L     #DTmp
      L     DW#16#84000000              //masque type Donnee Bloc Donnees (DB)
      ==D   
      =     #AR1DB

      L     B [AR1,P#1.0]               //Type de donnée
      T     #TData
      
      L     W [AR1,P#4.0]               //Numero de DB 
      T     #NumDB

6) via un pointeur ANY on peut aussi définir le DB dans l'octet 4.0 suivant l'exemple 5)
en supposant que le paramètre entré soit de type DB
le numéro de DB peut être modifié comme ceci

Code : Tout sélectionner

     L     P##V_1
      LAR1  
L 114
      T     W [AR1,P#4.0]               //Numero de DB 
   
On peut aussi construire ce pointeur ANY dans une fonction pour ensuite l'utiliser. On peut ainsi accéder à tout type de variable.

Conclusion : faire une recherche sur le DB concerné pour lister tout accès et ensuite analyser.
serhums
Code son premier grafcet
Code son premier grafcet
Messages : 39
Enregistré le : 16 oct. 2024, 13:04

Re: Ecriture dans un DB

Message par serhums »

Oui c’est parfois compliqué de retrouver le cheminement.
En plus tu n’as pas la source de ton programme ou perdu des données entre temps.

Tu peux aussi essayer de rechercher le SFC20 je crois, BLK_MOVE.
Répondre