Bonjour,
j'ai réaliser une interface qui va établir une communication entre mon pc et une commande d'axe via le port série.
pour pouvoir communiquer, la commande d'axe attend un code (qui va déclencher la tache recevfile -recevoir des données) et qui serra confirmet en eppyant sur le F6 de son IHM.
je me explique: j'ai fait une boucle while d'ou j'ai crée une variable bool (ison), donc avec le bouton envoyer, j'envoie la ligne de code (recvfile) sur le port :
puis je déclenche la boucle while qui va attendre un retour d'un accord de la commande d'axe, une fois confirmer sur la commande d'axe avec le F6 elle envoie un signe sur le port( que je récupére avec l’événement datareceived) et la l'envoie des données commence (visualisation de la led tx, mais la led rx ne clignote pas), à la fin du transfert la commande d'axe ne reçois rien je retrouve pas les données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part serialPort1.Write("\u000A");
voila le code de la commande d'axe :
et voila mon code :
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 PROG Init: 'Ouverture des ports de communication Open "Serial1:9600,8,E,1" AS #2 'Vidage des tampons clearin #1 clearout #1 clearin #2 clearout #2 'Arret des taches de communication halt envfile halt recfile halt recprog halt envprog dbtcom=off carac$="" char$="" chaine$="" traitement: 'Attente utilisateur appuie sur F6 wait dbtcom=on 'Lecture des octets repeat if len(carac$)<=8 then char$=input$ #2,1 end if carac$=carac$+char$ until carin(#2)=0 'Acquisition du "code opération" car$=left$(carac$,1) 'Si code 10 alors lancer la tache recfile if car$=chr$(10) then halt envfile halt recprog halt envprog RF=right$(left$(carac$,3),2) run recfile end if 'Si code 11 alors lancer la tache envprog if car$=chr$(11) then halt envfile halt recprog halt recfile EPROG=right$(carac$,3) run envprog end if 'Si code 12 alors lancer la tache recprog if car$=chr$(12) then halt envfile halt envprog halt recfile RP=right$(carac$,3) run recprog end if 'Si code 13 alors lancer la tache envfile if car$=chr$(13) then halt envprog halt recprog halt recfile EF=left$(carac$,1) run envfile' end if clearin #2 clearout #2 close #2 jump init END PROG
pouvez_ vous m'aider
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 public bool ison = false; private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (!ison) { serialPort1.Write("\u000A"); pour recevfile ison = true; } } private void button_envoyer_Click(object sender, EventArgs e) { StatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez..."; serialPort1.Write("\u000A"); // lance la tache receveFil chr13 while (!ison) { } StreamReader sr = new StreamReader(openFileDialog1.OpenFile(), Encoding.Default); try { string data = sr.ReadLine(); while (data != null) { bBufferBytes = System.Text.Encoding.ASCII.GetBytes(data); //Place le contenu dans un buffer d'octets (ASCII: 1 char = 1 octet) (UNICODE: 1 Char = 2 octets) serialPort1.Write(bBufferBytes, 0, bBufferBytes.Length); // Ecrit le buffer complet sur le SerialPort data = sr.ReadLine(); StatusLabel1.Text = "Transfert en cours..."; } } finally { if (sr != null) sr.Close(); StatusLabel1.Text = "Transfert Fini "; } }
Partager