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!!
Ecriture dans un DB
Re: Ecriture dans un DB
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.
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.
Re: Ecriture dans un DB
Bonjour,
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
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
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
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
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
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.
On peut accéder à de telles données de plusieurs manière.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!!
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
Supposant IN_DB le nom du paramètre d'entrée de type DB
Code : Tout sélectionner
AUF IN_DB
Supposant NUMDB le nom du paramétré d'entrée de type INT
Code : Tout sélectionner
AUF DB [#NumDB]
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
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
Conclusion : faire une recherche sur le DB concerné pour lister tout accès et ensuite analyser.
Re: Ecriture dans un DB
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.
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.


