Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: ehliseyf - 20 Ekim 2016, 10:45:15

Başlık: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 20 Ekim 2016, 10:45:15
ECG için bir ekran tasarlamaya çalışıyorum. Lakin Verilerin videonun 6:20 dakikasındaki gibi sola akmasını nasıl sağlarım. Benim şuan görebildiğim verileri sürekli yüklüyorum. Veriler ekranı terk etmiyor üst üste binerek devam ediyor ve sürekli ekran ölçeği daralıyor. 2. olarak yüklediğim video benim sistemime aittir.

https://www.youtube.com/watch?v=RmkZxxBJ29U (https://www.youtube.com/watch?v=RmkZxxBJ29U) 6:20 ye bakabilirsiniz.

https://www.youtube.com/watch?v=vYLgtevWDPA&feature=youtu.be (https://www.youtube.com/watch?v=vYLgtevWDPA&feature=youtu.be)
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: FxDev - 20 Ekim 2016, 10:53:06
Aşağıda video'da kullandığım işini görür mü hızını vs. ayarlayabiliyorsun? Senin işini görür gibi. Aratmak istersen "C2DPushGraph" olarak nette aratabilirsin. Diğer türlü başka ek kaynaklara yönelmen lazım.

! No longer available (http://www.youtube.com/watch?v=_GTWoo3DOzk#)
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: barisertekin - 20 Ekim 2016, 11:11:18
Aslında sola akan birşey yok gibi. Ekrana çizilen t aralığı değişiyor.

Elimizde t,y değerleri varsa.

Draw(t0,t1,data array) fonksiyonu olsun.

t1 = DateTime.Now olması gerekiyor.
t0 = DateTime.Now - 2sn olabilir. Bu durumda ekranda sürekli son 2 saniyelik data görünmüş olur.

Bir timer içerisinde Draw fonksiyonunu çağırarark yapılabilir. Veya data geldikçe çağırılabilir.

Kolay gelsin.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 20 Ekim 2016, 11:22:23
Alıntı yapılan: barisertekin - 20 Ekim 2016, 11:11:18
Aslında sola akan birşey yok gibi. Ekrana çizilen t aralığı değişiyor.

Elimizde t,y değerleri varsa.

Draw(t0,t1,data array) fonksiyonu olsun.

t1 = DateTime.Now olması gerekiyor.
t0 = DateTime.Now - 2sn olabilir. Bu durumda ekranda sürekli son 2 saniyelik data görünmüş olur.

Bir timer içerisinde Draw fonksiyonunu çağırarark yapılabilir. Veya data geldikçe çağırılabilir.

Kolay gelsin.
Örnek bir proje kodu paylaşma imkanınız var mı ? Benim için biraz hava da kaldı.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 20 Ekim 2016, 12:16:40
hocam acelesi yoksa akşama bakayım, vb.net le yapmış olduğum kalman filter simulatörde kullanmıştım.

Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 20 Ekim 2016, 13:37:29
Alıntı yapılan: muhittin_kaplan - 20 Ekim 2016, 12:16:40
hocam acelesi yoksa akşama bakayım, vb.net le yapmış olduğum kalman filter simulatörde kullanmıştım.


Olur Hocam. Bekliyorum Teşekkürler.

mesaj birleştirme:: 21 Ekim 2016, 03:37:49

Alıntı yapılan: FxDev - 20 Ekim 2016, 10:53:06
Aşağıda video'da kullandığım işini görür mü hızını vs. ayarlayabiliyorsun? Senin işini görür gibi. Aratmak istersen "C2DPushGraph" olarak nette aratabilirsin. Diğer türlü başka ek kaynaklara yönelmen lazım.

! No longer available (http://www.youtube.com/watch?v=_GTWoo3DOzk#)
İnceliyorum Hocam. Teşekkürler.

mesaj birleştirme:: 20 Ekim 2016, 13:53:58

@FxDev Hocam bu bahsettiğinizi beğendim. Projeme nasıl dahil edebilirim. dll dosyasını choosee tools ile yüklemeye çalıştım. Bi hata ile karşılaşıyorum. Sürümleri mi var ? Eklenti gibi bir şey mi ?
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 20 Ekim 2016, 17:33:37
If Me.ListBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {[text]})
        Else

            deger = 255 - CInt([text])
            If CInt([text]) > 200 Then
                deger = CInt([text]) - 255
            Else
                deger = ([text])
            End If
            Me.ListBox1.Items.Add(deger)
            Me.ListBox1.SelectedIndex = Me.ListBox1.Items.Count - 1
            Me.Chart1.Series(0).Points.Add(deger)
            Me.Chart1.Series(1).Points.Add(Kalman(deger))
            If Chart1.Series(0).Points.Count > 50 Then Me.Chart1.Series(0).Points.RemoveAt(0)
            If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)


            Me.Chart1.Series(0).Points.Add(deger)
            Me.Chart1.Series(1).Points.Add(Kalman(deger))
ile değerleri ekliyorum

            If Chart1.Series(0).Points.Count > 50 Then Me.Chart1.Series(0).Points.RemoveAt(0)
            If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)

ile eğer 50den fazla değer varsa ilk baştakini siliyorum.

mesaj birleştirme:: 20 Ekim 2016, 17:34:50

https://www.youtube.com/watch?v=KwT9DoN8bYU (https://www.youtube.com/watch?v=KwT9DoN8bYU)
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 25 Ekim 2016, 14:24:14
@muhittin_kaplan Hocam sola kaydırma işini halletmek üzereyim. Bir iki sorum daha olacak. Biraz konudan Bahsedeyim. Benim 24 bitten oluşan 12 tane datam var. Hepsini ayrı chartlar ile göstermek istiyorum. Tabiki sola akar şekilde. Verilerimi USB ile alıyorum. Chip ile haberleşip SPI ile Alıyor. Sonra USB den PC ye aktarıyorum. Veriler geliyor. Şimdi Chart 1 2 3... Yapmak istedim. Sonuncu akıyor ama diğerleri akmıyor. Bunun için nasıl bir yol izlemeliyim. Birde Bu ekranları herhangi bir anda kaydetmek istiyorum ve kayıtların numaralandırılmasını istiyorum. Örneğin SS 1 SS 2 gibi sıradan gitmesini istiyorum. Aramam gereken yol, yöntem nedir  ? kullandığım bazı kod parçaları şunlar.
private void button4_Click_1(object sender, EventArgs e)
        {
           
            Directory.CreateDirectory("C:\\Ekran_Resimleri");
            this.chart1.SaveImage("C:\\Ekran_Resimleri\\ekrangörüntüsü.jpg", ChartImageFormat.Jpeg);
           
           
          //  Screenshot().Save(@"C:\Ekran_Resimleri\ekrangörüntüsü.jpg");
        } [\code]

[code]
this.chart1.Series["Data1"].Points.AddXY(0, Data_test[8]);
                  this.chart1.Series["Data2"].Points.AddXY(0, Data_test[7]);
                  this.chart1.Series["Data3"].Points.AddXY(0, Data_test[6]);
                 /* this.chart1.Series["Data4"].Points.AddXY(0, Data_test[5]);
                  this.chart1.Series["Data5"].Points.AddXY(0, Data_test[4]);
                  this.chart1.Series["Data6"].Points.AddXY(0, Data_test[3]);
                  this.chart1.Series["Data7"].Points.AddXY(0, Data_test[2]);
                  this.chart1.Series["Data8"].Points.AddXY(0, Data_test[1]);*/
               
                if (chart1.Series["Data1"].Points.Count > 200)
                {
                    chart1.Series["Data1"].Points.RemoveAt(0);
                    chart1.Series["Data2"].Points.RemoveAt(0);
                    chart1.Series["Data3"].Points.RemoveAt(0);
                }
[\code]
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 25 Ekim 2016, 14:41:55
yukardaki verdiğim kodda , iki seri var. yani aynı chart üzerinde 2 grafik

Me.Chart1.Series(0).Points.Add(deger1)
Me.Chart1.Series(1).Points.Add(deger2)


olarak ekle (c# için this.Chart1.Series(0).Points.Add(deger)  dir)

belli bir sayıyı geçince çıkart

If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)

Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 25 Ekim 2016, 15:07:51
Alıntı yapılan: muhittin_kaplan - 25 Ekim 2016, 14:41:55
yukardaki verdiğim kodda , iki seri var. yani aynı chart üzerinde 2 grafik

Me.Chart1.Series(0).Points.Add(deger1)
Me.Chart1.Series(1).Points.Add(deger2)


olarak ekle (c# için this.Chart1.Series(0).Points.Add(deger)  dir)

belli bir sayıyı geçince çıkart

If Chart1.Series(1).Points.Count > 50 Then Me.Chart1.Series(1).Points.RemoveAt(0)


Hocam ben aynı Chart üstünde göstermek istemiyorum. Farklı Chartlar üzerinde göstermek istiyorum. Aynı Chart üstünde gözüküyor.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 25 Ekim 2016, 15:11:11
o daha kolay.
birtane daha chart ekleyeceksin (Chart2)

this.Chart2.Series(0).Points.Add(deger2), veriyi eklemek için

If Chart2.Series(0).Points.Count > 50 Then Me.Chart2.Series(0).Points.RemoveAt(0), veriyi silmek için

Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: skara1214 - 25 Ekim 2016, 16:17:53
peki sola yığılarak gitmesi nasıl yapılır?
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 25 Ekim 2016, 21:50:13
Nasil pek anlamadim sola yigilarak gitmesini ?
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: skara1214 - 25 Ekim 2016, 22:09:44
data geldikçe scala genişlesin eski datalar yokolmasin diyorum
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: barisertekin - 26 Ekim 2016, 09:19:31
Sürekli son 2 saniye içinde gelen datayı ekrana çizdiğiniz zaman zaten otomatikman sola akıyormuş gibi gözükmeyecek mi?
Eski dataları yine tut ama ekranda değil :) Eski datalara bakmak istediğin zaman yine array'den okuyup zaman aralığına göre çizdirirsin.
Eski dataların ekranda durması gibi bir durum söz konusu olamaz.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 26 Ekim 2016, 10:02:24
Alıntı yapılan: skara1214 - 25 Ekim 2016, 22:09:44
data geldikçe scala genişlesin eski datalar yokolmasin diyorum
Chart Genişlesin istiyorsunuz. Chartın ve dolayısıyla formun boyutuyla oynayacak ve screen genişliğine gelince duracak şekilde olmalı.

