C# & S7300 ile C# Ethernet Haberleşmesi

Hem okuyabiliyor hemde yazabiliyorum. libnodave | Get libnodave at SourceForge.net adresinden Libnodave dosyalarını indirin Docs dizini içerisinde Değişik haberleşme protokolleri (MPI, Ethernet, Profibus) ile nasıl bağlantı kurulacağı, nasıl bit, word, dword ve databloklak içinde olmak üzere nasıl veri okunup yazılması gerektiği hakkında gerekli bilgiler verilmiş. ben boş zamanımda CPU313C ve CP343-1 ethernet modulu ile bağlantı kurup Hemen hemen okunacak her alandaki verileri okudum ve Yazdım(Only-Read olan alanlara veri yazamayız tabiki).

Eminim kopya almadan da olayı çözerseniz kafanıza daha iyi oturur.
 
Son düzenleme:
Macix kardeş, çok basit bir örnekle c# ile yazdığın bir programdan veriyi profinet ile plc db'lerine nasıl aktardığını ve plc'den programa nasıl veri aldığını açıklayabilrmisin.

Aslında bu libnodave nasıl kuruluyor kendisinden nasıl faydalanabilyoruz onuda biraz açıklayabilirseniz çok makbule geçer
 
Moderatör tarafında düzenlendi:
Csharp bilgin ne seviyede, veya proglama dili biliyormusun ?

Macix merhaba Libnodave i Csharp kullanarak çalıştırmaya uğraşıyorum ama şu hatayla karşılaştım...
libnodave.opensocket(102, "192.168.1.242");
yapınca unable to find entry point...
diye bir hata aldım.
Ya Libnodave i tam kullanamıyorum yada PLC de ipharicinde başka ayarlar gerekiyor.
Mümkünse PLC ye sadece bağlanacak çalışan bir örnek gönderirsen geri kalan tarafı halledebilirim.
 
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.
 
Moderatör tarafında düzenlendi:
Macix merhaba zaten gönderdğn örneğe benzer bağlanmaya çalışıyordum.
hep bağlanamadı hatası alıyordum. Sonra senden gelen örneğe göre çalıştırdım yine bağlanamadım. Sonra biraz dediğin gbi denedim ve yanlış dll i referans verdğimi anladım. Şu an bağlandım. ve artık işin en önemli kısmını aştığımı düşünüyorum.
Yardımın için teşekkür ederim. Hemde çok. :D
Şimdi veri alış verişin yapablmek için çabalıyorum. Ancak hem S7-300 hemde C# programım içersinde bu veri alışverişini yapableceğim data bloklar nelerdir. Tam olarak bilemiyorum.
Senden ricam PLC içersinde hangi SFC leri veya FB leri kullanacağımı ve C# da nasıl okuyacağımı basit bir örnekle açıklayabilirmisn?
 
SFC veya FB ile işin yok direkt DB, M, T, C, I, PIW, Q, PQW alanlarını okuyabilirsin.

Aşağıdaki Örnekleri iyi incele

Data blocks daveDB DB3.DBD4 DB3.DBD4 daveReadBytes(dc,daveDB,3,4,4,NULL)
Flags/Markers daveFlags MW4 FW4 daveReadBytes(dc,daveFlags,0,4,2,NULL)
Input memory image daveInputs EB2 IB2 daveReadBytes(dc,daveInputs,0,2,1,NULL)
Output memory image daveOutputs AD8 QD8 daveReadBytes(dc,daveOutputs,0,8,4,NULL)
Timers daveTimer T2 T2 daveReadBytes(dc,daveTimer,0,2,2,NULL)
Counters daveCounter Z2 C2 daveReadBytes(dc,daveCounter,0,2,2,NULL)
Direct I/O daveP PEW4 PIW4 daveReadBytes(dc,daveP,0,4,2,NULL)

Bir zamanlar okuma ve yazma işlerinde kafayı yiyecektim şimdi çok rahat haberleşiyorum.

Başarılar.
 
Çok teşekkür ederim Magix kardeş herşeyi hallettik.Gerçekten libnodave çok güzel hazırlanmış bi ürün.
 
Evet çok sağlıklı haberleşiyor libnodave yi daha kompak bir hale getirmeyi düşünüyorum. mesela 2. bir dll yazarak aynı scada yazılımları gibi belirli sayıda taglar tanımlanacak ve bu tagları hiç kod yazılmadan okunacak.
 
Merhaba arkadaşlar,

Ben de libnodave.dll ile çalışmaya başladım. PLC ile PC arasında bağlantı kurma sorunum yok fakat PLC 'den okuma yapma konusuna geçince sıkıntı yaşamaya başladım. Bir örnek ile MD68 'i nasıl okuyacağımı ve değiştireceğimi anlatabilir misiniz lütfen.
 

Forum istatistikleri

Konular
129,867
Mesajlar
930,872
Kullanıcılar
452,732
Son üye
erencok

Yeni konular

Geri
Üst