Page 5 sur 6
Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 07 mars 2022, 08:34
par andala
DurandO a écrit : ↑04 mars 2022, 18:01
Bonjour,
si ta valeur est un entier, ta conversion est bonne : int ->Dint, Dint--> Real.
Pour ta table d'émission, tu peux déclarer des datas dans tes paramètres de bloc FB comme ceci :
Code : Tout sélectionner
Input
Valeur1 Int 0 Non rémanent True True True False
Valeur2 Int 0 Non rémanent True True True False
Valeur3 Int 0 Non rémanent True True True False
Valeur4 Int 0 Non rémanent True True True False
Valeur5 Int 0 Non rémanent True True True False
Output
InOut
Static
Data1 Struct Non rémanent True True True False
Byte0 Byte 16#00 Non rémanent True True True False
Byte1 Byte 16#80 Non rémanent True True True False
Value Real 0.0 Non rémanent True True True False
Data2 Struct Non rémanent True True True False
Data3 Struct Non rémanent True True True False
Data4 Struct Non rémanent True True True False
Data5 Struct Non rémanent True True True False
Temp
EntierDouble DInt
Constant
Tu fait ta conversion simplement comme ceci :
Exemple
Waou ! y a-t-il plus claire comme réponse ! simple, concise,détaillé,... MERCI !
Je test ce matin est je vous tiens informés
Par contre, je ne vois pas comment de #data_value1 tu inscrit les valeurs dans Byte0 et Byte1.
Et le "EntierDouble" en Dint, je le recopie autant de fois qu'il y a de valeur d'entrée ? ou un seul suffit ?
Pour finir, pour le MB_DATA_PTR le registre 200, 201 et 202 pour la première entrée, une partie est en Int et l'autre en real. je fait comment du coup ? je met tout en real ?
Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 07 mars 2022, 15:37
par andala
Apres plusieurs noeud au cerveau, j'ai fini pas m'y retrouver un minimum.
j'ai ecris ça :
Le imput_value est converti en Dint puis en Real vers output_value
les input_int_1 et 2 sont envoyé respectivement vers Output_register1 et 2 (vers mon PTR correspondant)
Ça vous parait cohérent ?

Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 07 mars 2022, 16:18
par DurandO
Bonjour,
andala a écrit : ↑07 mars 2022, 08:34
Pour finir, pour le MB_DATA_PTR le registre 200, 201 et 202 pour la première entrée, une partie est en Int et l'autre en real.
je fait comment du coup ? je met tout en real ?
Je ne comprends pas que tu pose encore cette question.
les input_int_1 et 2 sont envoyé respectivement vers Output_register1 et 2 (vers mon PTR correspondant)
Je ne comprends pas ce tu essais de faire avec ça.
As-tu regardé mon exemple ?
Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 07 mars 2022, 21:45
par philou77
andala a écrit : ↑04 mars 2022, 14:43
Philou77 :
Quand tu dit : " Il y a pas de conversion a faire, il faut juste mettre les octets de ton réal d'origine au bon endroit dans la zone que tu va transférer !" Il n'y a pas de real d'origine; je suis en int pour ma donnée
puis : "Et encore une fois, le mot #080 N'EST PAS un REAL mais un simple WORD" tu veux dire que c'est juste cette valeur la qui est en Word ou les 3 registre a envoyer ?
Oui, il semblerai vu l'adressage dans la doc page 9, qu'il faille le status #080 pour chaque real, vu que les adresses vont de 3 registres en 3 registres (soit 6 octets pour du real 32 bit)
Ok alors oui il faut convertir ton int en Dint puis en Rreal
oui, #080 est en word, l'autre en real. mais ne perds pas de vue qu'en Modbus tu transfères des octets qui se suivent, peux importe ce qu'il représentent !
donc un word suivi de un real = 6 Octets (2 pour le word, 4 pour le real).
Donc tu transfères 6 Octets à partir de l'octet xxx
Disons donc que
MW200 est ton word en ecrivant dans MW200 tu écris dans MB200 et MB201
MD202 est ton real en écrivant dans MD202 tu écris dans MB202,MB203,MB204,MB205
Tu transfères 6 Octets à l'adresse de départ MB200
Donc au final ça va transférer
MB200
MB201
MB202
MB203
MB204
MB205
Si tu utilises une structure comme te l'as indiqué DurandO, utilise DATA1.BYTE0 comme adresse de départ, ça fera pareil !
à toi d'adapter les adresses !
Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 08 mars 2022, 08:37
par andala
Bonjour à tous,
Il y a quelque problème au niveau de la doc on dirait car, en faisant des tests hier, j'ai remarqué que l'on utilise pas 3 registre comme c'est mentionné.
En envoyant seulement dans le registre 200 la valeur 16#80 en int et dans le 201 la valeur 100 par exemple en real, j'ai bien ma lecture de valeur à 100 sur mon enregistreur. Merci la doc !
Par contre j'ai un dernier problème :
Lorsque je veux envoyer mes données, j’inscris donc dans MB_DATA_ADRESS = 40201, MB_DATA_LEN = 6 puis dans MB_DATA_PTR :
Struct :
Status4 Int 16#80
Value4 Real 0.0
Status5 Int 16#80
Value5 Real 0.0
Status6 Int 16#80
Value6 Real 0.0
Je suis obligé d’écrire en struct pour envoyer des données en int et real dans le même groupe
Cependant, la programmation ci dessus me renvoi dans mon block MB_CLIENT une erreur 818B qui correspond a :
The MB_DATA_PTR parameter has an invalid pointer. You should also check the values of the MB_DATA_ADDR and MB_DATA_LEN parameters.
Erreur pas logique étant donnée que je dois bien envoyer 6 valeurs donc bien 6 pointeurs...
une idée ?
Je vais bien finir par y arriver !

Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 08 mars 2022, 09:56
par DurandO
Bonjour,
andala a écrit : ↑08 mars 2022, 08:37
En envoyant seulement dans le registre 200 la valeur 16#80 en int et dans le 201 la valeur 100 par exemple en real, j'ai bien ma lecture de valeur à 100 sur mon enregistreur. Merci la doc !
Tu n'as pas compris semble-t-il.
Lorsque tu envoies un real à l'adresse 201 ( 100.0 dans ton exemple) cette valeur real (32bits) occupe 2 mots ( 201 et 202).
Donc, la documentation est claire à ce niveau.
Lorsque je veux envoyer mes données, j’inscris donc dans MB_DATA_ADRESS = 40201, MB_DATA_LEN = 6 puis dans MB_DATA_PTR :
Qu'as-tu mis dans
MB_MODE?
Peux-tu faire une impression écran de ta structure et de l'appel du bloc
MB_CLIENT dans chacun des cas :
- celui qui marche
- celui qui ne marche pas.
Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 08 mars 2022, 12:34
par andala
J'ai compris pourquoi j'ai cette erreur : il aime pas trop le struct dans le PTR.
Tout fonctionne parfaitement maintenant.
C'est le dernier message de Durand0 qui m'a orienté dans la bonne direction
Merci à tous pour l'aide ! maintenant je saurais faire
Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 08 mars 2022, 13:26
par philou77
Re !
Il aurait été sympa de poster ton erreur et de mettre ta solution aussi.
Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 08 mars 2022, 14:40
par andala
philou77 a écrit : ↑08 mars 2022, 13:26
Re !
Il aurait été sympa de poster ton erreur et de mettre ta solution aussi.
Oui ne t’inquiète pas, je vérifiais juste si tout s’enregistre bien

.
Voici la solution que j'ai apporté :
Ici la structure du %FB3 (j'ai converti ma variable à envoyer ailleurs dans le programme en REAL):
Et la, le traitement de mes données :
L'envoi des données était a faire en INT et pas en REAL, dans le MB_DATA_PTR. C'est la ou je me suis emmêlé les pinceaux a vouloir absolument les envoyer en REAL.
encore merci a tous pour votre aide

Re: Connexion 1510SP-1 et enregistreur E+H RSG35
Posté : 08 mars 2022, 15:00
par philou77
Re !
Je comprends pas tout mais l'essentiel est que ça fonctionne
