Utilisation de libnodave en c++builder

Utilisation de libnodave en c++builder - C++ - Programmation

Marsh Posté le 03-11-2008 à 11:41:22    

Bonjour  
J’aurai aimé savoir si quelqu’un a déjà utiliser la libraire LIBNODAVE avec c++builder6 ?
Mon problème est que je n’arrive pas a écrit des réel dans les DB de l’automate.  
J’arrive à lire tous ce que je veux, j’arrive a écrire des Bytes. Donc si quelqu‘un peut m’aider merci d’avance.  
Voila mon code  
   

Code :
  1. Int res, d , rslt ;
  2. Float a,c ;
  3. Unsigned char b;
  4. Fds.rfd=OpenSocket(102,”192.168.0.1”);
  5. Fds.wfd=fds.rfd;
  6. If(fds.rfd>0)
  7. {
  8. Di=daveNewInterface(fds,”Read”,1,122,2);
  9. Dc=daveNewConnection(di,2,0,2);
  10. Rslt=daveConnectPLC(dc);
  11. If(rslt==0)
  12.  Printf(“connect”.\n”);
  13. //jusque la tout marche c’est à partir de maintenant que je comprends plus tout  
  14.  D=29 ;
  15.  // première solution
  16.  daveWriteBytes(dc,daveDB,4,62,8,&d) ;// celle si marche pour les bytes mais alors j’ai beau la tourner dans tout les sens elle veut pas écrire de réel.
  17.  //2eme solution   
  18.  daveReadBytes(dc,daveDB,4,62,8,&b) ;
  19.  davePutFloat(&b,d) ;//celle si parcontre a pas l’aire de marcher fort fort .. ou alors j’ai pas comprit un truc ..  
  20.  // je met la suite du code parce que mon erreur ce trouve peut etre dans l’affichage mais je suis pas sur  
  21.  Res=daveReadbytes(dc,daveDB,4,62,8,NULL) ;
  22.  If(0==res)
  23.   {
  24.   A=daveGetFloat(dc) ;
  25.   }
  26.  Panel1->caption a ;


Voila en gros ce que ca donne (désoler pour les fautes de majuscule mais comme mon pc accé internet n’est pas le meme ou je programme j’ai du tout retaper sur word … :s )  

Reply

Marsh Posté le 03-11-2008 à 11:41:22   

Reply

Marsh Posté le 03-11-2008 à 13:24:13    

Code :
  1. Unsigned char b;
  2. davePutFloat(&b,d) ;//celle si parcontre a pas l’aire de marcher fort fort .. ou alors j’ai pas comprit un truc ..   
  3. // je met la suite du code parce que mon erreur ce trouve peut etre dans l’affichage mais je suis pas sur


 
Je connais rien a cette lib, mais en regardant sur les exemples trouvés sur le web, c'est clair:
ton premier parametre est un unsigned char * donc, un pointeur sur un buffer de unsigned char, et non pas l'adresse d'un unsigned char.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-11-2008 à 14:01:09    

Bonjour,
Merci pour cette réponse aussi rapide.
je ne maitrise pas bien les pointeur donc si j'ai bien comprit, il faut que je modifie ma déclaration unsigned char b;en  unsigned char *b = &buffer ;
ce qui donne comme code  

Code :
  1. unsigned char *b=&buffer;
  2. daveReadBytes(dc ,daveDB ,4 , 62 , 8, *b) ;
  3. davePutFloat(*b,d) ;


Reply

Marsh Posté le 03-11-2008 à 16:11:49    

j'ai réussi a trouver mon erreure donc si ca peux aider quelqu'un voila  
enfait d'après ce que j'ai comprit la librairie libnodave ne permet pas d'écrire directement des réel donc il faut définir un unsigned char buffer[1]
ensuite mettre le réel dans le buffer et ecrire le buffer dans le db ce qui donne le code suivant  

Code :
  1. Int res , rslt ;
  2. Float a,c,d ;
  3. Unsigned char buffer1[1];
  4. Fds.rfd=OpenSocket(102,”192.168.0.1”);
  5. Fds.wfd=fds.rfd;
  6. If(fds.rfd>0)
  7. {
  8. Di=daveNewInterface(fds,”Read”,1,122,2);
  9. Dc=daveNewConnection(di,2,0,2);
  10. Rslt=daveConnectPLC(dc);
  11. If(rslt==0)
  12. Printf(“connect”.\n”);
  13. D=11.18 ;
  14. davePutFloat(buffer1,d) ;
  15. daveWriteBytes(dc,daveDB,4,62,8,&buffer1) ;.
  16. Res=daveReadbytes(dc,daveDB,4,62,8,NULL) ;
  17. If(0==res)
  18.   {
  19.   A=daveGetFloat(dc) ;
  20.   }
  21. Panel1->caption a ;

Reply

Marsh Posté le 03-11-2008 à 16:24:08    

erylis a écrit :

Bonjour,
Merci pour cette réponse aussi rapide.
je ne maitrise pas bien les pointeur donc si j'ai bien comprit, il faut que je modifie ma déclaration unsigned char b;en  unsigned char *b = &buffer ;
ce qui donne comme code  

Code :
  1. unsigned char *b=&buffer;
  2. daveReadBytes(dc ,daveDB ,4 , 62 , 8, *b) ;
  3. davePutFloat(*b,d) ;



Pas du tout:
Un buffer, ça s'alloue.
Il va falloir faire  
unsigned char b[256]; //265 est un exemple, ou bien ce qui convient mieux a votre donnée
par exemple, ou utiliser une allocation dynamique.

Citation :

Unsigned char buffer1[1];


Si votre buffer n'a que 1 octet d'alloué, ce n'est certainement pas suffisant pour y caser un float.
A+,


Message édité par gilou le 03-11-2008 à 16:26:48

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed