Problème communication série

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
JulienG
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 18 nov. 2016, 09:35

Problème communication série

Message par JulienG »

Bonjour,

Je viens vers vous car j'ai quelques soucis de communication sur un projet.

Je dois communiquer avec un automate Schneider M340 (développé sur Unity Pro S) et un équipement autre via une liaison série par une carte NOM 0200.
Les caractéristiques de la liaison sont:
Baud rate=57600, Parité=aucune, Data bits=8, Stop bits=1

J'arrive à communiquer avec cet équipement par le PC grâce à un câble Null modem et le logiciel RealTerm et je récupère une trame qui est la suivante:
Datagram= (1) 16541082 2 2 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 0 1 1 0 0 0 0 0 0 0 0 2 0 0 0 15 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 3 0 0 0 15 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 4 0 0 0 15 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 5 0 0 0 15 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 -1 16389622 16389622 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 8 0 0 0 0 0 0 1 1 0 0 0 0 0 1001 1002 1003 10 1 2218435337
J'ai donc paramétrer ma carte de communication avec les paramètres cités ci-dessus et j'ai fait un bout de code pour essayer de récupérer cette trame, le code est le suivant:

Code : Tout sélectionner

ComRS_M0V1.Adr_Char:='0.2.0.SYS';

IF Test_emission THEN
    PRINT_CHAR(ADDM(ComRS_M0V1.Adr_Char), ComRS_M0V1.ReqString, ComRS_M0V1.Tab_Gest_Req_Print);
END_IF;

INPUT_CHAR(ADDM(ComRS_M0V1.Adr_Char), 1, 616, ComRS_M0V1.Tab_Gest_Req_Input, ComRS_M0V1.Reponse_String);

IF ComRS_M0V1.ReponseString<>'' THEN
    Copie_reponse:='';
    Copie_reponse:=ComRS_M0V1.Reponse_String;
END_IF;

ComRS_M0V1.Reponse_String:='';

Dans le programme ComRS_M0V1 est une structure regroupant différentes informations comme:
- Adr_Char: Adresse de la carte de communication
- ReqString: Chaîne de caractère à émettre
- Tab_Gest_Req_Print: Tableau de gestion de l'émission
- Tab_Gest_Req_Input: Tableau de gestion de la réception
- Reponse_String: Chaîne de caractère à recevoir, sachant que la trame a une longueur de 616 caractères (mais de longueur variable puisque le premier gros nombre est un comptage du temps depuis mise sous tension de l'appareil), j'ai choisi un type String[616] pour faire mes tests

Les autres variables sont:
- Test_emission: Bit permettant d'émettre la requête de com
- Copie_reponse: Copie de la chaîne de caractère reçue (String[616])

Apparemment, je n'ai pas de problème pour émettre ma requête puisque je récupère bien une information en retour, mon problème est que je récupère une trame ne commençant pas par "Datagram= (1)" mais la chaîne commence par une autre partie de la tram comme par exemple "1002 1003 10 1 2218435337".

J'ai également testé avec une autre requête qui me retourne la date sous la forme "DateTime= 5 18 11 16 10 49 32 ......", une trame indiquant le jour de la semaine (5 pour vendredi), le jour du mois, le mois, l'année, l'heure, les minutes, les secondes et un CRC (représenté par les "...." ici), je récupère cette trame en boucle jusqu'à ce que mes 616 caractères soient remplis apparemment avec un décalage parfois dans le début de la chaîne reçue.

Je suis donc un peu bloqué là dessus sachant que c'est la première communication série que je mets en place et j'aimerai bien savoir comment récupérer la bonne trame et si possible ne récupérer que les caractères nécessaires et que donc si j'émets la 1ère requête ou la 2ème pour avoir la date, avoir simplement la bonne trame une seule fois.

Je vous remercie d'avance si quelqu'un peut me venir en aide.

Bonne journée
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Problème communication série

Message par itasoft »

slts,
il faut d'abord savoir sur quel protocole communique le équipement autre , lol
Automaticien privé (de tout)
itasoft@free.fr
JulienG
Code sa première boucle
Code sa première boucle
Messages : 13
Enregistré le : 18 nov. 2016, 09:35

Re: Problème communication série

Message par JulienG »

C'est une liaison mode caractère.
Répondre