Communication API /ISB+/CORUS

Forum traitant des automates industriels de marque Schneider - Telemecanique
BHB
Code sa première boucle
Code sa première boucle
Messages : 14
Inscription : 20 nov. 2015, 10:34

Communication API /ISB+/CORUS

Message par BHB »

Bonjour,

Je tente de communiquer via une passerelle Modbus TCPIP/RS485 avec un module CORUS (debitmetre) a travers un module instrinsèque ISB+.
MODBUS TCPIP<>RS485<>ISB+ITRON<>RS232<> CORUS.
Les paramètres de com sont
Vitesse de transmission = 9600 bauds
Bits de données = 8 bits
Bit(s) de stop = 1 bit
Parité = Sans parité
Grosso modo un automate vient lire les données du débitmètre
Je communique puis quelques heures après la communication se coupe , il faut couper le jus sur le ISB+ pour la com redémarre. Quelqu'un aurait il une piste ?
Merci de votre aide Smile
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Communication API /ISB+/CORUS

Message par itasoft »

slts,
sur quel automate ? donner une vue de la requête de lecture (ex: READ_VAR) pour voir comment c'est programmé
Automaticien privé (de tout)
itasoft@free.fr
BHB
Code sa première boucle
Code sa première boucle
Messages : 14
Inscription : 20 nov. 2015, 10:34

Re: Communication API /ISB+/CORUS

Message par BHB »

Bonjour
Je passe par un convertisseur Modbus TCPIP / RS485, je communique quelques heures et la comm. se coupe.

(* Adresse Corus *)
ADDM_CORUS := ADDM('Ethernet_N0{210.5.20.51}10');

(* RAZ : Table Controle Echange *)
IF CORUS_Fct_RV_WV=0 THEN
MOVE_INT_ARINT(0,%MW291:4);
END_IF;

(* Chargement Time-Out *)
CORUS_Timeout:=100;

