at komutu response

Başlatan electricker, 25 Temmuz 2013, 20:52:59

electricker

Teraterm programında at komutlarının telefonun cevaplarını hemen bir sekme sonra görebiliyorum. Kendim c# da at komutlarıyla mesaj atma yapıyorum ancak , response görmem gerektiğnde Mesela şarj durumunu seri porttan nasıl alabilirim ? bunu string olarak nasıl okuyabilirim seri porttan ?

yxsdf

Probleminizi tam anlayamadım. Elinizde bir AT komutu var, bunu gönderince şarj bilgisi geliyor. Siz C# kullanarak seri porttan bu komutu gönderiyorsunuz ancak geri gelen cevabı okuyamıyorsunuz, doğru mu?
www.yxsdf.com © 2014

electricker

aynen hocam , teraterm de gordugum degerleri c# da nasıl okuyabılırım ?

striger

C# la yazılmıs seriport program ornekleri var forumda gelen veriyi nasıl text box atacagını gorebilirsin

Gökhan BEKEN

kendimden alıntı: https://www.picproje.org/index.php/topic,47144.msg350717/topicseen.html

Alıntı Yap12-C# ta seriport veri görderme ve almak için kodlar:

Not: Projenize 1 adet buton, 1 adet textbox, 1 adet combobox ve en önemlisi 1 adet serialPort nesnesi ekleyiniz.
using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO.Ports;

 

namespace rs232_projesi

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

 

private void Form1_Load(object sender, EventArgs e)

{

string[] portlar = SerialPort.GetPortNames();  // portları dizi halinde aldık

foreach (string port in portlar)

{

comboBox1.Items.Add(port.ToString()); // Portlarımızı combobox ın içine aldık.

}

 

CheckForIllegalCrossThreadCalls = false;

/*

Textboxlar main thread'a bağlıdır, burada oluşan bir nesnedir.

Seriportun datareceived eventi kendine başka bir thread açar ve sürekli dinleme yapar ki böylece yeni data geldiğinde bunu alabilelim. Bu satırı yazmazsak: Event içinde datayı alıp, başka thread'a ait textboxa yazdırmaya çalıştığımız için derleyici "Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on." yani "Çapraz-iş parçacığı işlemi geçersiz ; hatası verir.

textbox1 bu thread üzerinde oluşturulmamış ki" mealinde birşeyler söylüyor, ee o zaman nasıl mümkün? Tabiki, bu denetimi aşağıdaki kodu form_load eventine veya form constructor'ının içine yazarak devre dışı bırakırsan.

CheckForIllegalCrossThreadCalls = false;

*/

}

 

void seri_port_baglan()

{

if (serialPort1.IsOpen) // Bağlantıyı açıyoruz.eğer önceden bağlan butonuna basmış isek yani bağlantıyı açmışsak aşağıdaki hata mesajını verecektir.

{

MessageBox.Show("Port Açık Bulunmaktadır..", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button3);

return;

}

else

{

try

{

serialPort1.BaudRate = int.Parse("9600"); // Hız olarak 9600 verdik.

serialPort1.DataBits = int.Parse("8"); // Veri bit ini de 8 bit olarak verdik

serialPort1.StopBits = System.IO.Ports.StopBits.One; // Durma bitini tek sefer olarak verdik.

serialPort1.Parity = Parity.None; // eşlik bit ini vermedik.

serialPort1.PortName = comboBox1.Text; // Port adlarını comboboxtan alıyoruz.

serialPort1.Open(); // Bağlantıyı açıyoruz

MessageBox.Show("Bağlantı Başarılı");

}

catch (Exception) // Herhangi bir hata anında alttaki hata mesajını alacağız..

{

MessageBox.Show("cihazınız bağlı değil...", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button3);

}

}

}

 

public string trDuzelt(string a) //Türkçe karakerleri, ingilizce karakterlere çevirmek için kullanıyoruz

{

a = a.Replace("İ", "I");

a = a.Replace("Ü", "U");

a = a.Replace("Ç", "C");

a = a.Replace("Ş", "S");

a = a.Replace("Ö", "O");

a = a.Replace("Ğ", "G");

a = a.Replace("ı", "I");

a = a.Replace("ü", "U");

a = a.Replace("ş", "S");

a = a.Replace("ç", "C");

a = a.Replace("ğ", "G");

a = a.Replace("ö", "O");

return a;

}

 

