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

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

Thema: daveManyReadBytes nicht gefunden in Libnodave.DLL

  1. #1
    Registriert seit
    15.07.2012
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    Ich habe Libnodave getest mit : res2 = daveReadBytes(dc, daveDB, 4, 0, 220, 0) und functioniert gut
    aber bis max 220 lange bytes.
    Ich muss 2000 data bytes holen uber die datablock DB4.
    So ich habe geandert: res2 = daveManyReadBytes(dc, daveDB, 4, 0, 2000, 0)
    Aber dann habe ich die meldung: daveManyReadBytes nicht in Libnodave.dll
    Ist diese function nicht in Libnodave.dll?
    Und kann ich die inhalt von Libnodave.dll nicht sehen?

    Grussen,

    mulderm
    Zitieren Zitieren daveManyReadBytes nicht gefunden in Libnodave.DLL  

  2. #2
    Registriert seit
    25.08.2006
    Beiträge
    247
    Danke
    36
    Erhielt 64 Danke für 58 Beiträge

    Standard

    Die Function heißt : davereadmanybytes

    Pylades

  3. #3
    mulderm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.07.2012
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    In Libnodave steht die function:
    Private Declare Function daveManyReadBytes Lib "libnodave.dll" (ByVal dc As Long, ByVal area As Long, ByVal areaNumber As Long, ByVal start As Long, ByVal numBytes As Long, ByVal buffer As Long) As Long

    Ich habe das geandert aber selbe fehler.

    mulderm
    Geändert von mulderm (28.07.2012 um 16:53 Uhr)

  4. #4
    Registriert seit
    25.08.2006
    Beiträge
    247
    Danke
    36
    Erhielt 64 Danke für 58 Beiträge

    Standard

    Ändere mal das Private zu Public.

    Code:
    Public Declare Function daveReadManyBytes Lib "libnodave.dll" (ByVal dc As Long, ByVal area As Long, ByVal areaNumber As Long, ByVal start As Long, ByVal numBytes As Long, ByVal buffer As Long) As Long
    Pylades

  5. #5
    mulderm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.07.2012
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Pylades,

    Ich habe ihre code gebraucht und ich habe kein fehler gehat.
    Aber nur ist die probleme das die data DB4 nicht in Excel eingetragen wurde.
    Die variabele : res2 gibt ein werte -130
    Was meins das?

    Die code:

    Sub readFromPLC()

    Dim ph As Long, di As Long, dc As Long
    Dim Teller As Long
    Dim v(500)

    Sheets("Tabelle1").Activate
    Cells(1, 2) = "Testing PLC read"

    res = initialize(ph, di, dc)
    If res = 0 Then

    res2 = daveReadManyBytes(dc, daveDB, 4, 0, 500, 0)


    Cells(5, 1) = "result from readBytes:"
    Cells(5, 2) = res2

    If res2 = 0 Then

    Sheets("Log").Activate
    For Teller = 1 To 500
    v(Teller) = daveGetU8(dc)
    Cells(Teller + 2, 2) = v(Teller)
    Next


    Sheets("Tabelle1").Activate

    Else
    e$ = daveStrError(res)
    Cells(9, 4) = "error:"
    Cells(9, 5) = e$
    End If
    End If
    Call cleanUp(ph, di, dc)
    End Sub


    mulderm

  6. #6
    Registriert seit
    25.08.2006
    Beiträge
    247
    Danke
    36
    Erhielt 64 Danke für 58 Beiträge

    Standard

    Wo ist der Buffer?

    Code:
    #define daveResNoBuffer -130
    res2 = daveReadManyBytes(dc, daveDB, 4, 0, 500, 0)

    Pylades
    Geändert von pylades (29.07.2012 um 17:11 Uhr)

  7. #7
    mulderm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.07.2012
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ist das nicht 0?

    Fur die andere funktione: res2 = daveReadBytes(dc, daveDB, 4, 0, 200, 0)
    funtioniert das gut.
    Was muss dann die buffer sein?
    Was ist

    #define daveResNoBuffer -130 ?

    Das ist nicht vba-code aber C/C++?

    mulderm
    Geändert von mulderm (29.07.2012 um 18:13 Uhr)

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

    Standard

    Zitat Zitat von mulderm Beitrag anzeigen
    Ist das nicht 0?
    Nein
    Fur die andere funktione: res2 = daveReadBytes(dc, daveDB, 4, 0, 200, 0)
    funtioniert das gut.
    Es ist ein interner Puffer vorhanden. Dieser hat 1024 byte, wenn ich mich recht erinnere.
    Was muss dann die buffer sein?
    Ein Zeiger auf den Anfang eines genügend großen Speicherbereichs.
    Was ist

    #define daveResNoBuffer -130 ?

    Das ist nicht vba-code aber C/C++?

    mulderm
    Ja, das ist C. Es ist C, weil Libnodave in C geschrieben ist. Du findest es in nodave.h. Dort kannst du nachschauen, was die Fehlercodes bedeuten.

    Obwohl ich Libnodave geschrieben habe, ist mir nicht mehr jedes Detail geläufig. Und die VBA und .Net-Anbindungen beruhen auf dem, was ich 200x zur Verfügung hatte.
    Einen Speicherbereich zu reservieren und dessen Adresse an Libnodave zu übergeben, widerspricht der Idee, dass VBA oder .Net den Speicher mit ihren Schutzmechanismen verwalten sollen.
    Ich weiß nicht, ob es in allen neueren Versionen von VBA oder .Net immer noch geht...
    Wenn ja, mußt du nachher noch z.B. daveGetU8From(buffer) verwenden anstatt daveGetU8(), weil daveGetU8() vom internen Puffer liest.
    Du könntest diese "Schwierigkeiten" vermeiden, indem du 5 mal daveReadBytes() ausführst.
    daveReadManyBytes tut das intern auch.

    Also:
    daveReadBytes(dc, daveDB, 4, 0, 200, 0)
    dann alle gelesenen Werte holen und anderswo speichern, z.B. in Excel-Zellen
    und dann:
    daveReadBytes(dc, daveDB, 4, 200, 200, 0)
    wieder alle gelesenen Werte holen und anderswo speichern, z.B. in Excel-Zellen
    daveReadBytes(dc, daveDB, 4, 400, 200, 0)
    und so weiter...

  9. #9
    mulderm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.07.2012
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Zottel fur die informationen.
    Ich rufe 5 mal daveReadBytes() und das funtioniert sehr gut.
    Danke!

    Grussen,

    mulderm

  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
    "5 mal" war auch nur ein Beispiel.
    Wenn du 2000 Bytes brauchst (und die maximale PDU-Länge bei deiner Verbindung 220 ist), mußt du natürlich 10 mal daveReadBytes aufrufen, entweder 9x für je 220 Bytes und noch 1 mal für 20 Bytes, oder aber 10 mal für je 200 Bytes.
    Und noch was: Wenn du Variablen liest, die mehrere Bytes umfassen (DINT, REAL, usw.), mußt du darauf achten, dass sie vollständig mit dem einen oder dem anderen Aufruf erfasst werden.

Ähnliche Themen

  1. Excel: Libnodave.dll wird nicht gefunden
    Von mrdoc im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 04.09.2013, 14:19
  2. libnodave wird nicht gefunden
    Von Proxy im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 10.09.2012, 10:35
  3. Fehlercodes von libnodave.dll
    Von SPSOnkel im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 15.06.2010, 16:33
  4. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  5. libnodave: Woher kommt die "libnodave.net.dll"?
    Von Thomas_v2.1 im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 10.11.2008, 12:07

Lesezeichen

Berechtigungen

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