Page 1 sur 1

[M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 12:02
par Luvidia
Bonjour à tous,

je commence un projet sur M340 (Control Expert TRIAL) consistant en partie à migrer un projet de TSX (Pl7 Pro) vers le nouveau M340.
J'ai notamment de la communication RS232. Le code initial utilisait des instructions ST du type:


%MB100:4 := Debut_Trame;
%MB104:2 := Milieu_Trame;
%MB106:6 := Fin_Trame;

Message_a_envoyer := %MB100:12 ;

OUT_IN_CHAR(ADR#2.1.SYS,2,Message_a_envoyer:12,Message_a_recevoir:14,Activite:4);




(j'ai vu que le OUT_IN_CHAR était remplacé par PRINT_CHAR et INPUT_CHAR désormais)
Le message est une chaîne de caractères.

Cependant, je ne peux visiblement plus utiliser les instructions du type %MB100:4, le ':' est considéré comme une erreur de syntaxe ou bien 'L'utilisation d'instruction de saut est inhibée'.
Comment puis-je continuer à faire la même opération sur mes octets sans avoir d'erreur ?

De plus, j'ai une erreur 'l'utilisation de tableaux dynamique est inhibée' sur la partie ADDM('0.0.0') lorsque j'écris la ligne:
PRINT_CHAR(ADDM('0.0.0'),Message_a_envoyer:12,Activite:4);

Comment cela se fait-il sachant que j'ai pourtant recopié l'exemple de l'aide de Control Expert ?

Merci pour vos réponses,

Luvidia

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 12:10
par itasoft
slts
Message_a_envoyer := %MB100:12 ;
Message_a_recevoir:= ?????????????????????????????????????????

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 12:17
par Luvidia
Bonjour, le message_a_recevoir devrait plutôt s'appeler 'message_recu' puisqu'il est écrit par la fonction OUT_IN_CHAR lorsque le deuxième paramètre est à 1 ou 3. La doc de PL7 précise que la variable doit quand même être indiquée (mais vide) s'il n'y a pas de message à recevoir.

Je n'ai pas mis l'intégralité du code évidemment mais plus haut j'ai une ligne qui initialise le contenu de mon message:
Message_a_recevoir:16:='';

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 12:30
par itasoft
slts,
ya un message à recevoir ou ya pas de message à recevoir ?????????????,

Message_a_recevoir:= %MB???:14 ;

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 12:45
par Luvidia
Dans le cas d'un envoi, il n'y a pas de message à recevoir. Cependant, sur Pl7, la fonction OUT_IN_CHAR (qui fait l'envoi, la réception ou bien les deux à la fois) oblige qu'il y ai une variable de renseignée. Ici, cette variable s'appelle Message_a_recevoir mais demeurera vide car je ne cherche qu'à envoyer.

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 12:57
par itasoft
---clic pour zoom---
01.JPG
-
03.JPG

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 13:47
par Luvidia
Merci pour votre réponse,

malheureusement cela ne me permet pas de résoudre mon problème.
En effet, pour simplifier, ma trame a une taille variant de 16 à 18 caractères. Elle est adressé en %MB270. Elle se compose de 3 parties:

- Début de la trame de 11 caractères (11 octets fixe) allant de %MB270 à %MB280. Dans le code original, cela est noté: %MB270:11. Le message est écrit en dur dans le code et ne dépend pas d'une variable.

- Le code à transmettre faisant 4, 5 ou 6 caractères suivant les conditions. Pour cela, on récupère une chaîne, qui fait initialement 8 caractères, et on en extrait soit les 4, 5 ou 6 premiers pour les mettre dans notre trame. La plage peut aller jusqu'à %MB286

- La fin de la trame, faisant 2 ou 3 caractères suivant les conditions. La plage va, pour le message le plus court, de %MB284 à %MB285 et pour le plus long à %MB286 à %MB87. Le message est écrit en dur dans le code et ne dépend pas d'une variable.

Je suis donc obligé de faire des opérations sur des string pour ne sélectionner que la plage d'octets qui m'intéresse. D'où le fait que le code original contienne la notation %MB272:4 par exemple pour pouvoir sélection les octets de %MB272 à %MB275 ou bien ChaineDeCaractere:3 pour sélectionner les 3 premiers caractères contenus dans la variable ChaineDeCaractere.

Cette syntaxe (le ':') ne fonctionne plus sous Control Expert et je souhaiterais savoir quelle syntaxe (si plus de syntaxe, quel stratagème?), je peux utiliser pour sélectionner des plages d'adresses.

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 14:02
par philou77
Salut !

Aller dans les options du projet, onglet variables et autoriser les tableaux dynamiques !

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 15:10
par Luvidia
Merci, j'ai fait cela et l'erreur 'l'utilisation de tableaux dynamique est inhibée' n'apparaît plus. Cependant, je ne peux toujours pas utiliser l'instruction %MB100:4 sur mes octets ou sur mes chaînes de caractères.
Y a-t-il autre chose que je dois faire ?

Re: [M340] Communication RS232 de caractères

Posté : 21 avr. 2022, 15:55
par itasoft
slts,
il faut tout reprendre tout le traitement des chaines par %MBxxx par le traitement chaines de caracteres façon unity