Bonjour à toutes et à tous,

Électronicien de formation et débutant en C#, j'aurai aimé réaliser comme première application une communication de type série entre le PC et une carte d'acquisition.

Si la communication entre la carte et l'hyperterminal se déroule sans problème, ainsi que l'envoi de caractères via l'application programmée en C#, je rencontre des problèmes pour réceptionner les informations fournies par la carte. En lisant plusieurs sites, j'ai essayé de suivre leur méthode en créant une fonction de gestion des caractères reçu (le pooling est-il possible en C# ?). Malheureusement malgré l'envoi de caractères, le programme ne passe jamais dans cette fonction de réception. Pour simplifier les choses, la carte n'envoie qu'un seul caractère 0x30, à la cadence de 2x seconde. J'ai essayé par curiosité d'envoyer un NULL à la fin de chaque envoi, mais cela ne change rien

La carte d'acquisition communique via un port COM virtuel, qui est en réalité un port USB, via un driver fourni par le fabriquant de la carte. Donc, je n'ai ni DTR ou RTS physique.

Le code que j'ai essayé est le suivant, en espérant que vous pourrez 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
 
using System;
using System.IO.Ports;
using System.Text;
 
 
namespace SerialPortExample
{
    class SerialPortProgram
    {
        // Create the serial port with basic settings
        private SerialPort port = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
 
        [STAThread]
        static void Main(string[] args)
        {
            new SerialPortProgram();
        }
 
        private SerialPortProgram()
        {
            port.ReceivedBytesThreshold = 1;
            port.Handshake = Handshake.None;
            port.DtrEnable = false;
            port.RtsEnable = false;
            // Instatiate this class
            Console.WriteLine ("Incoming Data:");
            // Begin communications
            port.Open();
 
             port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
 
             Console.WriteLine(port.ReadBufferSize);
 
            System.Console.ReadKey();
            port.Close();
        }
 
        private void port_DataReceived (object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            // Show all the incoming data in the port's buffer
            Console.WriteLine("Caractère reçu");
            Console.WriteLine(port.ReadExisting());
        }
    }
}
Merci d'avance.

Sébastien.