C# & S7300 ile C# Ethernet Haberleşmesi

106tuner

Üye
Katılım
28 Ağu 2007
Mesajlar
52
Puanları
3
Yaş
35
Cevap için teşekkür ederim üstad benim çözümüm biraz daha farklı olmuştu bir göz gezdirebilirsen sevinirim. çünkü ne kadar doğru bir çözüm emin değilim.

int deger;
string I07;
string[] I0 = new string[8];

Program.dc.readBytes(libnodave.daveInputs, 0, 0, 1, null); //I 0.0 - I0.7
deger = Program.dc.getU8();
I07 = Convert.ToString(deger, 2);//Binary Dönüşümü


for (int i = 0; i < I07.ToString().Length; i++)
{
I0 = (I07.Substring(i, 1));
}

if (I0[0] == "1")
{
panelI00.BackColor = Color.Green;
}
else
{
panelI00.BackColor = Color.Gray;
}
 

Pokajy

Üye
Katılım
13 Haz 2007
Mesajlar
119
Puanları
3
Yaş
35
denediysen çalışıyorsa sorun yok. Convert to string kısmında sorun olacağa benziyor.. deger verisi 24 gibi bir değer alabilir. mesela I0.0 dan I0.7ye kadar olan bitlerden sadece I0.3 ve I0.4 1,gerisi 0 diyelim. deger = 24 olur. (8+16= 24)

dahası kodta sadece panelI00.BackColor var. panel I01.BackColor yok.

verdiğim linkte anlatıyor ben onu kullanarak yapmıştım.proje yanımda yok ama o kodu kullanarak yaptığıma eminim.
 

106tuner

Üye
Katılım
28 Ağu 2007
Mesajlar
52
Puanları
3
Yaş
35
Üstad denedim problem çıktı tam anlamıyla çalıştığı söylenemez fakat bu iş için başka arkadaşların önerileri oldu bu öneriler gerçekten süper sizinle paylaşmak istiyorum çünkü bu dertden muzdarip bir çok arkadaş vardır umarım faydalı olur.

Altta ki çözüm eğer aynı metot altında çözüm istiyorsak bunu kullanabiliriz.

//1Byte'ı 8Bitlik degere dönüştürme
var I0 = Enumerable.Range(0, 8)
.Select(e => (I07 & (1 << e)) != 0)
.ToArray();

Kontrolüde şu şekilde yapabiliriz.

if (I0[0] == true)
{
panelI00.BackColor = Color.Green;
}
else
{
panelI00.BackColor = Color.Gray;
}


Diğer bir çözümümüzde extension method ekleyerek yapılıyor yeni bir class oluşturuyoruz.

public static class MyExtensions
{
public static bool BitKontrol(this int Değer, int BitNo)
{
return (Değer & (1 << BitNo)) == (1 << BitNo);
}
}


Bu classı istediğimiz yerde kullanabiliriz mesela benim ana programımda şu şekilde kullandım.

if ( I07.BitKontrol(2)== true)
{
panelI02.BackColor = Color.Green;
}
else
{
panelI02.BackColor = Color.Gray;
}


Hangi yöntem işinizi görürse onu kullanabilirsiniz.

Pokajy üstad şimdi sen tek seferde 200küsür byte okuyabiliyorum demiştin. Artık o adıma geçmem gerekiyor bunu tek seferde nasıl yaptığını biraz anladım sanırım. sen verileri dbye move (aktarıp) ordan çekiyorsun peki libnodave'de hangi komutla çekiyorsun bunuda paylaşırsan sevinirim.
 

wizz007

Üye
Katılım
28 Eki 2013
Mesajlar
21
Puanları
1
real time veri okumalarda sıkıntılı olacağını düşünüyorum. sadece libnodave ktüphanesi ile çözüm olmaz. İstenilen değeri okursun ama real time değer okumalarda problem olacaktır. c# bilmeden hazır okuma sistemini alsan bile istediğin verimlilikte çalışmayacaktır. Günümüzde artık winForm uygulamaları kullanılmamaya başladı. Tavsiye olarak WebServer ile scada sistemi yapmak daha mantıklı. Tabi bunun içinde web bilgisi gerektiriyor. Verileri kayıt altına alacaksanız. ASP.NET veya PHP gibi diller kullanarak verileri veri tabanına kayıt edebilirsiniz.

