faire transiter une chaine de caractères
-
Dhalsim
- Code son premier grafcet

- Messages : 40
- Enregistré le : 15 mars 2017, 06:35
- Localisation : Lyon
faire transiter une chaine de caractères
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
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
-
MiGaNuTs
- Mi homme - Mi automate

- Messages : 1579
- Enregistré le : 12 nov. 2015, 21:02
- Localisation : 45 - Loiret
- Contact :
Re: faire transiter une chaine de caractères
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)
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)
-
Dhalsim
- Code son premier grafcet

- Messages : 40
- Enregistré le : 15 mars 2017, 06:35
- Localisation : Lyon
Re: faire transiter une chaine de caractères
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.
-
MiGaNuTs
- Mi homme - Mi automate

- Messages : 1579
- Enregistré le : 12 nov. 2015, 21:02
- Localisation : 45 - Loiret
- Contact :
Re: faire transiter une chaine de caractères
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.
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.
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: faire transiter une chaine de caractères
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
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
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
Dhalsim
- Code son premier grafcet

- Messages : 40
- Enregistré le : 15 mars 2017, 06:35
- Localisation : Lyon
Re: faire transiter une chaine de caractères
Ok je vais essayer ça, merci
-
Dhalsim
- Code son premier grafcet

- Messages : 40
- Enregistré le : 15 mars 2017, 06:35
- Localisation : Lyon
Re: faire transiter une chaine de caractères
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.
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.
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: faire transiter une chaine de caractères
slts,
READ_VAR pour lire et WRITE_VAR pour écrire
READ_VAR pour lire et WRITE_VAR pour écrire
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
Dhalsim
- Code son premier grafcet

- Messages : 40
- Enregistré le : 15 mars 2017, 06:35
- Localisation : Lyon
Re: faire transiter une chaine de caractères
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 ?
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: faire transiter une chaine de caractères
slts,
indiquer le protocole ModBus RTU , ModBus TCP/IP ou autre
indiquer le protocole ModBus RTU , ModBus TCP/IP ou autre
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr