IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Tracer realtime courbe (Question)


Sujet :

Windows Forms

  1. #1
    Invité
    Invité(e)
    Par défaut Tracer realtime courbe (Question)
    Bonjour , j'ai une programme qui est relié avec une base de donnée , avec un timer qui vien récupérer chaque 10 secondes la valeurs des 3 variables et les ajoutent dans la base de donnée

    Nom : Capture.JPG
Affichages : 133
Taille : 30,0 Ko

    je veux créer un graph qui me fait tracer les 4 derniers heures de chaque variables en fonction du temps, donc dans 4 heures je récupere 1440 valeurs , aprés je dois supprimer la premiére valeur qui à était tracé et je mets celle du 4h + 10s et ainsi de suite, pour avoir toujours les 4 derniers heures

    je veux savoir si y a des biblio excistant sur C# qui peuvent me faciliter la tache ? et si vous avez des conseils pour commecer

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 183
    Points : 5 754
    Points
    5 754

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Comme dit par ericlm128 le control natif Chart est ton ami...
    Espace de nom :System.Windows.Forms.DataVisualization.Charting ...
    Tu dois te pourvoir d' un List<T> de tes data (il te faut donc un class wrapper de tes données)
    Tu pousses dans le List<T> les 1440 "premières" valeurs(initialisation au jour J)...
    Ensuite à chaque Tick tu supprimes l’élément de tète et tu acquiers l’élément suivant que tu pousse dans la liste...
    Remarque qu' au rythme de ton Timer ( 1440 valeurs au rythme de 4 heures c'est du "real-time" poussif et l'observateur doit ramener un coussin ... !!!)...

    voici une exemple de code qui montre la vélocité du control Chart avec un List<Point> et le type FastLine (le plus rapide):
    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Windows.Forms.DataVisualization.Charting;
     
    namespace WinRealRimeChart
    {
     
        public partial class FormGraph : Form
        {
            private List<PointF> points = new List<PointF>();
            private float x, y;
            private Random rnd = new Random();
            public FormGraph()
            {
                InitializeComponent();
            }
            private void FormGraph_Load(object sender, EventArgs e)
            {
                for (int i = 1; i < 101; i++)
                {
                    x = i;
                    y = rnd.Next(10, 111);
                    PointF pt = new PointF(x, y);
                    points.Add(pt);
                }
                this.chart1.Series[0].Points.DataBind(points, "X", "Y", null);   
            }
     
            private void btnStartAcquisition_Click(object sender, EventArgs e)
            {
                this.timer1.Enabled = true;
            }
     
            private void btnStopAcquisition_Click(object sender, EventArgs e)
            {
                this.timer1.Enabled = false;
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                y= rnd.Next(10, 111);
                x ++;
                PointF pt = new PointF(x, y);
                points.Add(pt);
                points.RemoveAt(0);
                this.chart1.Series[0].Points.DataBind(points, "X", "Y", null);
            }
     
     
        }
    }
    bon code...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Mabrouki Merci pour votre aide c'est trop gentil
    Pour l'axe des Y tout est Ok

    j'ai un probléme pour l'axe X, là c'est le code qui me fait l'acquisition de la variable pitch_Col2r et l'insére avec la date du pc dans la base de donnée, et à chaque 10 s le timer récupére une nouvelle valeur de pitch_Col2r :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                TheDateTimeNow = DateTime.Now;
                Form1.dtMain.Rows.Add(new Object[] { ++index, "Pitch_Col2", pitch_Col2r, DateTime.Now, ClassName });
                ObjConnectionSQL.InsertIntoDB(index, "Pitch_Col2", pitch_Col2r.ToString(), TheDateTimeNow, ClassName);

    vous avez pas d'idée sur comment initialisé l'axe X (la date) pour qu'il me trace une valeur à chaque passage du timer

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    j'ai un problème pour l'axe X, là c'est le code qui me fait l'acquisition de la variable pitch_Col2r et l’insère avec la date du pc dans la base de donnée, et à chaque 10 s le Timer récupéré une nouvelle valeur de pitch_Col2r :
    1/ tu "pick" comme un pique assiette
    - ta valeur pitch_Col2r et tu l'ajoute en tant que coord Y dans le chart1.Series[numéro] approprie ...
    2/ idem pour ta variable temps TheDateTimeNow en tant que coord X.
    Ceci après l'avoir incrémenté évidement de 10 secondes (ton Timer doit avoir un Interval = 10000 soit 10 000 millisecondes )...
    Merci à la fonction Ole DateTimeNow.ToOADate() au passage ...

    L'exemple de code .cs qui suit illustre ce qu'il faut faire :
    - Timer.intervall = 1 second...
    - nombre de points affichés 50 soit un temps de défilement de 50 secondes
    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Windows.Forms.DataVisualization.Charting;
    using System.Globalization;
     
    namespace WinRealRimeChart
    {
        public partial class FormTest : Form
        {
            private int nbPointAffiches = 50;
            private Random rnd = new Random();
            private DateTime TheDateTimeNow = DateTime.Now;
     
               public FormTest()
            {
                InitializeComponent();
                this.timer1.Enabled = false;
                this.timer1.Interval = 1000; //1 seconde au lieu de 10 secondes pour le test;
            }
     
            private void FormTest_Load(object sender, EventArgs e)
            { 
                // formatage  de l'axe X ou date pour l'affichage suivant besoins
                this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "dd:hh:mm:ss";
                SetupSeries();
                this.timer1.Enabled = true ;
     
            }
            private void SetupSeries()
            {
                for (int i = 0; i < this.chart1.Series.Count;i++ )
                {
                    Series ser = this.chart1.Series[i];
                    ser.ChartType = SeriesChartType.FastLine;
                    ser.Color = Color.Red;
                    ser.XValueType = ChartValueType.DateTime;
                }
            }
            private void timer1_Tick(object sender, EventArgs e)
            {
     
                //ici ton code d'insertion dans la bd..
                //.........................................
     
     
                // si on depasse 50 points ,on supprime le premier point
                if (this.chart1.Series[0].Points.Count > nbPointAffiches)
                {
                    this.chart1.Series[0].Points.RemoveAt(0);
                }
     
                else // sinon on insere le suivant
                {
                    // incrementation de ta var TheDateTimeNow
                    TheDateTimeNow = TheDateTimeNow.AddSeconds(1);
     
                    // nouveau point
                    DataPoint newPt = new DataPoint();
                    newPt.XValue = TheDateTimeNow.ToOADate();
                    newPt.YValues[0] = rnd.Next(10, 111);
                    this.chart1.Series[0].Points.Add(newPt);
                }
     
     
            }
        }
    }
    bon code....

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci beacoup, c'est gentil

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Doublon avec cette discussion :
    https://www.developpez.net/forums/d1...nnee-question/

    Merci de ne pas poster deux fois.

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  2. tracer des courbes en opengl???
    Par jollo dans le forum OpenGL
    Réponses: 10
    Dernier message: 28/02/2013, 09h28
  3. Tracer une courbe avec 2 tableau de points
    Par babarpapa dans le forum 2D
    Réponses: 3
    Dernier message: 19/04/2006, 15h24
  4. [Images] [Librairie] Tracer une courbe ???
    Par cedre22 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 20/02/2006, 14h53
  5. Tracer une courbe théorique sur un TChart
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/09/2005, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo