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
conversion programme TSX37 (fonction OUT_IN_CHAR) => M340
- itasoft
- 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
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
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
itasoft@free.fr
Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340
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...
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...
Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340
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.
- itasoft
- 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
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
%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
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
%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
itasoft@free.fr
Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340
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.
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.
Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340
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
je vérifie et donnerai le résultat.
Merci
Re: conversion programme TSX37 (fonction OUT_IN_CHAR) => M340 (RESOLU)
Merci itasoft,
c'était bien ca.
Tout fonctionne maintenant.
c'était bien ca.
Tout fonctionne maintenant.