Remontée valeurs énergétiques ATV600 via Modbus TCP

Forum traitant des automates industriels de marque Schneider - Telemecanique
Nikolo
Apprend le binaire
Apprend le binaire
Messages : 10
Enregistré le : 17 août 2024, 10:29

Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par Nikolo »

Bonjour à tous,

Je cherche à récupérer les valeurs de consommation énergétique (kWh, MWh et GWh) réparties dans 3 mots en 16 bits non signés (aux adresses 10607, 10608 et 10609).
J'ai la documentation "ATV 600 Communication Parameters" sous les yeux, j'essaie d'interroger les adresses correspondantes avec mon M340 par une instruction READ_VAR.

Cependant, la requête renvoie une erreur (Operation Report code 0x02 : "Incorrect Response"). J'ai essayé d'interroger d'autres adresses du variateur, j'arrive à récupérer des informations correctement (comme le mot d'état ou l'intensité consommée, par exemple).

C'est comme si je ne tapais pas dans la bonne zone d'adressage de mon variateur. Au secours :(

Bien à vous,
Nikolo.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7415
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par itasoft »

Est que dans ton READ_VAR tu les reçois sur un tableau de 3 mots du type UINT ou WORD ?
Automaticien privé (de tout)
itasoft@free.fr
Nikolo
Apprend le binaire
Apprend le binaire
Messages : 10
Enregistré le : 17 août 2024, 10:29

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par Nikolo »

Bonjour !

La fonction READ_VAR ne m'autorise que des INT en sortie.

Cdlt,
Nikolo
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 795
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par Bruce33 »

Bonjour,
Essayez de lire les informations avec un autre client Modbus TCP (Modbus Doctor ou Vijeo Designer par exemple) pour savoir si le problème vient de votre programme.
Essayez de lire un seul mot pour commencer.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7415
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par itasoft »

Nikolo a écrit : 09 oct. 2024, 14:20 Bonjour !
La fonction READ_VAR ne m'autorise que des INT en sortie.
--------
c'est juste, j'avais oublié, lol
Cdlt,
Nikolo
Automaticien privé (de tout)
itasoft@free.fr
Nikolo
Apprend le binaire
Apprend le binaire
Messages : 10
Enregistré le : 17 août 2024, 10:29

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par Nikolo »

J'ai pu me connecter au var sur SoMove. Je retrouve bien les variables que je veux récupérer, et leur adresse est conforme au fichier de paramètres fourni par Schneider sur leur site.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7415
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par itasoft »

Bizarre, bizarre, montre ta ligne de programme avec ton READ_VAR
Automaticien privé (de tout)
itasoft@free.fr
Nikolo
Apprend le binaire
Apprend le binaire
Messages : 10
Enregistré le : 17 août 2024, 10:29

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par Nikolo »

Bonjour,

Le code utilisé est :

Code : Tout sélectionner


IF %S13 THEN 
	Gest_Com_Energie[0].0 := FALSE;
	CPT_ENERGIE:=0;
END_IF;

Gest_Com_Energie [2]:= 5;


(* Scrutation Energie variateur ATV630 2P2 *)

IF %S6 AND (CPT_ENERGIE=0) AND NOT TEMP_ENERGIE THEN 
	IF NOT Gest_Com_Energie[0].0 THEN
		CPT_ENERGIE:=CPT_ENERGIE+1;
		READ_VAR (ADR := ADDM('0.1.0{10.68.154.82}'),
		          OBJ := '%MW',
		          NUM := 10601,
		          NB := 3,
		          GEST := Gest_Com_Energie,
		          RECP => Table_energie_2P2);
	
	END_IF;
END_IF;

(* Scrutation Energie variateur ATV630 2P5 *)

IF %S6 AND (CPT_ENERGIE=1) AND NOT TEMP_ENERGIE THEN 
	IF NOT Gest_Com_Energie[0].0 THEN
		CPT_ENERGIE:=CPT_ENERGIE+1;
		READ_VAR (ADR := ADDM('0.1.0{10.68.154.83}'),
		          OBJ := '%MW',
		          NUM := 10601,
		          NB := 3,
		          GEST := Gest_Com_Energie,
		          RECP => Table_energie_2P5);
	
	END_IF;
END_IF;


IF CPT_ENERGIE=2 THEN CPT_ENERGIE:=0; END_IF; (* si le compteur CPT=2 => on recommence *)
TEMP_ENERGIE := %S6;


(* VARIABLES POUR SOFREL *)
	ENERGIE_2P2 	:= INT_TO_UDINT(Table_energie_2P2[2]) 	* 1000000 + INT_TO_UDINT(Table_energie_2P2[1]) 	* 1000 + INT_TO_UDINT(Table_energie_2P2[0]);
	ENERGIE_2P5 	:= INT_TO_UDINT(Table_energie_2P5[2]) 	* 1000000 + INT_TO_UDINT(Table_energie_2P5[1]) 	* 1000 + INT_TO_UDINT(Table_energie_2P5[0]);


Le module à la position 0.1.0 est une carte réseau NOE110 sur le réseau 10.68.154.xxx
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7415
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par itasoft »

rien compris, essayer de faire dans le bestial pour voir
ex:
%M6:=%S6;

IF re(%M6) THEN
Gest_Com_Energie[2]:=5;
READ_VAR (ADR := ADDM('0.1.0{10.68.154.82}TCP.MBS'),
OBJ := '%MW',
NUM := 10601,
NB := 3,
GEST := Gest_Com_Energie,
RECP => Table_energie_2P2);
END_IF;

ps:
pour tester on peut faire la requête sur soi même, remplacer 10.68.154.82 par la @IP de l'automate, et on doit avoir dans la tale de réception, les mots %MW10601 :3 de l'automate
Modifié en dernier par itasoft le 10 oct. 2024, 11:56, modifié 7 fois.
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 795
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Remontée valeurs énergétiques ATV600 via Modbus TCP

Message par Bruce33 »

Les variateurs ATV possèdent plusieurs 'Unit ID' :
- 255 pour accéder au scanner I/O
- 0 ou 248 pour accéder aux paramètres du variateur
Par défaut c'est le Unit ID 255 qui est utilisé.
Il faudrait donc tester l'adresse avec cette syntaxe :
ADDM('0.1.0{10.68.154.82}0') ou ADDM('0.1.0{10.68.154.82}248')

Par ailleurs votre calcul avec la conversion INT_TO_UDINT ne fonctionnera pas à tous les coups car cela supprime le bit de signe.
Il faudrait plutôt écrire : DWORD_TO_UDINT(INT_TO_DWORD(Table_energie_2P2[0])) par exemple.
Répondre