Page 1 sur 2

Changement d’adresse

Posté : 30 mars 2025, 16:53
par Lionel83
Bonjour,

J’avais une petite question, quand j’ai modifié un programme j’ai remarqué que certain bit du mot on changé d’adresse alors que je ne l’ai pas modifié eux j’ai juste rajouté un voir plusieurs bit de mot avec leur adresse.

Exemple: le bit de mot %MW2000.10 qui est (arrêt d’urgence) a changé d’adresse pour être %MW2000.11 .

Cela se produit quand je génère le programme.

Si vous avez des informations je suis preneur merci à vous .

Re: Changement d’adresse

Posté : 30 mars 2025, 19:15
par Bruce33
Bonjour,
Quel est le type de la variable (à l'adresse %MW2000.10 ou %MW2000...) ?
Pouvez-vous nous donner des instructions pour reproduire le phénomène ?

Re: Changement d’adresse

Posté : 30 mars 2025, 21:08
par Lionel83
Re,

La variable est de type word avec un un bit de type INT et des bits de rank mais je suis pas sûr à 100% je verrais demain au boulot mais ça me la fait qu’une fois, je modifié mon programme je générer je modifié je génèré et un moment j’ai constaté que des adresses c’était décalé de 1 voir de deux.

Re: Changement d’adresse

Posté : 30 mars 2025, 21:09
par Lionel83
Ce sont des bools

Re: Changement d’adresse

Posté : 30 mars 2025, 22:05
par Bruce33
OK ce sont des BOOL mais ce qui m'intéresse c'est de savoir s'ils appartiennent à une structure.
Si le bit se retrouve décalé c'est forcément qu'il y a eu une modification sur une définition de variable.

Re: Changement d’adresse

Posté : 31 mars 2025, 09:07
par MiGaNuTs
On ne sait pas comment tes variables sont déclarées.
On sait même pas de quel logiciel/automate Schneider on parle.

Je veux bien jouer a deviner de quoi on parle pour essayer de proposer des solutions ou des pistes de réflexion, mais ma boule de cristal a ses limites.
Et si en plus tu réponds des trucs comme ça quand on te demande de nous aider
Lionel83 a écrit : 30 mars 2025, 21:09 Ce sont des bools
Le seul truc que ça m'inspire c'est de passer mon tour.

Re: Changement d’adresse

Posté : 31 mars 2025, 21:45
par Lionel83
Re,

Désolé oui les bools font partis d’une structure, le logiciel c’est unity pro Schneider.

J’ai modifié dans la structure pour rajouter des bools mais j’ai pas l’impression d’avoir modifié les variables déjà présentent dans la structure.

C’est bizarre pourtant dans d’autre structure que j’ai modifié aucune variables s’étaient décalées.

C’est possible sans le vouloir j’ai du modifié une ligne du programme qui m’a fait décalé les variables.

Re: Changement d’adresse

Posté : 31 mars 2025, 22:08
par Bruce33
Une ligne de programme ne modifie pas la définition d'une variable.
En revanche si vous insérez un élément dans une structure cela peu décaler d'autres éléments de la structure.
Faites des copies d'écran ou donnez plus de précisions parce que les informations sont beaucoup trop vagues.

Re: Changement d’adresse

Posté : 01 avr. 2025, 09:09
par MiGaNuTs
Effectivement quand tu rajoute un bool a la fin d'une structure, que la variable précédente est aussi un bool et qu'il reste de la place dans le word les qui contient, le compilateur optimise et mets ce nouveau bool dans le même word, ce qui peut décaler des trucs.
Si tu rajoute un word puis un bool, il ne décale rien car il ne peut pas optimiser 'automatiquement'.
Pour éviter de gâcher de la mémoire le mieux c'est de grouper les float et les dint au début (qui prennent 2 word et demandent des adresses paires), puis les word et les int, puis les ebool et les bool.
Si tu mets un bool, un word, de nouveau un bool puis un float, félicitations tu a réussi a créer une structure qui gaspille le plus de mémoire possible. ton premier bool prends un word a lui tout seul, ton 2eme aussi et ensuite tu a un word vide juste pour pouvoir mettre le float dans une case mémoire paire. Tu mange 6 words pour stocker ta structure
Si tu fait float, word, bool, bool tu n'en utilise plus que 4.
Quand ton projet comporte plusieurs centaines de structures ca va tres vite. Surtout qu'en plus de gaspiller de la mémoire tu gaspille du temps de communication.

Re: Changement d’adresse

Posté : 01 avr. 2025, 20:45
par Lionel83
Re Miganuts et Bruce,

Désole je mets du temps à répondre mais compliqué avec le boulot et les enfants.

Quand vous dites un Float vous parlez d'un type REAL ou flottant à virgule?

Donc si j'ai bien compris Une variable de type DINT ou FLOAT on doit la stocker aux adresses paires tel que %MW0, %MW4,%MW8, %MW12 parce qu'ils ocupent 4 octets soit une valeur de 32Bits donc des adresses de multiple de 4 finalement et pour les type INT on prend des adresses aux multiple de 2
%MW1, %MW2, %MW3 ect..

OK j'ai compris le principe d'optimiser la mémoire et la cohérence du programme.

Des que je peux je vous écrirais la structure, je vais essayer demain.