M241 – Communication ASCII RS232 en langage ST avec Arduino

Forum traitant des automates industriels de marque Schneider - Telemecanique
gerard13
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 09 janv. 2017, 08:10

M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par gerard13 »

Bonjour à toutes et tous,

Je commence par ma configuration :
SoMachine v4.1
Automate Schneider TM241CEC24T
Arduino MEGA 2560

J’utilise l’automate M241 pour ses fonctions bien spécifiques.

Je décentralise des microcontrôleurs Arduino Mega 2560 R3, 1 maître et 5 esclaves

Les Arduino communique entre-elles via I2C, tout est parfait de ce coté là.

Maintenant je cherche à communiquer entre le M241 et l’Arduino maître via le port com RS232 en ASCII, pas en ModBus ou CanOpen, etc...

Les datas que je souhaite échanger seront de type chaine de caractères (de 1 caractère à 16 maxi).

Je souhaite programmer le M241 en langage ST.

Je pêche sur le sujet car je manque de documentation, tuto… sur le sujet, si vous avez une piste, n’hésitez pas, je suis preneur.

Je ne sais pas trancher un choix de commande entre SEND_RECV_MSG, ou WRITE_VAR et READ_VAR, ou SERIAL_R et SERIAL_W, ou autre….. ?, ni comment exactement d’ailleurs.

Dans SoMachine, je ne sais trop quoi installer sous le port Serial_Line_1, je l’ai tout de même configuré en RS232 et y ai installé le manager ASCII.

Maintenant, si je pouvais disposer d’exemples de code en ST traitant les échanges ASCII sur la RS232 d’un M241, cela me serait d’une aide précieuse.

Voilà, dans l’attente de l’aide d’un expert en la matière, je continu mes recherches…

Code : Tout sélectionner

B := "Toto";   (*La variable B = Toto*)

%QX0.0:=%IX0.0; (*Allume une LED sur Q0.0*)

IF %IX0.0=1            (*Si l'entrée I0.0 = 1*)
       THEN
                               (*Envoi sur la ligne série 1*)
        %QX0.1:=1;     (*Et monte la sortie Q0.1 à 1 et y reste*)
                             
END_IF;
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par Cyril93 »

Salut,

La doc pour la serial line

http://www.schneider-electric.us/en/dow ... 000000361/

voir la page 40 pour un message utilisateur en ASCII
gerard13
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 09 janv. 2017, 08:10

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par gerard13 »

Bjr Cyril93,

Oui j'ai bien cette doc en FR, mais rien en langage St sur le sujet, et très compliqué pour moi de convertir les blocs fonctions en littéral structuré.

je vais tenter tout de même...

Et pour la commande entre SEND_RECV_MSG, ou WRITE_VAR et READ_VAR, ou SERIAL_R et SERIAL_W, ou autre….. ? t'as une idée?

Merci pour ton aide
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par Cyril93 »

Il n'y a rien à convertir, tu appels le bloc et tu renseignes les E/S avec tes variables (Voir Page 53 utilisation d'un bloc fonction en langage ST).
Pourquoi choisir le langage ST si c'est celui que tu maîtrises le moins ?

exemple d'appel d'une tempo (bloc fonction avec instance)

Code : Tout sélectionner

VAR
timer : TON;		// déclaration de timer instance de TON
demarre : BOOL;
duree : TIME;
fini : BOOL;
tempsEcoule : TIME;
END_VAR

timer(IN:=demarre  , PT:=duree , Q=>fini  , ET=>tempsEcoule );

gerard13 a écrit : Et pour la commande entre SEND_RECV_MSG, ou WRITE_VAR et READ_VAR, ou SERIAL_R et SERIAL_W, ou autre….. ? t'as une idée?
page 43 comment envoyer "hello" en ASCII sur la ligne série
gerard13
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 09 janv. 2017, 08:10

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par gerard13 »

Ok Cyril et encore merci,

Je tente de m'exercer suivant l'exemple inclus page 44 de la doc SoMachine "Fonctions Lecture Ecriture Modbus et ASCII Guide de la bibliothèque PCLCommunication" - EIO0000000742.10.pdf
http://download.schneider-electric.com/ ... 742.10.pdf

J'ai installé le manager ascii sur le Serial Line 1.
Je recopier le CFC à la lettre.

Mais impossible de compiler, j'ai un message d'erreur :
C0032: Cannot convert type 'ARRAY [1..255] OF BYTE' to type 'ARRAY [0..10] OF BYTE'

Qu'est-ce que j'ai raté ou zappé encore??

Merci de ton aide Cyril,


Test Line Serial 1-1.JPG
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par Cyril93 »

Salut,

Essaie de déclarer
HelloInBytes : ARRAY [1..255] OF BYTE;
gerard13
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 09 janv. 2017, 08:10

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par gerard13 »

Salut Cyril,

J'imagine que parle de déclarer "HelloInBytes : ARRAY [1..255] OF BYTE;" dans variables locales...?

Comme c'était déjà le cas, je l'ai supprimé puis réinscrite, mais toujours cette erreur : C0032: Cannot convert type 'ARRAY [1..255] OF BYTE' to type 'ARRAY [0..10] OF BYTE'

Donc, je l'ai carrément supprimée et recompilé sans, donc 4 erreurs dont :C0046: Identifier 'HelloInBytes' not defined

Puis, j'ai de nouveau recréé cette variable, mais toujours cette erreur C0032: ...

J'ai ajouté une sortie sur done du module SEND_RECV_MSG..., on sait jamais, mais non, nada...

Je suis coincé là,

j'épluche cette doc sur String TO ARRAY OF BYTE, mais rien d'anormal :
http://www.schneider-electric.fr/fr/dow ... 000000097/

J'ai visiblement sauf erreur de ma part les bibliothèques Toolbox et Toolbox Advanced d'installées, enfin je pense puisque que j'arrive à créer les blocs fonctions référencés dans ces bibliothèques.
Test Line Serial 1-2.JPG
gerard13
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 09 janv. 2017, 08:10

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par gerard13 »

Cyril,

Ca y est, il tourne se programme, compil et run OK,

Il ne faut pas déclarer 'ARRAY [0..10] OF BYTE' dans la variable de 'HelloInBytes' comme la doc l'indique, mais 'ARRAY [1..255] OF BYTE' et tout roule,

Maintenant je bascule sur l'Arduino...

Je te tiens au jus si cela t'intéresse.
gerard13
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 09 janv. 2017, 08:10

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par gerard13 »

Bon, maintenant coté Arduino je reçois bien quelque chose "169 58 58 10 250 235 0" pour 'hello' envoyé depuis le M241. :D

Coté ASCII, ça ne colle pas vraiment.

Je ne sais pas si c'est le M241 qui émet ces octets ou si c'est mon code dans l'Arduino qui les décode mal, problème de format ou conversion...?

Existe t'il un moyen de visualiser en temps réel dans SoMachine les trames envoyées sur le port com 1 du M241? :?:

Ou alors,

Existe t'il un moyen dans SoMachine de logger les trames envoyées sur le port com 1 du M241? :?:
Avatar du membre
Bernardo59
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1054
Enregistré le : 20 oct. 2015, 05:48
Localisation : Nimes
Contact :

Re: M241 – Communication ASCII RS232 en langage ST avec Arduino

Message par Bernardo59 »

Salut,

Le plus simple aurait été de brancher ton M241 sur un PC en ouvrant le terminal.

Tu fais comment sur le Arduino pour récupérer ta trame ? Via SoftwareSerial ?

Vérifie la parité, la vitesse de transmission également.
Répondre