Measurement Studio for VC++

cancel
Showing results for 
Search instead for 
Did you mean: 

wpf graph

Bonjour,

 

Je vous expose mon  probleme.

 

J'ai developpe une application  sous Win7 et VS2010 environnement C# et wpf.

 

Je dois afficher une courbe en temps réel sur une periode d'une heure avec un nouveau point toutes les 100ms (soit max 36000).

 

J'utilise l'objet graph NI et je dois également afficher le temps sur l'axe des abcisses. les graph sont "databinder" 

 

1er methode : J'ai utilser un analogWaveform mais au bout de 20000 points le rafraichissement commence a ralentir.  

 

2eme methode : J'ai vu sur le site la page optimisation des graph donc je passe par un objet ChartCollectionAnalogWaveform. Je le dimensionne a 36000 et effectue un append toutes les 100ms 

 

//ChartcollectionAnalogWaveform[] LengthCurveChart ;

//toutes les 100 ms
      NationalInstruments.AnalogWaveform<double> __waveLength = new AnalogWaveform<double>(1);
      DateTime[] __time =new DateTime[1];

      __waveLength.Timing = WaveformTiming.CreateWithRegularInterval(new TimeSpan(0, 0, 0, 0, 100), new DateTime(2000, 1, 1, 0, 0, 0));

              
      LengthCurveChart[0].Append(__waveLength);

 

Mais sur cette derniere methode j'ai un plantage au bout de quelques minutes ("Tha data store was modified ... Buffer<DateTime>".

 

Je n'ai pas trouver d'exemple sur le net avec des chartCollectionAnalogWaveform et/ou des affichage avec l'horodatage en abcisses.

 

J'aimerais savoir comment faire quel objet ou quellle methode utiliser ?

 

Merci

 

Johan

0 Kudos
Message 1 of 7
(5,905 Views)

Hello,

 

Tu es sur le forum "Discussions au sujet de NI LabVIEW". A priori, ton problème n'est pas lié à LabVIEW...

Donc je t'invite à poster ton problème sur ce forum, où tu trouveras surement plus d'aide:

 

http://forums.ni.com/t5/Discussions-au-sujet-des-autres/bd-p/4170

 

Ou alors l'un de ces forum, mais c'est en anglais:

http://forums.ni.com/t5/LabWindows-CVI/bd-p/180

http://forums.ni.com/t5/Measurement-Studio-for-VC/bd-p/231

 

 

Francis M
0 Kudos
Message 2 of 7
(5,897 Views)

Merci,

 

Je n'avais pas regardé c'est ca d'utiliser les favoris...

0 Kudos
Message 3 of 7
(5,893 Views)

Hello,

 

Est-ce qu'il est possible d'avoir le message d'exception complet ainsi que le Call Stack ? 🙂

Au mieux, le code en l'état (le plus simple possible) ?

 

Sinon : la taille des données dans wavelength est-elle fixe ? Quel est le mode de rafraichissement du graphe (les échelles notamment) ?

 

Cdt

--Eric

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

0 Kudos
Message 4 of 7
(5,871 Views)

Bonjour;

 

Voici mon code au plus simple

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using AE3465_LO01.Class;
using AE3465_LO01.View;

namespace AE3465_LO01
{

    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        #region delegate
        delegate void _SetDateTimeHandler();
        #endregion 

        #region Privees
        private NationalInstruments.Controls.ChartCollectionAnalogWaveform<double>[] _CurvesTest;
        
        #endregion 

        #region Contructeur
        public MainWindow()
        {
            InitializeComponent();

            _CurvesTest = new NationalInstruments.Controls.ChartCollectionAnalogWaveform<double>[1];
            _CurvesTest[0] = new NationalInstruments.Controls.ChartCollectionAnalogWaveform<double>(36000);

            graph1.DataSource = _CurvesTest;
        }
       
        #endregion 

        #region Callback    
        private void _TimerDateTime_Tick(Object stateInfo)
        {

           try
            {

                NationalInstruments.AnalogWaveform<double> __wave = new NationalInstruments.AnalogWaveform<double>(1);
                __wave.Timing = NationalInstruments.WaveformTiming.CreateWithRegularInterval(new TimeSpan(0, 0, 0, 0, 100), new DateTime(2000, 1, 1, 0, 0, 0).AddMilliseconds(_CurvesTest[0].Count * 100));

                __wave.Samples[0].Value = new Random().NextDouble();

                _CurvesTest[0].Append(__wave);                  
            }
            catch
            {
              
            }
        }
        #endregion

        #region Evenements Windows
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                //Abonnements
                _TimerDateTime = new System.Threading.Timer(_TimerDateTime_Tick, null, 0, 100);
            }
            catch(Exception err)
            {
                MessageBox.Show(err.Message);
            }
         
        }       

    
        #endregion        

    }
}

 Voici l'exception que j'ai

Exception.png

 

 

Dans mon programme "reel", ce n'est pas un timer qui me permet le rafraichissement du graph mais un evenement sur nouvelle valeur SVE (cadence de la carte 1point /100ms). 

 

Je viens juste constaté dans ce petit exemple que si j'augmente la periode de rafraichissement ca marche (pour le moment....).

 

J'ai effectué egalement un test avec la solution charting dans les exemples NI (Examples\WPF\Standard\charting), en mettant copiant 4 graphs et des chartcollectionanalogWaveform de (36000) pour avoir un temps reel sur la dernier heure au bout de 5h j'ai un plantage (plus de rafraichissement).

 

J'aimerais savoir quel sont les limites, sachant que je dois afficher 4 graphes qui contiennent chacun 3 courbes avec des points toutes les 100ms, et viusaliser la derniere heure (l'essai dur 24/48 h).

 

N'hesiter pas si vous voulez d'autres renseignements.

 

Cordialement,

 

Johan

 

 

0 Kudos
Message 5 of 7
(5,863 Views)

En fait, je pensais à un zip contenant le code et capture d'écran...

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

0 Kudos
Message 6 of 7
(5,855 Views)

Voici,

 

Ci joint les sources epurées.

 

Cordialement

 

Johan

0 Kudos
Message 7 of 7
(5,851 Views)