Bonjour, voilà je suis en BTS IRIS 2, et je dois envoyer une Data trame sur un module de sortie FRAS4/21 via le bus CAN.
On m'a donnée la classe, je n'ai plus qu'a l'utiliser, le probleme c'est que je n'y arrive pas.
Classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// Classe CAN pour MODULE VMOD-ICAN3OS1.9 sur BAB40
 
// Constantes symboliques a utiliser pour la vitesse
#define BTR_1MB		0x2300	/* 1 MBaud */
#define BTR_800KB	0x2500	/* 800 KBaud */
#define BTR_500KB	0x1c00	/* 500 KBaud */
#define BTR_250KB	0x1c01	/* 250 KBaud */
#define BTR_125KB	0x1c03	/* 125 KBaud */
#define BTR_100KB	0x34c7	/* 100 KBaud */
#define BTR_62_5KB	0xbac7	/*  62.5 KBaud */
#define BTR_50KB	0x34cf	/*  50 KBaud */
#define BTR_20KB	0x7fcf	/*  20 KBaud */
#define BTR_10KB	0x7fdf	/*  10 KBaud */
 
class Can
{
   protected:
   int fd; // descripteur CAN
   public:
 
   // constructeur
   // initialise le module VMOD-ICAN3OS1.9 sur BAB40
   // connecte une resistance de 120 ohms sur le bus 
   // initialise la vitesse a celle passee en argument
   // prepare le module pour l'envoi et la reception 
   // de trames CAN 20.A ou CAN 20.B de type data ou remote
   Can(int vitesse);
 
   // destructeur
   // deconnecte le module VMOD-ICAN3OS1.9 du bus CAN
   // ferme le peripherique et libere les zones allouees
   ~Can();
 
   // Methodes Out_data (2.0A et 2.0B
   // Envoi d'une trame de donnees (data frame) sans echo ni confirmation
   // id est l'identifiant de la trame
   // P_donnees pointe les donnees a envoyer
   // len est le nombre de donnees maxi (len de 0 a 8) 
   // renvoie 0 pour OK -1 pour erreur
   int Out_data_0A(int id, unsigned char* P_donnees, int len); 
   int Out_data_0B(int id, unsigned char* P_donnees, int len); 
 
   // Methodes Out_remote (2.0A et 2.0B
   // Envoi d'une trame de requete (remote frame)
   // id est l'identifiant de la trame
   // len est le nombre de donnees attendues (0 a 8) 
   // renvoie 0 pour OK -1 pour erreur
   int Out_remote_0A(int id,int len);  
   int Out_remote_0B(int id,int len);  
 
   // Methode In
   //attend toute trame
   //renvoie 0 pour OK -1 pour erreur
   //si OK, retourne :
   //     le type dans type (0 pour 2.0A, 1 pour 2.0B)
   //     l'identifiant dans id
   //     la nature de la trame dans rem (0 pour data, 1 pour remote)
   //     le nombre de donnees dans len 
   //     les donnees a partir de l'adresse pointee par P_data
   int In(int *type,int*id,int*rem ,unsigned char*P_data,int*len);
};
mon programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream.h>
#include <lyc.h>
#include <stdio.h>
#include <string.h>
#include "canlib.h"
 
 
int main ()
{
 Can can (0x1c03);
 
 int ret;
 int* type;
 int* id;
 int *rem;
 unsigned char* P_data;
 int* len;
 char* data;
 unsigned char* P_donnees;
 int a;
 
 strcpy ((char*)data,"0x148"); // 0x150 l'adresse du module 
 strcpy ((char*)P_donnees, (char*)data);
 
 cout << P_donnees << endl;
 
 
 ret = can.Out_data_0A(df,P_donnees,7);
 if (ret == -1)
 {
	cout << "Erreur envoie de dataframe " << endl; 
 }
Je dois envoyer une donnée afin que le module le reçoit, et ensuite le bouton rouge qui se trouve sur le module, s'éteindra, afin de me dire qu'il a bien reçu la donnée. Mais je ne sais pas qu'elle sorte de donnee je dois lui envoyer.
Merci d'avance