Page 2 sur 2

Re: READ_VAR rs485 modbus

Posté : 10 juil. 2016, 12:45
par kosbor
bonjour,

Alors des nouvelles hier matin j'ai avancé, alors l'erreur le code 07 venait l'adresse 100 je m'en suis apercu quand j'ai passé la carte en esclave le max est 99 :shock: j'avais mis parce que mon esclave en reglage usine etait à 100
Alors la led clignote bien en Rx Tx et quand il n'y a pas d'esclave la led error n'est pas en rouge
Je n'ai pas pus testé sur l'esclave donc j'ai essayé avec les USB 485 (celui du cable schneider ne fonctionne pas il refuse d'ouvrir le COM ou il est )
Je pense qu'il y a un probleme avec mes USB 485 (acheté pas cher) entre les 2 le RTU passe sans probleme mais avec l'automate il y a un probleme de synchro j'ai fais une petite capture pour voir les trames IcQ37QPayWA Sinon j'ai fais le READ_VAR plus propre je met le code si ça peut servir

Code : Tout sélectionner

(*****************************************************************)
(*                  READ                                         *)
(*****************************************************************)
(*requete*)
IF Impuls100ms THEN
  Rc_Com_Lec.Query:=true;
END_IF;

IF Rc_Com_Lec.Query AND NOT Rc_Com_Lec.Busy AND NOT Rc_Com_Ecr.Busy THEN
  
  MOVE_INT_ARINT (IN := 0, OUT =>Rc_Com_Lec.TableEchange (*ANY_ARRAY_INT*));
  Rc_Com_Lec.Busy           :=True;
  Rc_Com_Lec.TableEchange[2]:= 1; (*200ms timeout*)
  (*64 bits  sont lus au niveau de l'esclave 10 et placés dans le buffer*)
  READ_VAR (ADR  :=ADDR('0.1.1.10')(*ANY_ARRAY_INT*),
            OBJ  :='%M' (*STRING*),
            NUM  := 0 (*DINT*),
            NB   := 64 (*INT*),
            GEST := Rc_Com_Lec.TableEchange(*ANY_ARRAY_INT*),
            RECP => Rc_Com_Lec.Buffer(*ANY_ARRAY_INT*));
END_IF;

(*Analyse des résultats*)
IF Rc_Com_Lec.Busy  AND NOT Rc_Com_Lec.TableEchange[0].0 THEN
  Rc_Com_Lec.Query:=False;
  Rc_Com_Lec.Busy:=False;
  IF Rc_Com_Lec.TableEchange[1]<>0 THEN
    Rc_Com_Lec.NumberExchangeNOk:=MOD (Rc_Com_Lec.NumberExchangeNOk,32000);
    INC(Rc_Com_Lec.NumberExchangeNOk);  
    Rc_Com_Lec.Pointer:=MOD (Rc_Com_Lec.Pointer,51);
    MOVE_INT_ARINT (IN := 0, OUT =>Rc_Com_Lec.Buffer (*ANY_ARRAY_INT*)); 
    Rc_Com_Lec.Log[Rc_Com_Lec.Pointer].Horraire  :=HeureActuelle_DT;
    Rc_Com_Lec.Log[Rc_Com_Lec.Pointer].CodeErreur:=Rc_Com_Lec.TableEchange[1];
    INC(Rc_Com_Lec.Pointer);
  END_IF;
END_IF;


Re: READ_VAR rs485 modbus

Posté : 10 juil. 2016, 18:15
par itasoft
slts,

Rc_Com_Lec.Buffer (*ANY_ARRAY_INT*));

ça veut dire: ARRAY[0..3] OF INT

?

Re: READ_VAR rs485 modbus

Posté : 10 juil. 2016, 19:33
par kosbor
declaré ARRAY[0..25] OF INT j'ai mis de la marge comme c'est une structure

Re: READ_VAR rs485 modbus

Posté : 11 juil. 2016, 07:50
par Bernardo59
Bonjour Kosbor,

On ne peut malheureusement pas trop te répondre car on ne sait pas trop ce que tu fais.
Je pense que tu essayes de réaliser une communication Modbus RS485 vers un équipement mais en terme de cablage, qu'est-ce que tu as réalisé ?

Re: READ_VAR rs485 modbus

Posté : 11 juil. 2016, 19:16
par kosbor
Bernardo59 a écrit :Bonjour Kosbor,

On ne peut malheureusement pas trop te répondre car on ne sait pas trop ce que tu fais.
Je pense que tu essayes de réaliser une communication Modbus RS485 vers un équipement mais en terme de cablage, qu'est-ce que tu as réalisé ?
slt
Le probleme est resolu testé sur l'esclave j'ai viré aussi l'impulsion de 100ms dès qu'il est pas busy on balance la requete,j'ai laisé tourné la journée et aucune erreur
Le cablage est montré dans la page précedente
Du coup les USB485 entre eux ils marchent , mais pas avec un partenaire classique

Re: READ_VAR rs485 modbus

Posté : 11 juil. 2016, 23:35
par itasoft
slts,
Bravo,
dommage que on ne sait toujours pas entre quoi et quoi tu veux communique (ex: types d'esclaves)
LOL

Re: READ_VAR rs485 modbus

Posté : 12 juil. 2016, 12:06
par kosbor
C'est une telecomande de la marque jay avec son tranceiver
J'ai donc fais une communication bidirectionnelle (120ms entre 2 transactions)
Mais je me serais bien passé du modbus RTU