compusayar
Üye
- Katılım
- 2 Kas 2016
- Mesajlar
- 3
- Puanları
- 1
- Yaş
- 45
[ÇÖZÜLDÜ]
Arkadaşlar merhaba,
Konuyu yanlış yere açtıysam şimdiden kusura bakmayın.
Elektronik ve PLC sistemleri tarafında nerdeyse hiç bilgim yok diyebilirim.
İnternette biraz araştırırken burayı buldum ve oldukça güzel paylaşımlar olduğunu gördüm.
Sorunum ile ilgili forum içinde biraz araştırma yaptım ama anlayacağım şekilde veriler bulamadım. Konuya tam hakim olamadığım için doğru kelimeler ile arayamamış ta olabilirim.
Sorunum şu;
İş yerinde bir makine den GMT GLC-396T Plc vasıtası ile makinenin çalışma bilgileri çekilip Windows uygulaması yardımı ile ekranda görüntüleniyor. Plc yi temin ettiğimiz firma tarafından basit bir yazılım verilmiş ve verileri kaydedemiyoruz.
Bende C# tarafında bir uygulama geliştirip Datagrid View içine bu kayıtları almak ve gerektiğinde bir veritabanına kaydetmek istiyorum.
Sizlere sormak istediğim şey, Plc den belirtilen TAG lerin değerlerini anlık olarak okumak için kod yardımı (C# dilinde bağlantı ve okuma).
Dediğim gibi biraz araştırmalarım sonucu EasyModbus.dll yardımı ile Plc ye bağlanabildim ancak istediğim verileri çekemedim;
Ekte 2 adet görsel resim mevcut,
1nci resim: Firma tarafından verilen yazılımın Plc tanımlama ekranı burada istediğimiz TAG leri yazıp adresleri belirtiyoruz.
2nci Resim: benim yazdığım kodlar neticesinde Plc den gelen veriler. (c# kodlarım aşağıdaki gibi)
public static void plcBilgiAl()
{
Form1 frm1 = new Form1();
string formAdi = "Form1";
if (Application.OpenForms[formAdi] == null) { frm1.Show(); }
else { frm1 = (Form1)Application.OpenForms[formAdi]; frm1.Focus(); }
string plcIPAdress = "169.254.8.100";
int plcPort = 23;
EasyModbus.ModbusClient modBus = new EasyModbus.ModbusClient(plcIPAdress, plcPort);
#region
try
{
modBus.Connect();
frm1.label1.Text = "Plc ile bağlantı sağlandı..";
}
catch (Exception hata)
{
//MessageBox.Show(hata.Message.ToString());
baglantiHatasi = 1;
frm1.label1.Text = "Plc bağlantı Hatası!!!";
}
if (baglantiHatasi == 0)
{
frm1.label2.Text = "Plc değerleri Kaydediliyor...";
//*******************************************
bool[] readCoils;
readCoils = modBus.ReadCoils(0, 25);
byte say1 = 0;
frm1.listBox1.Items.Clear();
for (int i = 0; i < readCoils.Length; i++)
{
frm1.listBox1.Items.Add(say1 + " - " + readCoils.ToString());
say1++;
}
modBus.Disconnect();
//*******************************************
//*******************************************
modBus.Connect();
int[] readInput;
readInput = modBus.ReadInputRegisters(0, 25);
byte say2 = 0;
frm1.listBox2.Items.Clear();
for (int i = 0; i < readInput.Length; i++)
{
frm1.listBox2.Items.Add(say2 + " - " + readInput.ToString());
say2++;
}
modBus.Disconnect();
//*******************************************
modBus.Connect();
int[] readHoldings;
readHoldings = modBus.ReadHoldingRegisters(0, 25);
byte say3 = 0;
frm1.listBox3.Items.Clear();
for (int i = 0; i < readHoldings.Length; i++)
{
frm1.listBox3.Items.Add(say3 + " - " + readHoldings.ToString());
say3++;
}
modBus.Disconnect();
//*******************************************
#endregion
frm1.label3.Text = "Plc bağlantısı Sonlandırıldı..";
}
}
Not: verileri önce listbox da görmek istedim, henüz Datagridview e aktarmadım.
Arkadaşlar merhaba,
Konuyu yanlış yere açtıysam şimdiden kusura bakmayın.
Elektronik ve PLC sistemleri tarafında nerdeyse hiç bilgim yok diyebilirim.
İnternette biraz araştırırken burayı buldum ve oldukça güzel paylaşımlar olduğunu gördüm.
Sorunum ile ilgili forum içinde biraz araştırma yaptım ama anlayacağım şekilde veriler bulamadım. Konuya tam hakim olamadığım için doğru kelimeler ile arayamamış ta olabilirim.
Sorunum şu;
İş yerinde bir makine den GMT GLC-396T Plc vasıtası ile makinenin çalışma bilgileri çekilip Windows uygulaması yardımı ile ekranda görüntüleniyor. Plc yi temin ettiğimiz firma tarafından basit bir yazılım verilmiş ve verileri kaydedemiyoruz.
Bende C# tarafında bir uygulama geliştirip Datagrid View içine bu kayıtları almak ve gerektiğinde bir veritabanına kaydetmek istiyorum.
Sizlere sormak istediğim şey, Plc den belirtilen TAG lerin değerlerini anlık olarak okumak için kod yardımı (C# dilinde bağlantı ve okuma).
Dediğim gibi biraz araştırmalarım sonucu EasyModbus.dll yardımı ile Plc ye bağlanabildim ancak istediğim verileri çekemedim;
Ekte 2 adet görsel resim mevcut,
1nci resim: Firma tarafından verilen yazılımın Plc tanımlama ekranı burada istediğimiz TAG leri yazıp adresleri belirtiyoruz.
2nci Resim: benim yazdığım kodlar neticesinde Plc den gelen veriler. (c# kodlarım aşağıdaki gibi)
public static void plcBilgiAl()
{
Form1 frm1 = new Form1();
string formAdi = "Form1";
if (Application.OpenForms[formAdi] == null) { frm1.Show(); }
else { frm1 = (Form1)Application.OpenForms[formAdi]; frm1.Focus(); }
string plcIPAdress = "169.254.8.100";
int plcPort = 23;
EasyModbus.ModbusClient modBus = new EasyModbus.ModbusClient(plcIPAdress, plcPort);
#region
try
{
modBus.Connect();
frm1.label1.Text = "Plc ile bağlantı sağlandı..";
}
catch (Exception hata)
{
//MessageBox.Show(hata.Message.ToString());
baglantiHatasi = 1;
frm1.label1.Text = "Plc bağlantı Hatası!!!";
}
if (baglantiHatasi == 0)
{
frm1.label2.Text = "Plc değerleri Kaydediliyor...";
//*******************************************
bool[] readCoils;
readCoils = modBus.ReadCoils(0, 25);
byte say1 = 0;
frm1.listBox1.Items.Clear();
for (int i = 0; i < readCoils.Length; i++)
{
frm1.listBox1.Items.Add(say1 + " - " + readCoils.ToString());
say1++;
}
modBus.Disconnect();
//*******************************************
//*******************************************
modBus.Connect();
int[] readInput;
readInput = modBus.ReadInputRegisters(0, 25);
byte say2 = 0;
frm1.listBox2.Items.Clear();
for (int i = 0; i < readInput.Length; i++)
{
frm1.listBox2.Items.Add(say2 + " - " + readInput.ToString());
say2++;
}
modBus.Disconnect();
//*******************************************
modBus.Connect();
int[] readHoldings;
readHoldings = modBus.ReadHoldingRegisters(0, 25);
byte say3 = 0;
frm1.listBox3.Items.Clear();
for (int i = 0; i < readHoldings.Length; i++)
{
frm1.listBox3.Items.Add(say3 + " - " + readHoldings.ToString());
say3++;
}
modBus.Disconnect();
//*******************************************
#endregion
frm1.label3.Text = "Plc bağlantısı Sonlandırıldı..";
}
}
Not: verileri önce listbox da görmek istedim, henüz Datagridview e aktarmadım.
Son düzenleme: