• 21-08-2015, 09:43:40
    #1
    Arkadaşlar Merhaba,

    Seri port üzerinden C# üzerinden veri okumaktayım ve bunları dataGridView e yazdırmaktayım. Fakat bi sorun mevcut program çalışırken verileri alıyor ama mesela gelenveri[1] 1. sutunda gelenveri2[1] 2. sutunda zaman bilgisi 3. sutunda yer alması gerekiyor. Program ise şöyle çalışıyor;

    gelenveri[1] i alıyor yazıyor zaman bilgisini yazıyor ortasını boş bırakıyor ve hemen aynı zamanda gelenveri2[1] alıyor bialt satıra ekleyerek kayma meydana geliyor.

    not : thread kullandım.

    datagridview olması gereken veri şu şekilde
    gelenveri[1] gelenveri2[1] zamanbilgisi

    serialPort1.DataReceived += new SerialDataReceivedEventHandler(seri_port_oku1);
    
    serialPort2.DataReceived += new SerialDataReceivedEventHandler(seri_port_oku2);

           private void seri_port_oku1(object sender, SerialDataReceivedEventArgs e)
            {
    
                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadLine();
                if (indata != "" || indata != null)
                {
                    string[] gelenveri = indata.Split(',');
    
                    dataGridView1.Rows.Add(gelenveri[1], "", saat.Text);
                }
            }
            private void seri_port_oku2(object sender, SerialDataReceivedEventArgs e)
            {
    
                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadLine();
                if (indata != "" || indata != null)
                {
                    string[] gelenveri2 = indata.Split(',');
    
                    dataGridView1.Rows.Add(null, gelenveri2[1], null);
                }
            }

            void goster1()
            {
                while (true)
                {
                    serialPort1.Write("AA" + "\r\n");
                    serialPort2.Write("AA" + "\r\n");
    
                     System.Threading.Thread.Sleep(1000);
    
                    if (tiklama.Text == "0")
                        break;
                }
            }
    
            private void seri_port_data_gonder()
            {
                try
                {
                    if (serialPort1.IsOpen && serialPort2.IsOpen)
                    {
                       Thread thread = new Thread(new ThreadStart(goster1));
    
                        if (tiklama.Text == "1")
                        {
                            thread.Start();
                        }
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Sonuç: Başarısız !", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button3);
                }
            }
    
    seri_port_data_gonder();
  • 21-08-2015, 10:54:43
    #2
    Seri portları okutup bir stringe yazdırdıktan sonra,

    dataGridView1.Rows.Add(ilkstring, ikincistring, tarih);

    şeklinde ekleme yaparsanız sorun çözülür.

    Veriler farklı zamanlarda geliyorsa eğer,

    Datagridviewin son boş satırını kontrol ettirip
    dataGridView1.Rows[sonboşsatırid].Cells[0].Value = ilkveri;
    dataGridView1.Rows[sonboşsatırid].Cells[1].Value = ikinciveri;

    şeklinde giriş yaptırabilirsiniz.
  • 21-08-2015, 10:57:13
    #3
    işte sıkıntı veriler aynı zamanda geliyor iki tarafa da dikkat ederseniz iki verifarklı fonksiyonlardan geliyor birisi seriport1 için diğeri seriport2 için
  • 21-08-2015, 11:10:46
    #4
    Kodları değiştirip yazdığım zaman hata mesajı alıyorum r10 tarafından.

    bir string tanımlayacaksınız veri diye,
    o veri stringine ilk seriport okumasında veriyi yazacaksınız.
    ikinci seri port okumasında ise

    datagridview1.rows.add(veri,gelenveri[1],saat);

    şeklinde ekleme yapacaksınız.

    Kolay gelsin
  • 21-08-2015, 11:14:05
    #5
     
            string veri;
            private void seri_port_oku1(object sender, SerialDataReceivedEventArgs e)
            {
    
                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadLine();
                if (indata != "" || indata != null)
                {
                    string[] gelenveri = indata.Split(',');
                    veri=gelenveri[1];
                    //dataGridView1.Rows.Add(gelenveri[1], "", saat.Text);
                }
            }
            private void seri_port_oku2(object sender, SerialDataReceivedEventArgs e)
            {
    
                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadLine();
                if (indata != "" || indata != null)
                {
                    string[] gelenveri2 = indata.Split(',');
    
                    dataGridView1.Rows.Add(veri,gelenveri2[1], saat.Text);
                }
            }

    arkadaşlar çözümbuşekilde hallolmuştur. aslında denediğimi düşünüyordum ama denememişim.ObreuS arkadaşıma teşekkür ediyorum.