Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2626 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Utilisation de libnodave en c++builder

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utilisation de libnodave en c++builder

n°1807629
erylis
Posté le 03-11-2008 à 11:41:22  profilanswer
 

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 )  

mood
Publicité
Posté le 03-11-2008 à 11:41:22  profilanswer
 

n°1807672
gilou
Modérateur
Modzilla
Posté le 03-11-2008 à 13:24:13  profilanswer
 

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é!  --
n°1807684
erylis
Posté le 03-11-2008 à 14:01:09  profilanswer
 

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) ;


n°1807764
erylis
Posté le 03-11-2008 à 16:11:49  profilanswer
 

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 ;

n°1807768
gilou
Modérateur
Modzilla
Posté le 03-11-2008 à 16:24:08  profilanswer
 

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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Utilisation de libnodave en c++builder

 

Sujets relatifs
Problème lié à l'utilisation d'une variable globaleUtilisation d'un programme perl sous VBA
problème avec l'utilisation de JNI(java native inteface)[JS]Pbm utilisation this dans fct success ajax
[VBA] Utilisation de Listviewutilisation base de donnée
Javascript : Utilisation d'includes dynamiques [Javascript avancé]Affichage shtml - utilisation de SSI
php et utilisation de dreamweaver mxutilisation du port serie sou linux qt en c++
Plus de sujets relatifs à : Utilisation de libnodave en c++builder


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR