c# ile seri port, grafik, excel işlemleri

Transkript

c# ile seri port, grafik, excel işlemleri
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

using
using
using
using
using
Aşağıdaki kütüphaneleri ekleyiniz.
System.Data.SqlClient;
System.IO.Ports;
System.IO;
System.Drawing.Imaging;
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);
}
}

Benzer belgeler

Görsel Programlama Ders 9

Görsel Programlama Ders 9 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace PCK...

Detaylı

Untitled

Untitled txtId.Clear(); txtAdi.Clear(); txtModel.Clear(); txtSeriNo.Clear(); txtAdet.Clear();

Detaylı