Libnodave ve s7-1200 Hatası Kullanım Hatası

106tuner

Üye
Katılım
28 Ağu 2007
Mesajlar
52
Puanları
1
Yaş
39
Merhaba Arkadaslar;

Elimde iki adet PLC bulunmakta biri Siemens S7 1214C digeri ise VIPA 313SC libnodaveyi indirdim referanslara dll dosyasini ekledim. Fakat hata aliyorum yaptigim isleri adim adim yazicam sorunumu belki farkedersiniz.

libnodave3.jpg

libnodave1.jpglibnodave2.jpg

C# Kodum

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static libnodave.daveOSserialType fds;
public static libnodave.daveInterface di;
public static libnodave.daveConnection dc;
public static int rack = 0;
public static int slot = 1;
string ipadres = "192.168.0.1";

byte[] boy = new byte[256];
// int[] tag = new int[64];
double[] tag = new double[64];
int[] res = new int[16];
private void Form1_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 { label1.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())
{
label1.Text = ipadres + " Ye Bağlı Durumdasınız";
//timer1.Enabled = true;
}
else
{
label1.Text = "Bağlantı Başarısız";
}
}
else
{
label1.Text = "Bağlantı Başarısız";
}
}
catch { label1.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 { }
label1.Text = " Plc Bağlantınızı sonlandırdınız";
}
}
}
}
}

Aldigim Hata;

An unhandled exception of type 'System.DllNotFoundException' occurred in libnodave.net.dll

Additional information: Unable to load DLL 'libnodave.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Merhaba Arkadaslar sorunumu buldum 1200 ile baglanti sagladim.
Sorunum libnodave.dll dosyasini referansa ekleseniz bile dll dosyasinin projenizin klasöründe bulunmaliymis.

Kodlarimi birazdaha düzenleyip baglantiyi sagladiktan sonra input ve outputlari projemde okumayi basardim.
Fakat dbden bir türlü veri cekemedim. Libnodave ile s7 1200 destekleyip desteklemedigini sorgulamaya basladim bu konuda bilgisi olan varmi acaba?
Cevaplariniz icin simdiden tesekkürler kolay gelsin.

Tiada olusturdugum db ve dbx tanimlamam
dbhata.jpg

DB10DBX2 = Program.dc.readBits(libnodave.daveDB, 2, 2, 2, null);
label35.Text = Program.dc.getS8().ToString();

Yani ben db2nin dbx 2den baslayip dbx2de biten bool degiskenini almak istiyorum.

gelen hatada budur.

An unhandled exception of type 'System.AccessViolationException' occurred in libnodave.net.dll
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
 
Moderatör tarafında düzenlendi:
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
Merhaba
Öncelikle şunu söylemeliyim ki konu daha net anlaşılsın. Siemens S7-1200 ile birlikte sembolik adresleme metodunu kullanmaya başladı. Sembolik adreslemeyle oluşturulan Data Blockların DB10.DB2 gibi bir adresi olmuyor ve bu yüzden libnodave.dll kullanarak bu DB'lere ulaşamıyorsun.
TIA Portal V11 'de S7-300'e göre DB oluştur demiştim ve bu şekilde haberleşme kurarak DB'de ki verileri okumuştum. TIA Portal V12 ile bu özellik kaldırılmış olabilir. Yani sadece sembolik adreslemeyle yaparsa DB'leri okuyamayabilirsin.
Açıklayıcı oldu mu?
 
Yazma işlemi

Kod:
//DB533.DBx70.1 false yapma
        private void False_Click(object sender, EventArgs e)
        {
            if (fds.rfd > 0) //Eğer Bağlantı Başarılı ise
            {
                byte[] Bit = new byte[1];
                Bit[0] = 0;
                dc.writeBits(libnodave.daveDB, 533, 70 * 8 + 1, 1, Bit);
                // 70*8+1  DB533.DBX70.1 anlamı
            }
        }

        //DB533.DBx70.2 true yapma
        private void True02_Click(object sender, EventArgs e)
        {
            if (fds.rfd > 0) //Eğer Bağlantı Başarılı ise
            {
                byte[] Bit = new byte[1];
                Bit[0] = 1;
                dc.writeBits(libnodave.daveDB, 533, 70 * 8 + 2, 1, Bit);
                // 70*8+2  DB533.DBX70.2 anlamı
            }

Okuma işlemi

Kod:
        // 1 byte lık alandan 1 biti bulan function
        // Yapı GetBit( Byte Değişken , index)
        //Not İndex : 0...7 arası rakam olmalıdır..8 olamaz..
        public bool GetBit(byte byt, int index)
        {
            if (index < 0 || index > 7)
                throw new ArgumentOutOfRangeException();

            int shift = 7 - index;

            // Get a single bit in the proper position.
            byte bitMask = (byte)(1 << shift);

            // Mask out the appropriate bit.
            byte masked = (byte)(byt & bitMask);

            // If masked != 0, then the masked out bit is 1.
            // Otherwise, masked will be 0.
            return masked != 0;
        }

    //Üstteki Function yap Asağıdan oku

                    //Bit okuma tek biti oku 1. method Örnek I10.0
                    dc.readBytes(libnodave.daveInputs, 0, 10, 1, boy);
                    Value01.Text = Convert.ToString(GetBit(boy[0],0));

Kolay gelsin
 
8den küçük versekte program hata veriyor :(


// 1 byte lık alandan 1 biti bulan function
// Yapı GetBit( Byte Değişken , index)
//Not İndex : 0...7 arası rakam olmalıdır..8 olamaz..
public bool GetBit(byte byt, int index)
 
Kodu test ettim çalışıyor.. İndex -1 ve 8 aralığıda olmalı..

8den küçük versekte program hata veriyor :(


// 1 byte lık alandan 1 biti bulan function
// Yapı GetBit( Byte Değişken , index)
//Not İndex : 0...7 arası rakam olmalıdır..8 olamaz..
public bool GetBit(byte byt, int index)
 
Moderatör tarafında düzenlendi:
dogrudur test ettiginiz dosyalari burda paylasabilirmisiniz. valla bunu halledersem cok büyük bir yükten kurtaricaksiniz beni.

hasan bey dosyaları burda paylasırmısınız lütfen?

Dosya Ektedir.
 

Ekli dosyalar

  • C#_Libnadave_HasanV2.rar
    120.7 KB · Görüntüleme: 243
tesekkür ederim hasan bey hafta sonu deneyecegim.
 
Arkadaslar vb projede ornek db68.dbw8 datasini gormek icin nasil bir kodlama yazmam gerekiyor.ornek bir kod yazabilirmisiniz.
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,307
Kullanıcılar
449,849
Son üye
cagan20

Yeni konular

Geri
Üst