mesela yaptığım örnekten birkaç kod paylaşmakta yarar var sanırım.Magic üstad merhaba kodlar gayet güzel çalışıyor ellerine sağlık,yanlız benim takıldığım sormak istediğim bir nokta var.Kodları ethernet kablosu takılı olamadan çalıştırdığımda ekran donup kalıyor bunun için kodlarda değişiklik yapayım dedim ama bi türlü beceremedim mesela ethernet kablosunun takılı olup olamadığını bağlan programından önce kontrol etmek istiyorum ama nasıl yapacağımı bilmiyorum bununla ilgili bir fikir verebilirmisiniz şimdiden teşekkürler.
public void baglan()
{
toolStripStatusLabel1.Text = "Bağlanmaya Çalışıyor.";
try // ip adresine 102. portan bağlantı kurulablir ise
{
if (textBox2.Text!="" && textBox3.Text!="")//textbox larda değer var ise
{
ipadres = textBox2.Text;
portno =int.Parse(textBox3.Text);
fds.rfd = libnodave.openSocket(portno, ipadres);
}
else
{
MessageBox.Show("yanlış ip adresi girdiniz!");
baglanti=false;
}
}
catch
{
toolStripStatusLabel1.Text = ipadres + " 'e ulaşılamadı";
baglanti = false;
}
fds.wfd = fds.rfd;
di = new libnodave.daveInterface(fds, "FD1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
di.setTimeout(1000); //10 saniye
dc = new libnodave.daveConnection(di, 0, rack, slot);
try
{
if (fds.rfd > 0) //Eğer Bağlantı Başarılı ise ////burası çok önemli sorduğun sorunun cevabı //serkan 08
{
if (0 == dc.connectPLC())
{
toolStripStatusLabel1.Text = ipadres + " Ye Bağlı Durumdasınız";
//timer1.Enabled = true;
baglanti = true;
}
else
{
toolStripStatusLabel1.Text = "Bağlantı Başarısız";
baglanti = false;
}
}
else
{
toolStripStatusLabel1.Text = "Bağlantı Başarısız";
baglanti = false;
}
}
catch { toolStripStatusLabel1.Text = "Bir Hata Oluştu"; baglanti = false; }
}
macix üstad bende merak ettim bunlar nedir? kısaca açıklayabilir misin ne işimize yarar?Multi thread ve cros thread konularını bir araştır.
CPU ile haberleşmek kolayKısaca dilim döndüğünce şöyle anlatayım. Örnek olarak plc'mizi bir sorgu ancak haerhangi bir nedenden dolayı plc'mize sorgu ulaşmadı ve işlem beklediğimizden uzun sürdü ki, bizim kodlarımız satır satır olduğundan dolayı programımız bir alt satıra geçemedi çünki hala plc'den cevap almayı bekliyor. Peki bu esnada neler oluyor, program aynı noktada kalıyor form tarafında dahi hiç mir nesneye dokunamayıyoruz butonlar formlar dahi donmuş durumda, ki programı kapatmak istediğimizde dahi klasik ms windows hata mesajıyla karşılaşırız "Program cevap vermiyor yinede kapatmak istiyormusunuz !". Bu sorunların önüne geçmek için thread kullanılır, thread içerisinde çalışan prosedürler programımızdan tamamen bağımsız yürütüldüğünde, o prosedör içerisinde çalışan kısımların işlemlerinin uzun sürmesi, programın geri kalanını ilgilendirmez yani program içerisinde thread sayesinde aynı anda bir fazla kod çalışabilir.
Seagate Kardeş,CPU ile haberleşmek kolay, PN-IRT olayına geçtikleri an "zamanında biri söylemişti" diyeceklerinden emin olabilirsiniz.
Edit: Gönderme ve alma ayrı süreç olmak zorunda çünkü ileride aynı anda farklı paketler göndermeniz gerekir. Ayrıca örneklerdeki gibi bir haberleşme yapmak biraz angaryadır. Mesele sadece IO kontrol etmek değildir. Alarmlar, değişen donanımlar, değişen ağlar, daha bir çok sebepten dolayı ethernet kartınızı donanım seviyesinde kullanmanız gerekecek(RAW olarak).
Aşağıdaki belge Rs 232 ile çalışan ve LibNoDave tarafından örnek olarak verilen örnektir. Bilgisayarınız comport ve haberleştiğiniz plc nin haberleşme bilgileri ile birlikte okumak ve yazmak istediğiniz birkaç data registeri yazarsanız sanırım size yardımcı olabilirim.
Kod:Using System; class test { static libnodave.daveOSserialType fds; static libnodave.daveInterface di; static libnodave.daveConnection dc; static int localMPI=0; static int plcMPI=2; public static int Main (string[] args) { int i,a=0,j,res,b=0,c=0; float d=0; fds.rfd=libnodave.setPort(args[0],"38400",'O'); fds.wfd=fds.rfd; if (fds.rfd>0) { di =new libnodave.daveInterface(fds, "IF1", localMPI, libnodave.daveProtoMPI, libnodave.daveSpeed187k); di.setTimeout(1000000); res=di.initAdapter(); if(res==0) { dc = new libnodave.daveConnection(di,plcMPI, 0, 0); if (0==dc.connectPLC()) { res=dc.readBytes(libnodave.daveFlags, 0, 0, 16, null); if (res==0) { a=dc.getS32(); b=dc.getS32(); c=dc.getS32(); d=dc.getFloat(); Console.WriteLine("FD0: " + a); Console.WriteLine("FD4: " + b); Console.WriteLine("FD8: " + c); Console.WriteLine("FD12: " + d); } else Console.WriteLine("error "+res+" "+libnodave.daveStrerror(res)); } dc.disconnectPLC(); } di.disconnectAdapter(); libnodave.closePort(fds.rfd); } else { Console.WriteLine("Couldn't open serial port "+args[0]); return -1; } return 0; } }
merhaba. sizin demo ile ppi kablo ile okumaya çalıştığımda bağlanıyor ve hemen kesiyor. veri okunamadı diyor. burada datablock ayarları ve diğer ayarlar nasıl olması gerekiyor ?Ekli dosyayı görüntüle 10410
ayarları resimdeki gibi yaptıysanız ve plc ip adresini (cp x43-1) adresini dogru girdiyseniz baglanabilmeniz lazım.
ayrıca ilgili ayarlarda gözüken datablok yada sizin yuklediğiniz herhangi bir datablock plc ye yuklenmiş olmalıdır.
yoksa olmayan bir datayı okuyamazsınız.
bir de 102 nolu portun kullanılmıyor olması lazım.
siemens iepg adlı(ismi bunun gibi birşey) bir servis var onu gecici olarak (eger çalışıyorsa) durdurmalısınız.
iyi çalışmalar.
C# ile yaptığım bir örnek Scada uygulaması geliştirme aşamasnda ==
https://www.kontrolkalemi.com/forum/konu/siemens-basit-scada-c.100222/
son güncelleme == https://www.kontrolkalemi.com/forum/posts/623211/
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 USBtoPLC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
connetti();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private bool initSuccess = false;
static libnodave.daveOSserialType fds;
static libnodave.daveInterface di;
static libnodave.daveConnection dc;
static int localMPI = 0;
static int plcMPI = 2;
static string s7online = "S7ONLINE";
private int connetti()
{
int i, a = 0, j, res, b = 0, c = 0;
float d = 0;
byte[] buf1 = new byte[libnodave.davePartnerListSize];
fds.rfd = libnodave.openS7online(s7online);
fds.wfd = fds.rfd;
if (fds.rfd >= 0)
{
di = new libnodave.daveInterface(fds, "IF1", localMPI, libnodave.daveProtoS7online, libnodave.daveSpeed187k);
di.setTimeout(1000000);
for (i = 0; i < 3; i++)
{
if (0 == di.initAdapter())
{
initSuccess = true;
a = di.listReachablePartners(buf1);
MessageBox.Show("daveListReachablePartners List length: " + a);
if (a > 0)
{
for (j = 0; j < a; j++)
{
if (buf1[j] == libnodave.daveMPIReachable)
MessageBox.Show("Device at address: " + j);
}
}
label1.Text = "Bağlantı Açık";
break;
}
else di.disconnectAdapter();
}
if (!initSuccess)
{
MessageBox.Show("Couldn't connect to Adapter!.\n Please try again. You may also try the option -2 for some adapters.");
return -3;
}
dc = new libnodave.daveConnection(di, plcMPI, 0, 0);
return dc.connectPLC();
}
else
{
MessageBox.Show("Couldn't open s7 online ");
return -1;
}
}
private void button1_Click(object sender, EventArgs e)
{
byte[] array1 = new byte[1];
array1[0] = 1;
// dc.writeBits(libnodave.daveFlags, 0, 8, 1, array1); //q1.0 Start biti 0 ise M0 8 ise M1 16 ise M2
// dc.writeBits(libnodave.daveOutputs, 0, 0, 1, array1); // Q0.0
// dc.writeBits(libnodave.daveOutputs, 0, 8, 1, array1); // Q1.0
// dc.writeBits(libnodave.daveOutputs, 0, 10, 1, array1); // q1.1
dc.writeBits(libnodave.daveOutputs, 0, 12, 1, array1); // q1.3
}
private void button2_Click(object sender, EventArgs e)
{
byte[] bArr = new byte[0];
// dc.writeBits(libnodave.daveFlags, 0, 8, 1, bArr);
// dc.writeBits(libnodave.daveOutputs, 0, 8, 1, bArr); //m1.0
dc.writeBits(libnodave.daveOutputs, 0, 8, 1, bArr);
}
private void button3_Click(object sender, EventArgs e)
{
di.disconnectAdapter();
libnodave.closeS7online(fds.rfd);
GC.Collect();
GC.WaitForPendingFinalizers();
label1.Text = "Bağlantı Kapalı";
}
private void button4_Click(object sender, EventArgs e)
{
connetti();
}
}
}
//------------------------------------------------
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?