[TIA V17] Mot double en 2 mot simple

Forum traitant des automates industriels de marque Siemens.
Avatar du membre
Sbukx
Première mise en service
Première mise en service
Messages : 51
Enregistré le : 15 janv. 2016, 14:59

Re: [TIA V17] Mot double en 2 mot simple

Message par Sbukx »

Salut,
Sur le principe tu as aussi cette possibilité:
DW1: DWORD
StrDW1: AT"DW1" Struct
W1: Word
W2: Word
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: [TIA V17] Mot double en 2 mot simple

Message par andala »

Merci pour toutes ces infos.
En effet la finalité est que je les ai en INT.
A savoir aussi que la valeur que je "coupe" en 2 est un real.
Aujourd'hui, ça marche avec l'utilisation du %MD30 avec %MW30 et %MW31 mais je voulais faire un bloc ou j'entre le REAL d'un coté et il me sort les 2 INT de l'autre

Quant à ça :
steph68 a écrit : 09 nov. 2023, 19:49 ma petite pique sur l'école ne s'adressait pas à toi mais à l'auteur du post ;)
En fait je n'ai pas appris a l’école mais je suis autodidacte donc certaine chose qui sont évidente pour vous ne le sont pas pour moi. Et c'est aussi pour ça que j'ai du mal avec le langage structuré surtout quand il y a des manipulation de bit
Une bonne action en entraine toujours une autre
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: [TIA V17] Mot double en 2 mot simple

Message par andala »

En fait ce dont j'ai besoin est simple :
Le real :
0100 0111 0110 1010

J'ai besoin qu'il soit juste Split en 2 INT même si les int ne sont pas exploitable directement (ils sont transmis vers un registre):
INT 1 :
.... .... 0110 1010
INT 2 :
0100 0111 .... ....
Une bonne action en entraine toujours une autre
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1572
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: [TIA V17] Mot double en 2 mot simple

Message par MiGaNuTs »

En coupant un INT en deux, tu a un problème de quantité d'informations.
Ton DINT contient 1 bit pour le signe, et 31 pour la "valeur".
Quant tu le coupe en deux, tu a deux INT qui ont chacun un bit pour le signe et 15 pour la "valeur". Du coup tu a perdu 1 bit qui contenait une partie de la valeur de départ dans l'opération.
Pour le codage des flottants, c'est un chapitre a lui tout seul. Les couper en deux, c'est doublement pas possible. D'une part part que les flottants sur 16 bit ça n'existe pas sur les S7, et d'autre part la façon dont les données sont stockées dedans fait que c'est pas possible de le couper (du moins pas facilement juste avec des masques et des décalages)
Avec de la chance ça peut tomber en marche, mais je suis pas certain que ça soit très répétable.
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: [TIA V17] Mot double en 2 mot simple

Message par andala »

Aujourd'hui ça fonctionne comme ça :
Prog bloc.jpg
BLOC.jpg
Sur mes #output_value1 et #output_value2 j'ai mes 2 INT

Mais je souhaitais faire quelque chose de plus élégant et ne pouvoir ne mettre que le #input_value et les 2 #output_value1 et #output_value2

Mais si c'est pas possible, c'est pas possible... :D

PS : le #input_value et le #output_value sont des Real et les #output_value1 ET #output_value2 sont des INT
Une bonne action en entraine toujours une autre
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: [TIA V17] Mot double en 2 mot simple

Message par steph68 »

fais la technique de @sbukx avec le mot-clé AT (chevauchement de 2 données différentes)
sinon ton REAL va être converti en DWORD

remplace DWORD par REAL

sinon un MOVBLK d'un REAL vers un ARRAY de 2 WORD fera aussi l'affaire, mais moins propre que le mot-clé AT

l'adressage absolu (%MW, %MD) est à proscrire ... c'est "has been" :mrgreen:

@+
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: [TIA V17] Mot double en 2 mot simple

Message par steph68 »

En fait je n'ai pas appris a l’école mais je suis autodidacte donc certaine chose qui sont évidente pour vous ne le sont pas pour moi. Et c'est aussi pour ça que j'ai du mal avec le langage structuré surtout quand il y a des manipulation de bit
je veux pas être méchant, mais automaticien est un métier, ça ne s'improvise pas.
je sais bien qu'on est dans la génération "tuto youtube" ..., mais là on joue avec des machines ...

@+
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: [TIA V17] Mot double en 2 mot simple

Message par andala »

steph68 a écrit : 10 nov. 2023, 10:40
En fait je n'ai pas appris a l’école mais je suis autodidacte donc certaine chose qui sont évidente pour vous ne le sont pas pour moi. Et c'est aussi pour ça que j'ai du mal avec le langage structuré surtout quand il y a des manipulation de bit
je veux pas être méchant, mais automaticien est un métier, ça ne s'improvise pas.
je sais bien qu'on est dans la génération "tuto youtube" ..., mais là on joue avec des machines ...

@+
J'ai déjà mis en route plusieurs usines qui fonctionne très bien, avec des systèmes complexes, des gestion de données, des base de donnée et des système de recette sans compter des supervisions et des IHM industriel.
J'en apprends tous les jour sur l'automatisme et ce que je fais fonctionne très bien (la preuve c'est qu'ici, je cherche seulement a optimisé et rendre plus élégante ma solution)
Bloquer sur un élément ne signifie pas que je suis mauvais partout...
De plus tu suppose que je suis, et je te cite :
steph68 a écrit : 10 nov. 2023, 10:40
génération "tuto youtube"
mais tu te trompe. J'aime mon métier et ce que je fait...
Avoir appris a l'école le métier ne fait pas de toi un meilleur automaticien que moi ;)
Une bonne action en entraine toujours une autre
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: [TIA V17] Mot double en 2 mot simple

Message par steph68 »

MiGaNuTs a écrit : 10 nov. 2023, 10:12 En coupant un INT en deux, tu a un problème de quantité d'informations.
Ton DINT contient 1 bit pour le signe, et 31 pour la "valeur".
Quant tu le coupe en deux, tu a deux INT qui ont chacun un bit pour le signe et 15 pour la "valeur". Du coup tu a perdu 1 bit qui contenait une partie de la valeur de départ dans l'opération.
non ce n'est pas comme cela que ça marche
c'est un complément à 2 de la valeur : https://fr.wikipedia.org/wiki/Compl%C3% ... C3%A0_deux
et le bit le plus significant témoigne de ce complément à 2 : c'est le fameux bit de signe

donc si j'ai -1 soit 16#FFFF_FFFF en 32 bits signé, j'aurai toujours -1 soit 16#FFFF en 16 bits signé.

@+
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: [TIA V17] Mot double en 2 mot simple

Message par andala »

Sbukx a écrit : 09 nov. 2023, 22:01 Salut,
Sur le principe tu as aussi cette possibilité:
DW1: DWORD
StrDW1: AT"DW1" Struct
W1: Word
W2: Word
J'ai pas bien compris ce que tu veux que je fasse par la.
Donc je converti le real de mon input en Dword
je fait une structure du Dword ? c'est ça ?
Je fait comment pour faire une structure de ce Dword là ?
La partie qui m'est flou c'est : AT"DW1" Struct
Une bonne action en entraine toujours une autre
Répondre