S7 Web Server HTML5 Tutorial
 
Son düzenleme:
Katılım
1 Kas 2011
Mesajlar
32
Puanları
1
Selam,

Libnodave bende kullanıyorum. Oldukça güzel oluyor. Kendi scada nı kendin yap mantığı.

Senkronizasyon için;
Döngünüyü timer tick e koyup başına timer1.stop() sonunada timer1.start() eklenirse kararlı bir çalışma sağlıyor. 20 komutla falan denedim. Bi sıkıntı yaratmadı.
 

emre4945

Üye
Katılım
12 Mar 2008
Mesajlar
42
Puanları
1
Yaş
35
Arkadaslar vb projede ornek db68.dbw8 datasini gormek icin nasil bir kodlama yazmam gerekiyor.
 

yavuzata

Üye
Katılım
14 May 2012
Mesajlar
6
Puanları
1
Yaş
29
Bu konuyu gördüğüm çok iyi oldu ya arkadşalar bende PLC ile çalışmak istyiyorum acaba bilgisayarda similatör olarak kurup c# ile gerçekmiş gibi bağlanıp çalışabileceğim daha doğrusu test ortamı oluşturabilieceğim bir program varmıdır?
 

serkan08

Üye
Katılım
16 Ocak 2015
Mesajlar
1
Puanları
1
Yaş
30
Kod:
public static libnodave.daveOSserialType fds;
        public static libnodave.daveInterface di;
        public static libnodave.daveConnection dc;
        public static int rack = 0;
        public static int slot = 2;
        string ipadres = "192.168.16.155";

        byte[] boy = new byte[256];
       // int[] tag = new int[64];
        double[] tag = new double[64];
        int[] res = new int[16];

        private void MainForm_Load(object sender, EventArgs e)
        {
            baglan();
        }
        private void baglan()
        {


            try // ip adresine 102. portan bağlantı kurulablir ise
            {
                fds.rfd = libnodave.openSocket(102, ipadres);
            }
            catch { Slbl1.Text = ipadres + " 'e ulaşılamadı"; }
            fds.wfd = fds.rfd;
            di = new libnodave.daveInterface(fds, "FD1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
            di.setTimeout(5000); //50 saniye
            dc = new libnodave.daveConnection(di, 0, rack, slot);
            try
            {
                if (fds.rfd > 0) //Eğer Bağlantı Başarılı ise
                {
                    if (0 == dc.connectPLC())
                    {
                        Slbl1.Text = ipadres + " Ye Bağlı Durumdasınız";
                        //timer1.Enabled = true;
                    }
                    else
                    {
                        Slbl1.Text = "Bağlantı Başarısız";
                    }
                }
                else
                {
                    Slbl1.Text = "Bağlantı Başarısız";
                }
            }
            catch { Slbl1.Text = "Çok Acayip bir Hata Oluştu"; }
        }
        private void kopar()
        {
            if (fds.rfd > 0) //Eğer Bağlantı Başarılı ise
            {
                if (0 == dc.connectPLC())
                {
                    try
                    {
                        libnodave.closePort(fds.wfd);
                        di.disconnectAdapter();
                        dc.disconnectPLC();
                    }
                    catch { }
                    Slbl1.Text = " Plc Bağlantınızı sonlandırdınız";
                }
            }
        }
Kodları inceleyin Takıldığınız yerde elimden geldiğince yardımcı olmaya çalışıcam.
Libnodave Docs klasöründeki bilgileri gözden geçirmenizi öneririm.

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.
 

Sponsor Bağlantı

Forum istatistikleri

Konular
106,052
Mesajlar
747,149
Kullanıcılar
394,138
Son üye
aabbccddeeffgg

Yeni konular

Üst