[C#] Probleme lecture sur port serie avec un windows service

Douhan
Messages postés
1
Date d'inscription
jeudi 26 avril 2012
Statut
Membre
Dernière intervention
26 avril 2012
- 26 avril 2012 à 16:56
captainFoyd
Messages postés
11
Date d'inscription
mardi 28 septembre 2010
Statut
Membre
Dernière intervention
30 avril 2012
- 30 avril 2012 à 11:34
Bonjour,

J'ai un petit soucis au niveau d'un windows service. Ce windows service se connecte à un keypad via un port série. Et, toutes les secondes, il regarde s'il y a des données dans le buffer (via la propriété BytesToRead).
Mon but est le suivant : quand j'appuie sur une touche du keypad, il doit m'indiquer que j'ai des données dans mon buffer. Sauf que ça ne marche pas et je ne sais pas pourquoi.

Voici le code source :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.IO.Ports;
using System.Timers;

namespace servicePorte
{
    public partial class srvTest : ServiceBase
    {
        SerialPort paveNumerique;
        Timer chrono;

        public srvTest()
        {
            InitializeComponent();
            // NOM Port, vitesse (bps), Parité du port, bit de donnees, bit de stop
            paveNumerique = new SerialPort("COM4", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
            paveNumerique.DataReceived += new SerialDataReceivedEventHandler(paveNumerique_DataReceived);

            chrono = new Timer();
            chrono.Interval = 1000;
            chrono.Enabled = true;
            chrono.Elapsed += new ElapsedEventHandler(chrono_Elapsed);
        }

        void chrono_Elapsed(object sender, ElapsedEventArgs e)
        {
            int nbOctetDansBuffer = paveNumerique.BytesToRead;
            StreamWriter fichier = new StreamWriter("C:\\Program Files\\Groupe Tourcar\\serviveTest\\journal.txt", true);
            fichier.WriteLine(DateTime.Now.ToString() + ": " + nbOctetDansBuffer.ToString());
            fichier.Close();
        }

        void paveNumerique_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            StreamWriter fichier = new StreamWriter("C:\\Program Files\\Groupe Tourcar\\serviveTest\\journal.txt", true);
            fichier.WriteLine(DateTime.Now.ToString() + ": Donnes reçu");
            fichier.Close();
        }

        protected override void OnStart(string[] args)
        {

            StreamWriter fichier = new StreamWriter("C:\\Program Files\\Groupe Tourcar\\serviveTest\\journal.txt", true);
            fichier.WriteLine(DateTime.Now.ToString() + ": Start Service");
            fichier.Close();

            try
            {
                paveNumerique.Open();
            }
            catch (Exception e)
            {
                fichier = new StreamWriter("C:\\Program Files\\Groupe Tourcar\\serviveTest\\journal.txt", true);
                fichier.WriteLine(DateTime.Now.ToString() + ": ERROR " + e.Message);
                fichier.Close();
            }
            chrono.Start();
        }

        protected override void OnStop()
        {
            StreamWriter fichier = new StreamWriter("C:\\Program Files\\Groupe Tourcar\\serviveTest\\journal.txt", true);
            fichier.WriteLine(DateTime.Now.ToString() + ": Stop Service");
            fichier.Close();

            try
            {
                paveNumerique.Close();
            }
            catch (Exception e)
            {
                fichier = new StreamWriter("C:\\Program Files\\Groupe Tourcar\\serviveTest\\journal.txt", true);
                fichier.WriteLine(DateTime.Now.ToString() + ": ERROR " + e.Message);
                fichier.Close();
            }
        }

       

      }
}


Merci d'avance!

Douhan,

1 réponse

captainFoyd
Messages postés
11
Date d'inscription
mardi 28 septembre 2010
Statut
Membre
Dernière intervention
30 avril 2012

30 avril 2012 à 11:34
Est-ce que ça fonctionne dans une application Windows Form? Si non, essaye d'abord avec une application windows pour
pouvoir faire du debug pus facilement.
Est-ce que le service s'arrête immédiatement après le démarrage? Si oui, il faut lancer un thread (à la place du timer)
qui vérifie si des données sont arrivées sur le port série.
0