[M340] Communication RS232 de caractères
[M340] Communication RS232 de caractères
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
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
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [M340] Communication RS232 de caractères
slts
Message_a_envoyer := %MB100:12 ;
Message_a_recevoir:= ?????????????????????????????????????????
Message_a_envoyer := %MB100:12 ;
Message_a_recevoir:= ?????????????????????????????????????????
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: [M340] Communication RS232 de caractères
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:='';
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:='';
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [M340] Communication RS232 de caractères
slts,
ya un message à recevoir ou ya pas de message à recevoir ?????????????,
Message_a_recevoir:= %MB???:14 ;
ya un message à recevoir ou ya pas de message à recevoir ?????????????,
Message_a_recevoir:= %MB???:14 ;
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: [M340] Communication RS232 de caractères
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.
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [M340] Communication RS232 de caractères
---clic pour zoom---
-
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: [M340] Communication RS232 de caractères
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.
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.
-
philou77
- Mi homme - Mi automate

- Messages : 2142
- Enregistré le : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: [M340] Communication RS232 de caractères
Salut !
Aller dans les options du projet, onglet variables et autoriser les tableaux dynamiques !
Aller dans les options du projet, onglet variables et autoriser les tableaux dynamiques !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! 
Re: [M340] Communication RS232 de caractères
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 ?
Y a-t-il autre chose que je dois faire ?
- itasoft
- Mi homme - Mi automate

- Messages : 7807
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: [M340] Communication RS232 de caractères
slts,
il faut tout reprendre tout le traitement des chaines par %MBxxx par le traitement chaines de caracteres façon unity
il faut tout reprendre tout le traitement des chaines par %MBxxx par le traitement chaines de caracteres façon unity
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