private void seri_port_data_gonder(string gonderilecek_veri)

{

try

{

if (serialPort1.IsOpen)

{

serialPort1.Write(gonderilecek_veri);

System.Threading.Thread.Sleep(150);

//alıcı cihaza okuması için biraz süre tanımak gerek, kul yapısı sonuçta :D

}

}

catch (Exception)

{

MessageBox.Show("Sonuç: Başarısız !", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button3);

}

}

 

void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

byte[] buffer;

buffer = new byte[1];

serialPort1.Read(buffer, 0, 0);

MessageBox.Show("Gelen veri:" serialPort1.ReadExisting());

// her gelen veriyi otomatik görmenize gerek yoksa bu satırın başına // koyunuz

}

 

private void button1_Click(object sender, EventArgs e) //veri gönderme butonu

{

seri_port_data_gonder(textbox1.text+(Char)13);

//textboxtaki veriyi, yazdığımız fonksiyon aracılığıyla rs232 den gönderiyoruz.

//char13, enterin ascii kodudur.

}

 

}

}

Özel mesaj okumuyorum, lütfen göndermeyin.

atioky_216

#5
bizlerin bitmeyen seri port çilesi :)

@meftun hocam bu "  &nbsp  " neyin nesidir? yaznlışlıkla mı yazılı, yoksa bir bir işevi mi var? editorde hatalı duruyor.


Hocam sadece seri portun randımanlı çalışacağı bir kod paylaşsanız da al-ver kısmı, üzerinde oynaya oynaya bir şeyler yapsak. (Ben yeni başlıyorum # a, ve sırf port kullanımı yüzünden)

Gökhan BEKEN

evet o yanlışlıkla araya kaynamış, şu an evdeyim ve elimde rs232 ile çalışan bir cihaz olmadığı için deneme şansım olmadı. Programı deneyip bir sorun varsa bildirirseniz yardımcı olurum.
http://gokhanbeken.com/dosyalar/rs232_uygulamasi.rar
Özel mesaj okumuyorum, lütfen göndermeyin.

atioky_216

#7
direk laptop ta com3 felan sanal seri portla deneyebilirsiniz yada com1 , galiba 2008 üstü VS ile yazmışsınız. Üst modelini kurup öyle deneyeceğim

Gökhan BEKEN

Alıntı yapılan: atioky_216 - 27 Temmuz 2013, 03:33:51
direk laptop ta com3 felan sanal seri portla deneyebilirsiniz yada com1
Cihaz bağlamadan , sanal seri port ile benim yazdığım c# programını haberleştirebiliyor muyum?
Eğer öyle bişey oluyorsa hangi program ile yapabilirim?

Alıntı yapılan: atioky_216 - 27 Temmuz 2013, 03:33:51
galiba 2008 üstü VS ile yazmışsınız. Üst modelini kurup öyle deneyeceğim
Evet, visual studio 2012 ultimade ile yazdım.
Özel mesaj okumuyorum, lütfen göndermeyin.

atioky_216

#9
12 ile baktım, yazılım kendisi uygun COM portunu buluyor ama baglan yada ayrıl seçeneği olsa güzel olurdu. Bir de data gönder deyince gelen data aşağıdaki bölmeye geleceğine farklı bir kutucuk açılıyor. Az daha gayret ile güzeli yapılabilir


Bende #a yeni başlayacağım için en azında gönder-al kısmı elimde olsun oyle çalışayım derdinde idim, teşekkür ederim meftun hocam.

mesaj birleştirme:: 27 Temmuz 2013, 15:53:55

Alıntı yapılan: meftun - 27 Temmuz 2013, 14:25:40
Cihaz bağlamadan , sanal seri port ile benim yazdığım c# programını haberleştirebiliyor muyum?
Eğer öyle bişey oluyorsa hangi program ile yapabilirim?

Öyle olmuyor ancak, COM portuna sadece 1 tanesi bağlanıyor (normal şartlardan bahsediyorum) sanal COM portuna teki bağlanır siz data gonderince alınıp alınamadığına bakmak için kullanılır genelde.

Galiba alta koyduğun gelen data kısmı da karşı taraf göndermeye başlayınca datayı otomatik göstersin diye koydun