var ch = new Chart();
ch.Size = new Size(600, 250);
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 26 Ekim 2016, 15:20:50
Peki Gridler ile ilgili bilgi verebilir misiniz. X ve Y hattında Ölçeklendirme için grid kullanmak istiyorum. Öğretir misiniz ?
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 26 Ekim 2016, 15:24:30
hocam grid den kastınız nedir ? grid den anladığım datagrid dir benim, (bazen chart üzerindeki serilere de grid deniliyor.)
eğer data gridden bahsediyorsanız, dataset i ve xml konusuna girmemiz gerekir.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 26 Ekim 2016, 16:37:26
Alıntı yapılan: muhittin_kaplan - 26 Ekim 2016, 15:24:30
hocam grid den kastınız nedir ? grid den anladığım datagrid dir benim, (bazen chart üzerindeki serilere de grid deniliyor.)
eğer data gridden bahsediyorsanız, dataset i ve xml konusuna girmemiz gerekir.
Yok Hocam hani bu ekranı bölen çizgiler var ya onlardan bahsediyorum. 2 grid arası 10mv mesala. Skala için düşünmüştüm. Bu osilaskoplarda filan var ya. Aralıklara göre Sinyalin genliği ve Frekansı ile ilgili bilgi elde ediyoruz. Onun aynısından yapmak istiyorum.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 26 Ekim 2016, 17:04:04
Seri iste hocam o. Chart uzerindeki serilerle oynayacagiz. Hic yapmadim ama bir bakmam lazim
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 27 Ekim 2016, 10:18:22
Alıntı yapılan: muhittin_kaplan - 26 Ekim 2016, 17:04:04
Seri iste hocam o. Chart uzerindeki serilerle oynayacagiz. Hic yapmadim ama bir bakmam lazim
Gridleri aç kapat yapıyorum ama sayısını ve aralıklarını ayarlamayı henüz bulamadım.

  private void button8_Click(object sender, EventArgs e)
        {
            this.chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = true;
            this.chart1.ChartAreas[0].AxisX.MinorGrid.Enabled = true;
            this.chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = true;
            this.chart1.ChartAreas[0].AxisY.MinorGrid.Enabled = true;
        }

        private void button9_Click(object sender, EventArgs e)
        {
            this.chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
            this.chart1.ChartAreas[0].AxisX.MinorGrid.Enabled = false;
            this.chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
            this.chart1.ChartAreas[0].AxisY.MinorGrid.Enabled = false;
        }
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 27 Ekim 2016, 14:04:10
Şunlara bir Bakın Hocam

chart1.ChartAreas[0].AxisY.Minimum = 10;
chart1.ChartAreas[0].AxisY.Maximum = 100;

olması lazım

http://stackoverflow.com/questions/23981710/scale-y-axis-of-a-chart-depending-on-the-values-within-a-section-of-x-values-for
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 27 Ekim 2016, 16:25:23
Alıntı yapılan: muhittin_kaplan - 27 Ekim 2016, 14:04:10
Şunlara bir Bakın Hocam

chart1.ChartAreas[0].AxisY.Minimum = 10;
chart1.ChartAreas[0].AxisY.Maximum = 100;

olması lazım

http://stackoverflow.com/questions/23981710/scale-y-axis-of-a-chart-depending-on-the-values-within-a-section-of-x-values-for
Denedim hocam oluyor. trackbar a ekledim. Oradan kendim ayarlıyorum. Aslında bunu Datanın max ve min değerine indexlesek nasıl olur. Bir rutin var mıdır hemen min max bulan bir standart.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 27 Ekim 2016, 17:25:13
otomatik olduğunda max min i kendisi ayarlıyor zaten.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: ehliseyf - 28 Ekim 2016, 09:46:42
Alıntı yapılan: muhittin_kaplan - 27 Ekim 2016, 17:25:13
otomatik olduğunda max min i kendisi ayarlıyor zaten.
Hocam iki tane sinyal olunca küçük olanı min büyük olanı max alıyor. Lakin sinyallerin birbirine göre çok büyüklü küçüklü. Ekrana sığdırma dediğimizi tam yapmıyor.
Başlık: Ynt: C# Chart ile Veri gösterimi (Sola Akan)
Gönderen: muhittin_kaplan - 28 Ekim 2016, 10:55:11
aynı chart üzerinde değerleri birbirinden çok farklı iki veriyi göstermektense iki ayrı chart yapmak bir çözüm olabilir.