seri portdan gelen datayı ayırma

Başlatan answer, 31 Aralık 2014, 18:11:36

answer

Arkadaşlar merhaba sitede yeniyim c# da seriport programı yazıyorum seriport kısmında sorun yok verileri alıp göndere biliyorum. benim amacım 3 farklı veri gelecek string olarak "@1,2,3" gibi ben burada gelen veriyi
1 verisini bir label'a ,2 verisini başka label'a 3'üde başka labelle atamak istiyorum ama bir türlü kod çalışmadı.
string s = textBox1.Text;// string alındı bunula
            string ctrl = s.Substring(0, 1);// gelen strıngın ilk harfi kesildi
            if (ctrl == "@")// ilk harfin kontrolu yapıldı 
                //data format"@5,2,3"

            {
                string ctrl1 = s.Substring(1, s.Length - 1);
                for (int i = 0; i < ctrl1.Split(',').Length; i++)
                {
                    data[i] = Convert.ToDouble(ctrl1.Split(',')[i]);
                }
            }


kod olarak yukarıdaki sistem gibi yapıyorum ama bir türlü olmadı daha önce bu tarz işlem yapan arkadaşlar bir yardımcı olabilirler mi acaba?

muhittin_kaplan

okuma işlemini nasıl yapıyorsun
readline mı
readexiting mi
readchar mı hangisi ?

answer

hocam okuma fonksiyonum şu şekilde;
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            
            

            try
            {
                indata = myserial.ReadExisting();
                this.Invoke(new EventHandler(DisplayText));
            }
            catch (Exception hata)
            {
                MessageBox.Show("Hata:" + hata.Message);
            }
            
        }/*********************************************************/


        private void DisplayText(object s, EventArgs e)
        {
            rtbEkran.Text += indata;
            rtbEkran.SelectionStart = rtbEkran.Text.Length;
            rtbEkran.ScrollToCaret();
            indata = String.Empty;
        }

muhittin_kaplan

read exiting yaparsan ne gelirse alırsın.
örneğin sen mcu tarafında @ABD9 göndermek istedin
@ da
A da
B de ve diğerlerinde de burası tetiklenir.

Genel Uyguladığım Yöntem,
Mcu Tarafında ABCD9/r/n gönderir
PC tarafında READLINE ile alırım. (/r/n yı görene kadar Bufferı doldurur.)

answer

Teşekkürler hocam dediğiniz gibi yapınca sorun ortadan kalktı bu şekilde çalışıyor kodlar.

public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            
            

            try
            {
                indata = myserial.ReadLine();
                this.Invoke(new EventHandler(DisplayText));
            }
            catch (Exception hata)
            {
                MessageBox.Show("Hata:" + hata.Message);
            }
            
        }/*********************************************************/


        private void DisplayText(object s, EventArgs e)
        {

            string ctrl = indata.Substring(0, 1);
            if (true == timer1.Enabled)
            {

                if ("@" == ctrl)
                {
                    string ctrl1 = indata.Substring(1, indata.Length - 1);
                    for (int i = 0; i < ctrl1.Split(',').Length; i++)
                    {
                        data[i] = Convert.ToDouble(ctrl1.Split(',')[i]);
                    }

                    label6.Text = Convert.ToString(data[0]);
                    label7.Text = Convert.ToString(data[1]);
                    label8.Text = Convert.ToString(data[2]);
                }
            }


            rtbEkran.Text += indata;
            rtbEkran.SelectionStart = rtbEkran.Text.Length;
            rtbEkran.ScrollToCaret();
            indata = String.Empty;
        }





kodda yukarıda daha sonra bu tarz uygulama yapıcak arkadaşlara belki yardımı dokunur.

adali1414

hocam calısan örneğin kaynak dosyalarını paylasmanız mümkünmü? c# konusunda yeniyim hataların üstesinden gelemedim
tesekkürler paylasım için

answer


adali1414

çok çok teşekkür ederim . inceleyip kodları anlamaya calısacağım