Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Libnodave & ReadManyBytes...

  1. #1
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wollte in meinem nodaveprotokoller read bytes durch read many bytes ersetzen, doch das funzt irgendwie so nicht!

    readbytes liefert mit meinen parametern 0 zurück und die werte werden gelesen, wenn ich dann readmaybytes nehme bekomme ich einen werd != 0 zurück, obwohl ich die geleichen parameter benutze!

    Habe irgendwo hier auch gelsen das ich dann die funktionen getU8from (also die mit from) benutzen muss, ist das auch so bei .net?

    Muss ich mir die .net lib dann mit diesen funktion selbst übersetzen, weil in der standart sind diese ja nicht drin (soweit ich gesehen habe)

    jemand ein paar tips für mich???
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Libnodave & ReadManyBytes...  

  2. #2
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Wollte in meinem nodaveprotokoller read bytes durch read many bytes ersetzen, doch das funzt irgendwie so nicht!
    Das würde ich in einer .NET-Anwendung nicht tun. Warum programmierst du dir das Lesen aufeinanderfolgender Blöcke nicht eben selbst? Du kannst den C-Code von daveReadManyBytes zum Vorbild nehmen.
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Habe irgendwo hier auch gelsen das ich dann die funktionen getU8from
    (also die mit from)
    Die mit from lesen von einem eigenen Puffer (also aus dem Speicher der Anwendung).
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Muss ich mir die .net lib dann mit diesen funktion selbst übersetzen, weil in der standart sind diese ja nicht drin (soweit ich gesehen habe)
    Das kannst du gerne versuchen, aber die Funktionen sind genau deshalb nicht in der .net.dll, weil der Austausch von Zeigern zwischen C und .NET problematisch sein kann/könnte.
    Das ist genau der Grund, weshalb ich dir rate, das Lesen aufeinanderfolgender Blöcke selbst zu programmieren.

  3. #3
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    ok... dann werd ichs so machen... für was ist dann read many bytes in der .net dll? werd mal sehen wie ich das dann mache... aber dann muss ich ja erst ein teil einlesen dann die funktionen getu8 usw verwenden und dann den nächsten teil einlesen, odr???
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren so...  

  4. #4
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Kann es sein das die Funktionen mit From nicht in der .net dll sind?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Mit from...  

  5. #5
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    So...

    Hab die funktionen nun mal so deklariert:

    Code:
    [DllImport("libnodave.dll"/*, PreserveSig=false */ )]
        protected static extern int daveGetS32from(Byte[] Buffer);//[MarshalAs(UnmanagedType.LPStr)]
        public int getS32from(Byte[] Buffer)
        {
            return daveGetS32from(Buffer);
        }
    und read many bytes so programmiert:

    Code:
    public byte[] readManyBytes(int area, int DBnumber, int start, int len, byte[] buffer)
        {
            int res, readLen;
            byte[] myBuffer;
            byte[] tmp;
            //uc * pbuf;
            //pos=0;
            //if (buffer==NULL) return daveResNoBuffer;
            //pbuf=(uc*) buffer; 
            //res = daveResInvalidLength; //the only chance to return this is when len<=0
            while (len > 0)
            {
                if (len > getAnswLen() - 18) readLen = getAnswLen() - 18; else readLen = len;
                res = daveReadBytes(pointer, area, DBnumber, start, readLen, tmp);
                if (res != 0) return null;
    
                len -= readLen;
                start += readLen;
                //pbuf += readLen;
    
                myBuffer += tmp;
            }
            return myBuffer;
        }
    soo, nun werd ich mal testen... wenn jemand noch tips hat, bitte ne kommentar..
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #6
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Read Many Bytes hab ich jetzt so realisiert:
    Code:
    public int readManyBytes(int area, int DBnumber, int start, int len, ref byte[] buffer)
        {
            int res, readLen;
            int pos=0;
    
            myBufferPos = 0;
            
            while (len > 0)
            {
                if (len > getMaxPDULen() - 18) readLen = getMaxPDULen() - 18; else readLen = len;
    
                byte[] tmp = new byte[readLen];
    
                res = daveReadBytes(pointer, area, DBnumber, start+pos, readLen, tmp);
                if (res != 0) return res;
    
                tmp.CopyTo(buffer, pos);
                
                len -= readLen;
                pos += readLen;
            }
            return 0;
        }

    Das geht auch. Habe nur mit den from Methoden noch probleme, weis nicht wie Ich die deklariere, aber die mache ich jetzt gerade selber direkt in csharp, so das ich keine c methoden brauche.

    Blos ohne unions ist das alles ein bisschen kompliziert...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Soooo...  

  7. #7
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    So hab mal meine geänderte .net dll vieleicht kann diese ja direkt integriert werden in libnodave...

    mfg
    Angehängte Dateien Angehängte Dateien
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren So nun gehts...  

  8. #8
    Registriert seit
    03.09.2008
    Beiträge
    48
    Danke
    7
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ich verstehe nicht ganz warum du dir ReadManyBytes selbst programmierst. In der .NET ist die doch drin und bei mir funktioniert die prima.

    Gruß Key

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Habe nur mit den from Methoden noch probleme, weis nicht wie Ich die deklariere, aber die mache ich jetzt gerade selber direkt in csharp, so das ich keine c methoden brauche.

    Blos ohne unions ist das alles ein bisschen kompliziert...
    Ich brauche das demnächst wohl auch für C#. Würde es dir was ausmachen, deine eingenen "from"-Methoden hier einzustellen, wenn du soweit bist? Wäre wirklich sehr hilfreich für mich.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. #10
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Key Beitrag anzeigen
    Ich verstehe nicht ganz warum du dir ReadManyBytes selbst programmierst. In der .NET ist die doch drin und bei mir funktioniert die prima.

    Gruß Key
    Die ist natürlich auch irgendwann erfolgreich getestet worden. Aber ich habe keine .NET-Bibel gelesen. Ich bin davon ausgegangen, daß das was funktioniert auch erlaubt ist und weiterhin funktionieren wird. Wenn dann aber Leute andere Ergebnisse erzielen, kann ich nicht alle Versionen von .NET ausprobieren. Daher den Rat, sich so etwas wie daveReadManyBytes selbst zu programieren. Sind ja nur 5-6 Zeilen.

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  2. ÄÖnderungen am libnodave.net.cs File von libnodave
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.05.2010, 16:56
  3. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  4. libnodave: Woher kommt die "libnodave.net.dll"?
    Von Thomas_v2.1 im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 10.11.2008, 12:07
  5. libnodave-0.8.1
    Von Zottel im Forum Werbung und Produktneuheiten
    Antworten: 6
    Letzter Beitrag: 17.11.2005, 22:21

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •