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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: daveReadBytes schreibt nicht in den Buffer (Excel VBA)

  1. #1
    Registriert seit
    19.06.2003
    Beiträge
    197
    Danke
    10
    Erhielt 17 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    Ich mache gerade meine ersten Gehversuche mit Libnodave.

    Mein Ziel:
    Ich möchte alle Werte eines Datenbausteins aus der Steurung lesen und in ein Arrray abspeichern.

    Was funktioniert:
    Ich kann über IBH-Link und ISO_on_TCP einzelne Werte aus der Steuerung lesen.

    Was geht nicht:
    daveReadByte schreibt die gelesenen Werte nicht direkt in mein Array. (Buffer)

    Code:
    Function DB_lesen_aus_SPS() As Variant
    
    Dim Buffer(19) As Byte
    Dim ph, di, dc As Long
    Dim res As Integer
    Dim v1 As Long
    
        ' Verbindungsaufbau funktioniert
        res = SPS_Verb_aufbauen(ph, di, dc)
    
        If res = 0 Then
        
            ' Bei dieser Variante werden die Werte nicht in den Buffer geschrieben.
            res = daveReadBytes(dc, daveDB, 120, 0, 20, Buffer(0))
    
            ' Bei dieser Variante wird ein Laufzeitfehler im Excel ausgelöst
            rem res = daveReadBytes(dc, daveDB, 120, 0, 20, Buffer)
    
            ' Hier wird der Wert richtig in v1 geschrieben
            v1 = daveGetS32At(dc, 6)
        
        End If
    
        ' Verbindung wird wieder richtig abgebaut
        Call SPS_Verb_abbauen(ph, di, dc)
    
    End Function
    Wer kann mir einen Hinweis geben?

    Ist es sinnvoller, wenn ich mit "daveGetU8" Byte für Byte in einer Schleife aus dem internen Buffer lese und in mein Array kopiere?

    Besten Dank für euer Hilfe
    Gruss Martin
    Zitieren Zitieren daveReadBytes schreibt nicht in den Buffer (Excel VBA)  

  2. #2
    Registriert seit
    25.07.2005
    Ort
    Vogelsbergkreis
    Beiträge
    1.717
    Danke
    48
    Erhielt 68 Danke für 60 Beiträge

    Standard

    Code:
    res = daveReadBytes(dc, daveDB, 120, 0, 20, Buffer)
    So müsste es gehen!
    Zitieren Zitieren Re: daveReadBytes schreibt nicht in den Buffer (Excel VBA)  

  3. #3
    Martin Glarner ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Beiträge
    197
    Danke
    10
    Erhielt 17 Danke für 13 Beiträge

    Standard

    Hallo seeba

    Zitat Zitat von seeba
    Code:
    res = daveReadBytes(dc, daveDB, 120, 0, 20, Buffer)
    So müsste es gehen!
    Diese Variante habe ich schon getestet.
    Wie oben im Code beschrieben, wird ein Laufzeitfehler im Excel ausgelöst (Programm stürzt ab, kein VBA Fehler)

    Besten Dank
    Gruss Martin
    Zitieren Zitieren Re: daveReadBytes schreibt nicht in den Buffer (Excel VBA)  

  4. #4
    Registriert seit
    25.07.2005
    Ort
    Vogelsbergkreis
    Beiträge
    1.717
    Danke
    48
    Erhielt 68 Danke für 60 Beiträge

    Standard

    Zitat Zitat von Martin Glarner
    Hallo seeba

    Zitat Zitat von seeba
    Code:
    res = daveReadBytes(dc, daveDB, 120, 0, 20, Buffer)
    So müsste es gehen!
    Diese Variante habe ich schon getestet.
    Wie oben im Code beschrieben, wird ein Laufzeitfehler im Excel ausgelöst (Programm stürzt ab, kein VBA Fehler)

    Besten Dank
    Du hast es mit irgendeiner "rem" Deklaration getestet!
    Zitieren Zitieren Re: daveReadBytes schreibt nicht in den Buffer (Excel VBA)  

  5. #5
    Martin Glarner ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Beiträge
    197
    Danke
    10
    Erhielt 17 Danke für 13 Beiträge

    Standard

    Ich habe beim testen der oberen Variante, den Text "rem" entfernt und bei der unteren Variante davor geschrieben, damit jeweils nur eine dieser Zeilen ausgeführt wird.

    Müsste es mit Buffer(0) oder aber auch bei einem nächsten Aufruf mit Buffer(20) nicht auch funktionieren?
    Gruss Martin

  6. #6
    Registriert seit
    25.07.2005
    Ort
    Vogelsbergkreis
    Beiträge
    1.717
    Danke
    48
    Erhielt 68 Danke für 60 Beiträge

    Standard

    Zitat Zitat von Martin Glarner
    Ich habe beim testen der oberen Variante, den Text "rem" entfernt und bei der unteren Variante davor geschrieben, damit jeweils nur eine dieser Zeilen ausgeführt wird.

    Müsste es mit Buffer(0) oder aber auch bei einem nächsten Aufruf mit Buffer(20) nicht auch funktionieren?
    Nein so wird es nicht funktionieren! Du hast den Buffer als Byte-Array deklariert?

    Alles klar, hab's gesehen!

    Du liest da also aus DB120 ab DBB0 20 Bytes? Hmm versteh nicht, warum es nicht gehen soll! Was zeigt er denn genau an?

  7. #7
    Martin Glarner ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Beiträge
    197
    Danke
    10
    Erhielt 17 Danke für 13 Beiträge

    Standard

    Ich definiere mit "Dim Buffer(19) As Byte" ein Array mit 20 Byte (0..19).
    Ich habe es schon mit "Dim Buffer(200) As Byte" probiert. Müsste eigentlich auch geht.
    Ich habe es schon mit "Dim Buffer(19) As Variant" probiert.

    Im Buffer stehen nach der Ausführung lauter 0 drin.
    In res steht 0 drin
    In v1 steht der richtige Wert aus DB120.DBD6
    Gruss Martin

  8. #8
    Registriert seit
    25.07.2005
    Ort
    Vogelsbergkreis
    Beiträge
    1.717
    Danke
    48
    Erhielt 68 Danke für 60 Beiträge

    Standard

    Zitat Zitat von Martin Glarner
    Ich definiere mit "Dim Buffer(19) As Byte" ein Array mit 20 Byte (0..19).
    Ich habe es schon mit "Dim Buffer(200) As Byte" probiert. Müsste eigentlich auch geht.
    Ich habe es schon mit "Dim Buffer(19) As Variant" probiert.

    Im Buffer stehen nach der Ausführung lauter 0 drin.
    In res steht 0 drin
    In v1 steht der richtige Wert aus DB120.DBD6
    Wenn's über den internen Buffer geht, könntest du das einfach weglassen. Ansonsten weiß wohl nur noch Zottel Rat.

  9. #9
    Martin Glarner ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Beiträge
    197
    Danke
    10
    Erhielt 17 Danke für 13 Beiträge

    Standard

    Hallo,

    Über den internen Buffer geht es ohne Probleme. Habe gerade folgendes getestet:

    Code:
            For i = 0 To 19
                Buffer(i) = daveGetU8(dc)
            Next i
    Ich werde nun erst einmal mit dieser Variante weiter arbeiten.
    Besten Dank für deine schnelle Hilfe
    Gruss Martin

  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
    Ändere bitte in der Definition von daveReadBytes das letzte Argument in:
    ByRef buffer As Byte
    Anschließend kannst du einen Puffer, den du mit
    dim buffer(1024) As Byte ' oder wie lang du ihn brauchst
    definiert hast, als buffer(0) als letztes Argument angeben.

Ähnliche Themen

  1. Excel: Libnodave.dll wird nicht gefunden
    Von mrdoc im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 04.09.2013, 14:19
  2. Buskoppler schreibt/liest nicht von den Klemmen
    Von ssommera im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 03.02.2011, 17:45
  3. VBA: Warum wird die Excel-Datei nicht geschlossen?
    Von Jan im Forum Hochsprachen - OPC
    Antworten: 15
    Letzter Beitrag: 26.09.2010, 12:01
  4. Antworten: 1
    Letzter Beitrag: 18.11.2005, 16:36

Lesezeichen

Berechtigungen

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