Page 1 sur 2

faire transiter une chaine de caractères

Posté : 01 mai 2019, 14:02
par Dhalsim
Bonjour,

Je souhaiterais faire transiter une chaine de caractère entre 2 automates M340 sous Unity Pro.

Ci-dessous un exemple de mes variables :
TabMatiere[x].Description de type string [32]
Com_vers_API[y] de type WORD
Com_depuis_API[z] de type WORD

J'ai essayé de faire comme ceci dans le 1er automate :

Com_vers_API[0] := real_to_word (string_to_real (TabMatiere[1].Description)) ;

Et d'y récupérer dans le 2ème ainsi :

TabMatiere[1].Description := real_to_string (word_to_real (Com_depuis_API[0])) ;


Selon le texte que je rentre dans TabMatiere.Description dans ma table d'animation, je ne vois même pas la valeur changer dans mon WORD, et encore moins à la fin de l'échange.
Y a-t-il une autre façon de faire ? J'ai essayé avec string_to_int mais sans succès.
Merci pour votre aide

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 16:02
par MiGaNuTs
Bonjour.
Pourquoi tu veux te compliquer la vie a faire des conversions.
Dans chaque word tu a 2 caractères, tu a juste a transmettre assez de words pour avoir ta chaine en entier et basta (en l’occurrence 16 words pour avoir tes 32 caractères)

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 17:59
par Dhalsim
Parce que ma table d'échange est sur une longueur de 50 mots et qu'avec ta solution ça me fait 4x16=64 mots car à terme j'aurai 4 chaines de caractères de même taille à échanger.

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 18:56
par MiGaNuTs
C'est pas "ma" solution, un caractère texte ascii ça fait 8 bits. C'est le principe de base de la table ascii.
Du coup tu peut en mettre 2 dans un word, ou un seul si tu a de la place mémoire a gaspiller (et envie d’être emmerdé si jamais tu veux les afficher ou les imprimer quelque part)
A un moment ou un autre si tu veux stocker 4 chaines de 32 caractères, il te faudra 128 octets, et donc 64 "word".
Et encore je tient pas compte du \0, marqueur de fin de chaine de caractère qui est très souvent indispensable quand tu transmets du texte d'une machine a l'autre, et qui du coup te coute 1 octet de plus pour stocker ta chaine.

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 18:57
par itasoft
slts,
il faut passer par l'adressage absolu
Ex :
dans chaque automate déclarer une variable String[16] à l’adresse absolue %MW100
Via la COM faire un READ_VAR de 8 mots %MW à partir de @100 pour la retrouver dans l’autre automate

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 19:57
par Dhalsim
Ok je vais essayer ça, merci

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 20:35
par Dhalsim
Ca fonctionne, nickel.

Par contre si je veux pouvoir modifier la chaine de le 2ème automate pour la renvoyer dans le 1er, comment je peux faire ? En gros je souhaite pouvoir écrire des 2 côtés.
J'ai essayé de mettre une requête Read_Var dans le 1er automate mais ça ne prend pas.

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 20:39
par itasoft
slts,
READ_VAR pour lire et WRITE_VAR pour écrire

Re: faire transiter une chaine de caractères

Posté : 01 mai 2019, 20:57
par Dhalsim
J'ai essayé ça également mais ça se mord la queue. Ou alors il faut passer par des variables tampons pour ne pas lire/écrire en continu ?

Re: faire transiter une chaine de caractères

Posté : 02 mai 2019, 06:35
par itasoft
slts,
indiquer le protocole ModBus RTU , ModBus TCP/IP ou autre