(* gestion index zone d'echange *)
IF (com_corus_nozone > 3) OR (com_corus_nozone < 1) THEN
com_corus_nozone:=1;
END_IF;

(* Lecture des débits bruts et convertis *)
IF CORUS_Fct_RV_WV=0 AND NOT (CORUS_Echange.0) AND (com_corus_nozone = 1) AND Top_1s THEN
(* Lecture 4 Mots par ECOCEM dans CORUS (%MW822-825) *)
READ_VAR (ADR := ADDM_CORUS,
OBJ := '%MW',
NUM := 822,
NB := 4,
GEST := %MW291:4,
RECP => Corus_Zone_1);
SET (CORUS_RV_Mots);
INC(com_corus_nozone);
END_IF;
BHB
Code sa première boucle
Code sa première boucle
Messages : 14
Inscription : 20 nov. 2015, 10:34

Re: Communication API /ISB+/CORUS

Message par BHB »

Automate schneider
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Communication API /ISB+/CORUS

Message par itasoft »

slts,
pour lancer une requête il faut tester le bit d'activité à 0 et mettre une Time-OUT c'est la régle sinon tu plante la COM au bout d'un certain temps


(* Lecture des débits bruts et convertis *)
IF NOT %MW291.0 AND CORUS_Fct_RV_WV=0 AND NOT (CORUS_Echange.0) AND (com_corus_nozone = 1) AND Top_1s THEN

%M291:=0;
%M292:=0;
%M293:=20;(*Time-out*)
%MW294:=0;


(* Lecture 4 Mots par ECOCEM dans CORUS (%MW822-825) *)
READ_VAR (ADR := ADDM_CORUS,
OBJ := '%MW',
NUM := 822,
NB := 4,
GEST := %MW291:4,
RECP => Corus_Zone_1);
SET (CORUS_RV_Mots);
INC(com_corus_nozone);
END_IF;
Automaticien privé (de tout)
itasoft@free.fr
BHB
Code sa première boucle
Code sa première boucle
Messages : 14
Inscription : 20 nov. 2015, 10:34

Re: Communication API /ISB+/CORUS

Message par BHB »

Oui je l'ai fait
(* Chargement Time-Out *)
CORUS_Timeout:=100;


(* Lecture des débits bruts et convertis *)
IF CORUS_Fct_RV_WV=0 AND NOT (CORUS_Echange.0) AND
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Communication API /ISB+/CORUS

Message par itasoft »

OK, j'avais pas fait le rapprochement avec les mnémoniques alors ça vient pas de la requête qui est bien programmé, à la rigueur le time-out de 1s c'est un peu long je mettrais 500ms (soit la valeur 50) mais ça doit pas changer grand chose.Sinon es que ya d'autres requêtes sur cette même voier ?
Automaticien privé (de tout)
itasoft@free.fr
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Communication API /ISB+/CORUS

Message par itasoft »

slts,
question:
es que ya d'autres requêtes READ_VAR ou WRITE_VAR sur cette même voie à l'adresse: ADDM('Ethernet_N0{210.5.20.51}10') ??
Exemple :
Si j’ai une requête READ_VAR pour la lecture et une requête WRITE_VAR pour l’écriture sur la même voie
ADDM('Ethernet_N0{210.5.20.51}10') dans le principe le TCP peut empiler les requêtes mais par sécurité et vu que la COM plante, j’utiliserais la même table de gestion %MW291 :4 pour les deux requêtes et teste le même bit d’occupation et je cadence une fois l’une une fois l’autre,
Exemple :
%M6 :=%S6 ;
if RE(%M6) AND NOT %MW291.0 THEN READ_VAR (..................%MW291:4)
if FE(%M6) AND NOT %MW291.0 THEN WRITE_VAR (..................%MW291:4)

la ceinture et les bretelles, LOL
Automaticien privé (de tout)
itasoft@free.fr
BHB59
Code son premier grafcet
Code son premier grafcet
Messages : 32
Inscription : 23 août 2018, 16:45
Localisation : Nord de la france

Re: Communication API /ISB+/CORUS

Message par BHB59 »

Bonjour,

Désolée pour la réponse tardive mais j'ai eu un problème avec le compte de ce forum et j'ai du en créer un autre.
Il me semble que je cadence l'envoi des read var . voir code ci dessous... je pense que le code est OK

Merci de votre aide


(* Adresse Corus *)
ADDM_CORUS := ADDM('Ethernet_N0{210.5.20.51}10');

(* RAZ : Table Controle Echange *)
IF CORUS_Fct_RV_WV=0 THEN
MOVE_INT_ARINT(0,%MW291:4);
END_IF;

(* Chargement Time-Out *)
CORUS_Timeout:=100;

(* gestion index zone d'echange *)
IF (com_corus_nozone > 3) OR (com_corus_nozone < 1) THEN
com_corus_nozone:=1;
END_IF;

(* Lecture des débits bruts et convertis *)
IF CORUS_Fct_RV_WV=0 AND NOT (CORUS_Echange.0) AND (com_corus_nozone = 1) AND Top_1s THEN
(* Lecture 4 Mots par ECOCEM dans CORUS (%MW822-825) *)
READ_VAR (ADR := ADDM_CORUS,
OBJ := '%MW',
NUM := 822,
NB := 4,
GEST := %MW291:4,
RECP => Corus_Zone_1);
SET (CORUS_RV_Mots);
INC(com_corus_nozone);
END_IF;

(* Lecture des température et pression *)
IF CORUS_Fct_RV_WV=0 AND NOT (CORUS_Echange.0) AND (com_corus_nozone = 2) AND Top_1s THEN
(* Lecture 16 Mots par ECOCEM dans CORUS (%MW806-821) *)
READ_VAR (ADR := ADDM_CORUS,
OBJ := '%MW',
NUM := 834,
NB := 4,
GEST := %MW291:4,
RECP => Corus_Zone_2);
SET (CORUS_RV_Mots);
INC(com_corus_nozone);
END_IF;

(* Lecture des compteurs *)
IF CORUS_Fct_RV_WV=0 AND NOT (CORUS_Echange.0) AND (com_corus_nozone = 3) AND Top_1s THEN
(* Lecture 16 Mots par ECOCEM dans CORUS (%MW806-821) *)
READ_VAR (ADR := ADDM_CORUS,
OBJ := '%MW',
NUM := 806,
NB := 16,
GEST := %MW291:4,
RECP => Corus_Zone_3);
SET (CORUS_RV_Mots);
INC(com_corus_nozone);
END_IF;

(* TRAITEMENT COMPTE RENDU *)
IF (CORUS_Fct_RV_WV <> 0) AND NOT (CORUS_Echange.0) THEN
(* Test Si Pas Defaut Communication *)
IF CORUS_Cpt_Rendu = 0 THEN
CORUS_Cpt_Def:=0;(* RAZ : Compteur de defaut *)
(* Echange OK *)
SET (CORUS_echange_ok);
ELSE
(* Comptage Defaut : Si > 3 Alors Defaut Com *)
IF CORUS_Cpt_Def<9999 THEN INC (CORUS_Cpt_Def);END_IF;
(* RAZ Echange OK *)
RESET (CORUS_echange_ok);
END_IF;
CORUS_Fct_RV_WV:=0;(* RAZ : Info Fct en cours *)
END_IF;
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Communication API /ISB+/CORUS

Message par itasoft »

slts,
c'est pas bon,

(* RAZ : Table Controle Echange *)
IF CORUS_Fct_RV_WV=0 THEN
MOVE_INT_ARINT(0,%MW291:4);
END_IF;

Après ça, tu met CORUS_Echange.0 à zéro donc il ne sert plus à à rien dans la condition suivante
Tu met à zéro le bit d'activité puis tu le teste à FALSE, il sera obligatoirement à FALSE donc il ne sert à rien

IF CORUS_Fct_RV_WV=0 AND NOT (CORUS_Echange.0)

============= Corrigé suivant le modèle standard ============

(* RAZ : Table Controle Echange *)
IF CORUS_Fct_RV_WV=0 THEN
MOVE_INT_ARINT(0,%MW291:4);
END_IF;
Supprimer cette RAZ

Top_1s:=%S6;

(* Cadencement *)
if RE(Top_1s) then
inc(com_corus_nozone);
end_if;

IF (com_corus_nozone > 3) OR (com_corus_nozone <0) THEN
com_corus_nozone:=0;
END_IF;

(* Lecture des débits bruts et convertis *)
IF NOT (CORUS_Echange.0) AND (com_corus_nozone = 1) AND RE(Top_1s) THEN
MOVE_INT_ARINT(0,%MW291:4);
(* Lecture 4 Mots par ECOCEM dans CORUS (%MW822-825) *)
READ_VAR (ADR := ADDM_CORUS,
OBJ := '%MW',
NUM := 822,
NB := 4,
GEST := %MW291:4,
RECP => Corus_Zone_1);

END_IF;
Automaticien privé (de tout)
itasoft@free.fr
Répondre