Array of bool

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
job111a
Code sa première boucle
Code sa première boucle
Messages : 16
Enregistré le : 18 déc. 2015, 10:46

Array of bool

Message par job111a »

Bonjour,

Quelqu'un saurait il m'expliquer pourquoi sous unity lorsque l'on créer un tableau de booléen et que l'on donne pour adressage du premier booléen %MW0.0, le second a pour adresse %MW0.0 aussi puis le 3eme et 4eme ont %MW1.0 etc....Alors que la logique voudrait que le second est pour adresse %MW0.1 puis le 3eme %Mw0.2 etc...

Il y a certainement une explication a cela?
steph68
Codeur fou
Codeur fou
Messages : 269
Enregistré le : 21 oct. 2015, 08:23

Re: Array of bool

Message par steph68 »

Bonsoir,

Parce qu'un bool (ou ebool) occupe 1 octet de mémoire (8 bits) --> c'est l'unité la plus petite adressable
Pour optimiser la mémoire, il faut faire un tableau de Word et faire soi-même l'adressage à l'intérieur du mot (masquage, décalage ...)

@+
job111a
Code sa première boucle
Code sa première boucle
Messages : 16
Enregistré le : 18 déc. 2015, 10:46

Re: Array of bool

Message par job111a »

Merci pour ton explication

Saurais tu me dire comment fait on pour faire apparaître les bits de mot d'un mot dans les variables, a l'image de ce qui ce faisait sous PL7 pro?

Lorsque l'on double cliquait sur un mot, celui ci ce développait et laissait apparaître tous les bits de mots.
steph68
Codeur fou
Codeur fou
Messages : 269
Enregistré le : 21 oct. 2015, 08:23

Re: Array of bool

Message par steph68 »

Saurais tu me dire comment fait on pour faire apparaître les bits de mot d'un mot dans les variables, a l'image de ce qui ce faisait sous PL7 pro?

Lorsque l'on double cliquait sur un mot, celui ci ce développait et laissait apparaître tous les bits de mots.
tu ne peux pas sous Unity.

par programme, si tu as besoin de lire ou écrire un bit d'un mot de façon statique (le n° du bit est figé), tu peux utiliser cette syntaxe

Code : Tout sélectionner

variable.xx
où xx est le n° du bit

par ex : "MaSuperVariableEnInt.13" pour le bit 13 du "INT"

si le besoin est dynamique (le n° du bit est déterminé par un calcul), il faut d'abord calculer un masque (poids binaire du bit --> SHL(1, pos du bit) ) puis faire un OR (pour mise à 1) ou un AND NOT (pour mise à 0)

@+
job111a
Code sa première boucle
Code sa première boucle
Messages : 16
Enregistré le : 18 déc. 2015, 10:46

Re: Array of bool

Message par job111a »

Et a partir du moment ou l'on utilise ces bits de mots, apparaissent ils dans les variables et peut on y renseigner des commentaires?
steph68
Codeur fou
Codeur fou
Messages : 269
Enregistré le : 21 oct. 2015, 08:23

Re: Array of bool

Message par steph68 »

quand tu créées une variable, tu peux lui spécifier une adresse.
cette adresse peut correspondre à un bit de mot bien précis (par ex %MW100.13) .

dans ce cas uniquement, un bool devient un seul bit au niveau du stockage (ebool ne marche pas car sa structure interne est de 3 bits : état actuel + état précédent + état forçage).
dans tous les autres cas, un bool = un octet de stockage

--> c'est d'ailleurs ce principe qui est employé pour l'affectation des E/S (que tu ne peux pas déclarer en EBOOL).

par contre si le mot est lui même déclaré, tu vas avoir des avertissements de chevauchement de variable (sans autres conséquences ; tu peux réduire au silence ces avertissements via une option mais ça peut être utile dans d'autres cas que celui-ci ...)

il faut faire un choix, soit tu détailles au niveau du bit, soit tu restes au niveau du mot.

ce n'est pas une bonne pratique de donner une adresse à une variable (donc de la localiser en mémoire) sauf si c'est une variable de communication (avec un IHM par ex).

il faut laisser le compilateur faire son affectation en interne (qui ne sera pas dans l'espace des %MW qui sont limités en quantité)

sous unity il faut oublier tes habitudes de pl7 ... :mrgreen:

@+
job111a
Code sa première boucle
Code sa première boucle
Messages : 16
Enregistré le : 18 déc. 2015, 10:46

Re: Array of bool

Message par job111a »

oui effectivement je localise le moins possible, c'est tout l’intérêt de Unity, mais comme tu l'as deviner ces variables servent a la communication avec un IHM type xbtf et donc obligation d' avoir des variables localisées, pas de possibilités de créer un fichier de variables de lien comme sur un xbgt sous vijeo!!...Et désactiver la détection de chevauchement de variables m'ennuie, c'est bien utile, mais je n'aime pas non plus voir un programme bourré d'avertissements lol

Je vois donc qu'il n'y a pas de solution miracle comme je l'espérai

Merci pour ton aide
Répondre