Re: READ_VAR rs485 modbus
Posté : 10 juil. 2016, 12:45
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
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
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
![Choqué :shock:](./images/smilies/icon_eek.gif)
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;