Makel C500.MY.2256 RS485 C# RS485 Veri Okuma

hlsrdm

Üye
Katılım
1 Eki 2012
Mesajlar
6
Puanları
1
İyi Günler arkadaşlar
Ben başlıkta belirtilen makel cihazından c# programı ile veri okumak istiyorum. Makelin kendi programı ile cihazdan rs485 bağlantısından veri okuyorum. Ama c# dan yazdığım programdan daha cihazdan hiç bir veri okuyamadım. Makeli bile arayıp döküman istedim ama yapamadım. Kaynak kod ve dökümanı eke ekledim. Yardımcı olabilecek biri var mı?
 

Ekli dosyalar

  • makel gelen.rar
    66.3 KB · Görüntüleme: 35
Kod:
                    serialPort1.DiscardInBuffer(); //Gelen veri hafızasını temizler.

                    serialPort1.DiscardOutBuffer(); //Giden veri hafızasını temizler.

                    serialPort1.Write("/?MSY73306019!"); // Burada String türü veri gönderdik

                    serialPort1.Write("\r\n"); // satır başı



kodda ilgili alanı yukarıda gibi yapınca cihaz tepki verdi





daha sonra koda



                    //serialPort1.Write("\r\n" + char.ConvertFromUtf32(6) + "057");

                    serialPort1.DiscardInBuffer(); //Gelen veri hafızasını temizler.

                    serialPort1.DiscardOutBuffer(); //Giden veri hafızasını temizler.

                    serialPort1.Write("\r\n");

                    serialPort1.Write("006051");   //[ACK] karşılığına 006 yazdım

                    serialPort1.Write("\r\n");





                    Thread.Sleep(500);



                    serialPort1.Close(); //300 bps ile olan bağlantıyı kapatıyoruz.



                    serialPort1.BaudRate = 9600; //9600 bps e ayarlıyoruz.

                    serialPort1.Open(); // tekrar açıyoruz.

                    serialPort1.DiscardInBuffer(); //Gelen veri hafızasını temizler.

                    serialPort1.DiscardOutBuffer(); //Giden veri hafızasını temizler.

                    serialPort1.DtrEnable = true; //DTR özelliğini açıyoruz.
koda ilgili alanı ekleyince buna hiç bir tepki vermiyor
 
Moderatör tarafında düzenlendi:
Komutları karakter dizisi şeklinde göndermelisin.
"\r\n" her komutun sonuna eklenir.
006051 komutu yanlış. ACK değeri (char)6 kodu ile gönderilir.
051 komutunu string şekilde gönderebilirsin ancak verilerin karışmaması için char dizisi şeklinde komut gönderin.

char[] iletimHizi = {(char)6, '0', 5', '0', '\r', '\n'};
serialPort1.Write(iletimHizi, 0, iletimHizi.Length);

ardından 250 milisaniye bekleme yapın ve sonra portu kapatın, BaudRate'ı değiştirin ve portu açın
 

öncelikle cevabınız için teşekkür ederim
ben kodumu bu şekilde düzelttim
event toolbax daki serial portun eventindan geliyor. seri porta veri gelirse event aktif oluyor
1. okuma event aktif oluyor ama 2. bağlantıda event gelmiyor. ne yapabilirim acaba
Kod:
private void btnStart_Click(object sender, EventArgs e)

        {

            serialPort1.Close();

            serialPort1.PortName = "COM3"; // Kullanacağımız seri port adını seçiyoruz (String)

            serialPort1.BaudRate = 300;  // Seri haberleşme hızını seçiyoruz (int32)

            serialPort1.DataBits = 7; // göndereceğimiz bilginin kaç bitten oluşacağını bildiriyoruz (int32).

            serialPort1.Parity = Parity.Even; // Eşlik bitidir. Gönderilen verinin doğruluğunu kontrol etmek için kullanılır.

            serialPort1.StopBits = StopBits.One; // Stop bitinin kaç bit olacağını belirtir.



            Thread.Sleep(300);

            indata = string.Empty;

            txtOkunan.Text = "";

            txtRead.Text = "";



            serialPort1.Open(); // Seri portumuzu açıyoruz

            serialPort1.DtrEnable = false;

            if (serialPort1.IsOpen)

            {

                try

                {



                    serialPort1.DiscardInBuffer(); //Gelen veri hafızasını temizler.

                    serialPort1.DiscardOutBuffer(); //Giden veri hafızasını temizler.



                  

                    char[] sayacOnay = { '/','?' ,'M', 'S', 'Y', '7', '3', '3', '0', '6', '0', '1', '9', '!','\r', '\n' };

                    serialPort1.Write(sayacOnay, 0, sayacOnay.Length);

                    Thread.Sleep(250);

                

***burada event aktif oluyor gelen veriyi okuyor







                    Thread.Sleep(2000);

                    serialPort1.DiscardInBuffer(); //Gelen veri hafızasını temizler.

                    serialPort1.DiscardOutBuffer(); //Giden veri hafızasını temizler.



                    char[] iletilenVeri = { (char)6, '0', '5', '1', '\r', '\n' };

                    serialPort1.Write(iletilenVeri, 0, iletilenVeri.Length);

                    Thread.Sleep(250);

                    serialPort1.Close(); //300 bps ile olan bağlantıyı kapatıyoruz.

                    serialPort1.BaudRate = 9600; //9600 bps e ayarlıyoruz.

                    serialPort1.Open(); // tekrar açıyoruz.

                    serialPort1.DtrEnable = true; //DTR özelliğini açıyoruz.

                    Thread.Sleep(250);



**bu kısımda event aktif olmuyor gelen veriyi okuyamıyorum





**** aşağıdaki komulardan hiç bir şey gelmiyor time out a düşüyor.



                    string gelen1 = serialPort1.ReadLine();

                    len = serialPort1.Read(bufferByte, 0, readData1.Length);

                    len = serialPort1.Read(bufferChar, 0, readData1.Length);   

                }



                catch (Exception ex)

                {

                    MessageBox.Show("1" + ex.ToString());

                }

            }

        }





private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

        {

            try

            {

                SerialPort sp = (SerialPort)sender;

                indata = sp.ReadExisting();

                txtOkunan.Text += indata;

            }

            catch (Exception ex)

            {

                MessageBox.Show("1" + ex.ToString());

            }



        }
2. bağlantıda veri okumak için ne yapabilirim
 
Moderatör tarafında düzenlendi:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…