C# İLE SERİ PORT, GRAFİK, EXCEL İŞLEMLERİ Hazırlayan: Arş. Gör. Emel SOYLU Karabük Üniversitesi Teknoloji Fakültesi Mekatronik Mühendisliği Bölümü 2016
1 Aşağıdaki kütüphaneleri ekleyiniz. using System.Data.SqlClient; using System.IO.Ports; using System.IO; using System.Drawing.Imaging; using System.Data.OleDb; Solution explorer bölmesinde referanslara sağ tıklayıp Microsoft. Office. Interop. Excel ekleyiniz. Global değişkenler double t, sayi; int sample; double sample_rate; DataTable tablo = new DataTable(); string veri = "0"; int str; Form_Load kodları t = 0; sayi = 0; tablo.columns.add("tarih"); tablo.columns.add("saat"); tablo.columns.add("zaman"); tablo.columns.add("veri"); str = 0;
2 Aşağıdaki gibi bir pencere tasarımı yapınız. Dosya aç butonu //excel dosyasını datagride getirme // dosyaya erişim OpenFileDialog opendlg = new OpenFileDialog(); opendlg.initialdirectory = @"C:\\"; opendlg.showdialog(); string path = opendlg.filename; OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;"); OleDbDataAdapter adp = new OleDbDataAdapter("SELECT * FROM [Sayfa1$]", baglanti); // verileri datagride ekleme DataTable dt = new DataTable(); dt.clear(); adp.fill(dt); datagridview1.datasource = dt; datagridview1.datasource = dt; Grafik butonu chart1.series[0].points.clear(); int i, k; k = datagridview1.rowcount; double veri; double zaman; for (i = 0; i < k-1; i++) zaman = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value); veri=convert.todouble(datagridview1.rows[i].cells[3].value); chart1.series[0].points.addxy(zaman,veri); Kaydet butonu Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel._Workbook workbook = app.workbooks.add(type.missing); Microsoft.Office.Interop.Excel._Worksheet worksheet = null; app.visible = true; worksheet = workbook.sheets["sayfa1"]; worksheet = workbook.activesheet; for (int i = 1; i < datagridview1.columns.count + 1; i++)
3 worksheet.cells[1, i] = datagridview1.columns[i - 1].HeaderText; for (int i = 0; i < datagridview1.rows.count - 1; i++) for (int j = 0; j < datagridview1.columns.count; j++) if (datagridview1.rows[i].cells[j].value!= null) worksheet.cells[i + 2, j + 1] = datagridview1.rows[i].cells[j].value.tostring(); else worksheet.cells[i + 2, j + 1] = ""; Grafiği temizle chart1.series[0].points.clear(); Tabloyu temizle datagridview1.datasource = null; str = 0; Timer-1 aç sample = 500; sample_rate = Convert.ToDouble(sample) / 1000; timer1.interval = sample; timer1.enabled = true; Timer-1 kapat timer1.enabled = false; Timer-2 aç sample = 500; sample_rate = Convert.ToDouble(sample) / 1000; timer2.interval = sample; timer2.enabled = true; Timer-2 kapat timer2.enabled = false; seri port aç serialport1.portname = "COM1"; serialport1.baudrate = 9600; serialport1.databits = 8; serialport1.parity = Parity.None; serialport1.stopbits = StopBits.One; serialport1.handshake = Handshake.None; serialport1.rtsenable = true; serialport1.dtrenable = true; serialport1.readtimeout = 500; serialport1.writetimeout = 500; serialport1.open();
4 seri port kapat if (serialport1.isopen == true) serialport1.close(); timer 1 t = t + sample_rate; Random rasgele = new Random(); sayi= RandomNumber(-100, 100); chart1.series[0].points.addxy(t, sayi); tablo.rows.add(datetime.now.tolongdatestring(),datetime.now.tolongtimestring(),convert.tostring(t), Convert.ToString(sayi)); datagridview1.datasource = tablo; timer2 t = t + sample_rate; veri = serialport1.readline(); chart1.series[0].points.addxy(t, Convert.ToDouble(veri)); datagridview1.rows[str].cells[0].value = DateTime.Now.ToLongDateString(); datagridview1.rows[str].cells[1].value = DateTime.Now.ToLongTimeString(); datagridview1.rows[str].cells[2].value = t.tostring(); datagridview1.rows[str].cells[2].value = veri; tablo.rows.add(convert.tostring(t), Convert.ToString(sayi)); datagridview1.datasource = tablo; rasgele sayı fonksiyonu private static readonly Random random = new Random(); private static readonly object synclock = new object(); public static int RandomNumber(int min, int max) lock (synclock) // synchronize return random.next(min, max);