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

Ergebnis 1 bis 4 von 4

Thema: Libnodave Bausteinliste auslesen nur bis 255

  1. #1
    Registriert seit
    13.10.2009
    Beiträge
    28
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    mit folgendem Code lese ich die vorhandenen Datenbausteine aus der SPS aus:

    Code:
    Private Sub ReadProgramBlocks_Click()
        
        Dim buf(1000) As Byte
        Dim res As Integer
        Dim res1 As Integer
        Dim ph As Long
        Dim di As Long
        Dim dc As Long
        Dim i As Integer
    
        res = initialize(ph, di, dc)
                   
        res1 = daveListBlocksOfType(dc, 65, buf(0))
            For i = 0 To 280 Step 4
            Range("H" & i / 4 + 6).Select
            ActiveCell.FormulaR1C1 = buf(i)
            Next i
            Range("H4").Select
            ActiveCell.FormulaR1C1 = res1
             
        Call cleanUp(ph, di, dc)
      
    End Sub
    Das funktioniert dann soweit bis DB255. Ab DB 256 fängt er aber wieder bei 0 an, also mein DB260 wird mit 4 ausgegeben. Ursache habe ich auch schon gefunden, da buf(i) als byte festgelegt wurde und byte nur bis 256 kann. Ändere ich die variable probeweise auf Integer, kann ich zwar auslesen, aber die Werte die dann rauskommen sind unsinning.
    Der Fehler liegt meiner Meinung nach in der libnodave.dll, oder? Dort müsste man doch von Byte auf Integer umstellen?

    Danke schon mal im Voraus.
    markham
    Zitieren Zitieren Libnodave Bausteinliste auslesen nur bis 255  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Ein Block-Eintrag ist so aufgebaut:
    Code:
    typedef struct {
        unsigned short number;
        uc type[2];
    } daveBlockEntry;
    D.h. du musst die Baustein-Nummer aus zwei Bytes zusammensetzen.
    Nummer = High-Byte * 256 + Low-Byte

  3. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    markham (10.11.2012)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Der Fehler liegt natürlich nicht in der libnodave.dll. Die Blocknummer kommt als Integer, ein Integer besteht aus 2 Byte, zuerst kommt das L-Byte dann das H-Byte. Du kannst den Integer einfach wieder zusammensetzen:
    Code:
        res1 = daveListBlocksOfType(dc, 65, buf(0))
            For i = 0 To 280 Step 4
            Range("H" & i / 4 + 6).Select
            ActiveCell.FormulaR1C1 = buf(i) + buf(i + 1) * 256
            Next i
    Übrigens: res1 enthält die Anzahl Einträge in der gelesenen Blockliste und kann zur Begrenzung der For-Durchläufe benutzt werden.

    Tip: Um in eine Excel-Zelle zu schreiben, muß die Zelle nicht selektiert werden. Du kannst auch direkt schreiben:
    Range("H" & i / 4 + 6) = buf(i) + buf(i + 1) * 256
    oder
    Cells(i / 4 + 6, 8) = buf(i) + buf(i + 1) * 256

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    markham (10.11.2012)

  6. #4
    markham ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.10.2009
    Beiträge
    28
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das ging aber flott.

    Vielen Dank für die Hilfe und die Tipps.

    Gruß markham

Ähnliche Themen

  1. Zähler Vergleicht nur bis 9!
    Von Krma1985 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.01.2012, 16:50
  2. FM 350-1 zählt nur bis 1...
    Von Smurf im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.07.2010, 15:32
  3. Zähler soll nur bis 11 zählen
    Von Benno1989 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 12.11.2009, 08:34
  4. Davon von 0 bis X auslesen...?
    Von MSP im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 10.08.2005, 08:07

Lesezeichen

Berechtigungen

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