Page 1 sur 1

Comment connaitre le numéro de DB instancié ?

Posté : 30 nov. 2020, 12:39
par bipcoyote
Bonjour,

J'ai crée un FB1000 instancié, d'ou un numéro de DB1000 lors de l'appel dans OB1 (par exemple).
Dans ce FB crée, c'est un programme d'enregistrement avec l'utilisation de pointeur.

Par contre, si je veux écrire dans le DB instancié, la solution la plus simple pour la localisation du DB c'est AUF DB1000,
OU
Mettre en Patte IN du FB, le numéro du DB.

MAIS
Comment connaitre le numéro de DB instancié du FB sans faire les 2 solutions ?

AUF DB[valeur de l'instance]

En attente de vous lire.
Merci.

Re: Comment connaitre le numéro de DB instancié ?

Posté : 30 nov. 2020, 13:03
par Lorent2
De mémoire, il suffit de lire le DIX y.z ou le DIWzz ou le DIDzz.

Re: Comment connaitre le numéro de DB instancié ?

Posté : 30 nov. 2020, 13:11
par philou77
Salut !

Sur les anciennes générations d'automates on écrivait dans le dernier DB ouvert si on ne faisait pas de nouvelle déclaration d'ouverture.
De même qu'un DB restait ouvert jusqu'au BE du bloc qui avait provoqué son ouverture !
Il y avait une pile de DB ...

Partant de là, si ton bloc instancié n'ouvre pas d'autre DB (AUF Dbxx) , toute écriture dans un DB devrait se faire dans son DB d'instance !


A voir ici une petite explication.
https://support.industry.siemens.com/cs ... 0&lc=fr-FR

Et c'est donc si difficile de voir quel DB est ouvert, qu'ils préconisent une écriture DBxx.DBByyy afin d'être sûr d'écrire ou lire dans le bon DB.

A voir si dans les blocs systèmes , il y aurait pas un bloc qui te permette de lire la pile des blocs DB !

Re: Comment connaitre le numéro de DB instancié ?

Posté : 30 nov. 2020, 13:59
par bipcoyote
Merci,
Mon bloc d'enregistrement de données événementiel fonctionne.
//Indexage date et heure
L #Pointeur
SLD 3
LAR1
L DID 32
T DID [AR1,P#0.0]
L DID 36
T DID [AR1,P#4.0]

//Données
L #D_R_0
T DID [AR1,P#8.0]
L #D_R_1
T DID [AR1,P#12.0]
L #D_R_2
T DID [AR1,P#16.0]
L #D_R_3
T DID [AR1,P#20.0]

:D

Re: Comment connaitre le numéro de DB instancié ?

Posté : 30 nov. 2020, 14:05
par Lorent2
Ça va, j'ai une bonne mémoire alors :mrgreen:

Re: Comment connaitre le numéro de DB instancié ?

Posté : 30 nov. 2020, 14:50
par philou77
Re !

Oups ai fait une knaki... suis passé à côté d'une chose simple !

Re: Comment connaitre le numéro de DB instancié ?

Posté : 30 nov. 2020, 20:31
par steph68
Salut,

Le registre AR2 contient l'offset du FB en cours dans le DB d'instance.
Et le DB d'instance est indexé par le registre DI et donc les fonctions d'indexage DIX, DIB, DIW, DID ...

Il ne faut pas oublier que les FB peuvent s'imbriquer les uns dans les autres, d'où l'offset AR2.

Si tu utilises un pointeur sur une variable statique de ton FB, ce pointeur sera le décalage par rapport au couple DI / AR2.

Tu devrais pouvoir faire de l'indexage en pure "symbolique".

@+