Page 1 sur 2

conversion 2 INT en REAL

Posté : 27 mars 2018, 17:10
par geronimo
Bonjour,
Je cherche une fonction Siemens pour Step 7 pour faire un real avec 2 INT

Depuis un API Schneider j'envoi un real dans 2 INT sauf que dans le siemens je ne sais pas comment reconstituer mon REAL
RealSchneider = 65 000
INT1 Siemens = -6144
INT2 Siemens = 18301

Merci pour votre aide

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 17:18
par itasoft
slts,
comment tu ferais ça si c’était sur un Schneider à la place du Siemens ?

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 18:41
par bipcoyote
bonjour,

Comprends pas ta question ?, tu lis simplement le real MF. ou dans les DBs, DBx.DBDy avec en déclaration REAL
Ou cela proviens d'une communication ?

En attente,++

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 18:52
par itasoft
slts,
je modifie la question.
Depuis un API Schneider (A) j'envoi un real dans 2 INT vers un autre automate Schneider (B) , comment reconstituer mon REAL dans l'automate (B)

tu sais comment ?

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 19:09
par bipcoyote
slt,

Pas pour toi itasoft mais pour geronimo la question.

++

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 19:17
par Ulairi
Bonjour,

Par exemple
- tu stockes l'entier le poids fort à l'emplacement MW10 (octet 10 + octet 11)
- tu stockes l'entier de poids faible à l'emplacement MW12 (octet 12 + octet 13)
- tu déclares une variable de type REAL à l'adresse MD10 (octet 10 + octet 11 + octet 12 + octet 13)

Aucune fonction à utiliser.

Image

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 19:40
par itasoft
slts,
coté Unity on ne peut le faire que par l'adressage absolu , reste à savoir si sur Siemens existe l'adressage absolu
sur unity:
nom=REAL000 type=REAL adresse=%MW10
et envoi %MW10 et %MW11 au Siemens
sur le Siemens on peut reconstituer le REAL que par un adressage absolu. ceci dit il faudrait tester ton exemple.

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 23:21
par geronimo
Merci pour vos réponses. Comme l'a dit Itasoft c'est ça mais l'automate B est en Siemens.
itasoft a écrit : 27 mars 2018, 18:52 slts,
je modifie la question.
Depuis un API Schneider (A) j'envoi un real dans 2 INT vers un autre automate Schneider (B) , comment reconstituer mon REAL dans l'automate (B)

tu sais comment ?
En fait dans mon DB de Com venant de l'automate Schneider je n'ai que des INT ( j'ai pas le droit de la modifier).
Du coup en Schneider j'ai envoyer 65000 dans ma variable REAL à l'adresse %MW600, coté Siemens je reçois dans la variable db6.DBW250 = -6144 et dans la variable Db6.DBW252 = 18301.
J'ai essayer en prenant la variable Db6.DBD250 mais je n'ai rien de cohérant.
Je voudrais récupérer ma valeur 65000 coté Siemens.

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 23:36
par itasoft
slts,
l'exemple à Ulairi doit marcher car apparemment ça ne travaille que sur des adresses absolues
(ceci dit, je suis pas spécialiste Siemens et espère ne pas le devenir, lol)

Re: conversion 2 INT en REAL

Posté : 27 mars 2018, 23:57
par Ulairi
Il faut inverser les valeurs, ton entier de poids fort (comprenant l'exposant et le début de la mantisse) est celui dont la valeur est 18301 ; ton entier de poids faible (comprenant la fin de la mantisse) est celui dont la valeur est -6144.

Autrement dit, tu ne peux utiliser la variable Db6.DBD250 que si tu as rangé tes deux entiers dans le db6 de manière à avoir db6.DBW250 = 18301 et Db6.DBW252 = -6144.

D'abord l'entier de poids fort, puis ensuite l'entier de poids faible.