[C#] Probleme lecture sur port serie avec un windows service
Douhan
Messages postés1Date d'inscriptionjeudi 26 avril 2012StatutMembreDernière intervention26 avril 2012
-
26 avril 2012 à 16:56
captainFoyd
Messages postés11Date d'inscriptionmardi 28 septembre 2010StatutMembreDernière intervention30 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,
A voir également:
[C#] Probleme lecture sur port serie avec un windows service
captainFoyd
Messages postés11Date d'inscriptionmardi 28 septembre 2010StatutMembreDernière intervention30 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.