conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
roberto
Code sa première boucle
Code sa première boucle
Messages : 14
Enregistré le : 16 janv. 2017, 22:28

conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Message par roberto »

Bonjour,
Voila mon problème de programmation.

J’ai l’installation suivante qui fonctionne parfaitement:
• Automate TSX 3721 + Carte PCMCIA TSX SCP111 avec laquelle je communique en mode caractère (RS232) avec un colorimètre sensor-instrument en utilisant la fonction OUT_IN_CHAR qui me permet d’échanger des tableaux d’octets.
Je transfert notamment la trame suivante :
55 08 00 00 00 00 AA 76 en Hexa (tableau de 8 octets donc 4 mots)

Je veux faire la même chose avec la configuration suivante :
Automate M340 BMXP341000 + module BMX NOM0200

• 1er problème résolu : l’équivalent de la fonction OUT_IN_CHAR n’existe pas sur le M340 :
il faut utiliser les fonctions PRINT_CHAR (pour écrire) et INPUT_CHAR (pour lire). Ca c’est ok

• 2eme problème résolu : on ne peut pas échanger (a priori dixit Schneider) directement des tableaux d’octets, mais uniquement des caractères ASCII :
par exemple dans mon cas pour envoyer 55 08 je dois envoyer U$08 (la fonction ASCII_TO_STRING permet de faire ce changement de type). Ca c’est ok

• 3eme problème non résolu : je ne sais pas quoi envoyer pour obtenir l’octet suivant :
00 car dans ce cas, la fonction ASCII_TO_STRING me renvoie une chaine vide et si j’envoie une trame vide il ne se passe rien.

Il me faut donc l’équivalent ASCII de 00. Bien évidement Schneider me propose le niveau 2 avec les points qui vont avec…

Cordialement
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7124
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Message par itasoft »

Slts,
c’est pas très clair, il faut dire ce que tu met dans les %MB pour la fonction
ex : OUT_IN_CHAR(ADR#{20.5}0.0.SYS, 1, %MB300:18, %MB316:18, %MW170:4)
c'est ça ?
%MW150:=16#5508
%MW151:=16#0000
%MW152:=16#0000
%MW153:=16#AA76
ou ça ?
%MB300:18:='550800000000AA76';

sinon ya ça:
our envoyer des chaînes de caractères contenant des caractères de fin de chaîne (NULL). Vous devez :
-utiliser des chaînes localisées,
initialiser le dernier mot de la table de gestion des échanges avec le nombre de caractères à envoyer.
Si vous initialisez le mot avec la valeur 0, la chaîne envoyée s'arrête au premier caractère ZERO qu'elle rencontre.
Si vous initialisez le mot avec une valeur, la longueur de la chaîne de caractères envoyée est soit cette valeur.

ou utiliser DATA_EXCH
Automaticien privé (de tout)
itasoft@free.fr
roberto
Code sa première boucle
Code sa première boucle
Messages : 14
Enregistré le : 16 janv. 2017, 22:28

Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Message par roberto »

Salut,
sur le tsx37, voila ce qui marche:
OUT_IN_CHAR(ADR#0.1.SYS,1,%KB60:8,%MB522:50,Controle_com_1:4) avec
%KW30:= #0855
%KW31:= #0000
%KW32:= #0000
%KW33:= #76AA
dans ce cas mon colorimètre reçoit: 55 08 00 00 00 00 AA 76 et ca marche.

Qu'appelez vous "caractères de fin de chaine NULL" :
si j'envoi 2 espaces ' ' je reçois 20 20
si j'envoi '00' je reçois 30 30
si j'envoi une chaine vide '' en initialisant le nb de caractères a envoyer, j'ai un retour compte rendu de communication = 16#000E => longueur incorrecte.

voila, merci pour votre implication...
roberto
Code sa première boucle
Code sa première boucle
Messages : 14
Enregistré le : 16 janv. 2017, 22:28

Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Message par roberto »

J'ai oublié, DATA_EXCH ne fonctionne pas dans mon cas (réservé pour des équipements modbus ou unitelway) ce qui n'est pas le cas de mon colorimètre.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7124
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Message par itasoft »

slts,
Chaine null ça veut dire chr(0)
-utiliser des chaînes localisées, ça veut dire avec une adresse absolue
EX:
cliquer dessus pour agrandir
chaineNull.JPG

%KW30:= #0855
%KW31:= #0000
%KW32:= #0000
%KW33:= #76AA

Ceci dit, DATA_EXCH n’est pas reservé exclusivement à des protocoles, ça envoi ce que on y met dedans

notice:
Sur les automates Modicon M340, l'utilisateur peut coder un protocole privé et libre


en conclusion, c'est bien DATA_EXCH l'équivalent
Automaticien privé (de tout)
itasoft@free.fr
roberto
Code sa première boucle
Code sa première boucle
Messages : 14
Enregistré le : 16 janv. 2017, 22:28

Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Message par roberto »

Salut,
en utilisant les variables localisées comme tu le préconises, même en initialisant la longueur de chaine, la fonction n'envoi que la première partie de la trame ( pour elle le caractère 0 correspond a une fin de chaine du coup elle n'envoie que les 2 premiers caractères 'U$08' et mon colorimètre ne reçoit que 5508).

Je vais réessayer avec DATA_EXCH mais dixit support Schneider ce n'est pas la fonction qu'il me faut.
roberto
Code sa première boucle
Code sa première boucle
Messages : 14
Enregistré le : 16 janv. 2017, 22:28

Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340

Message par roberto »

je crois que j'ai trouvé, j'ai fait une boulette j'avais une ligne de programme qui m'initialisait la longueur a envoyer a 0.
je vérifie et donnerai le résultat.
Merci
roberto
Code sa première boucle
Code sa première boucle
Messages : 14
Enregistré le : 16 janv. 2017, 22:28

Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340 (RESOLU)

Message par roberto »

Merci itasoft,
c'était bien ca.
Tout fonctionne maintenant.
Répondre