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

Ergebnis 1 bis 8 von 8

Thema: Probleme mit daveGetxx() beim 2ten Abruf (VB6)

  1. #1
    Registriert seit
    20.12.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    bei mir liegt folgende Situation vor:
    Ich lese mit der Funktion daveReadBytes(...) eine bestimmten Bereich der SPS in den internen Buffer. Dann hole ich mir mit unterschiedlichen daveGetxxAt(..) Funktionen verschieden Informationen raus und speicher diese in Variabelen. Dann mach ich mit daveGetU8AT(...) über eine Schleife den gesamten Bereich noch in eine Variable. Diese speicher ich dann in eine Datenbank.
    Nun habe ich Folgendes Problem:
    Die erste abhandlung von daveGetU8At(...) liefert mir die richtigen Werte.
    Wenn ich dann die gesamten Informationen (Rawdata) über die Schleife auslese und in deine Variable speichere, kommt es ab und an vor dass am Anfang unsinn ausgelesen wird?
    Weiss einer warum das so ist und wie ich das abstellen kann?

    Für schnelle Hilfe od. Lösungen wäre ich dankbar.
    grüße
    Salva

    EDIT:
    @ Zottel:
    Zusatzfrage:
    Hab ich bei 2 Verbindungen zu einer SPS auch 2 verschiedene Intere Buffer?
    Zusatzfrage die 2.:
    Vorgabe :
    eine Verbindung
    Funktion1 : daveReadBytes(..... Buffer1)
    Funktion2 : daveReadBytes(..... Buffer2)
    überschreibt die Funktion 2 den Buffer trotzdem? Ich glaube genau dieses Problem habe ich.
    Geändert von Salva (21.01.2011 um 11:40 Uhr)
    Zitieren Zitieren Probleme mit daveGetxx() beim 2ten Abruf (VB6)  

  2. #2
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo Salva,

    für das Lesen bei Position habe ich mal für VB.Net folgendes Beispiel erstellt und getestet. Es müsste auch bei VB6.0 funktionieren.

    Code:
    Dim buf(11) As Byte
    ' 12 Bytes lesen!
    res = daveReadBytes(dc, daveFlags, 0, 20, 12, buf(0))
    Var1 = daveGetS8At(dc, 0) 'Mit Vorzeichen: -128...0...127
    'Der Wert des MB21 wird nicht gelesen!
    Var2 = daveGetS16At(dc, 2)
    Var3 = daveGetS32At(dc, 4)
    Var4 = daveGetFloatAt(dc, 8)
    End If
    
    Vielleicht hilft Dir das.


    Gruß
    Earny

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

    Standard

    Zitat Zitat von Salva Beitrag anzeigen
    überschreibt die Funktion 2 den Buffer trotzdem? Ich glaube genau dieses Problem habe ich.
    Es gibt ja in LibNoDave auch Funktionen welche nicht den interen Buffer sondern deinen eigenen verwenden, dann nutz doch die, dann sollts auch gehen!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  4. #4
    Salva ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.12.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Jochen,

    Es gibt ja in LibNoDave auch Funktionen welche nicht den interen Buffer sondern deinen eigenen verwenden, dann nutz doch die, dann sollts auch gehen!
    Genau das habe ich auch schon probiert, aber scheinbar wird das ganze ignoriert!
    Hier mal ein Auszug aus den Quellcode:
    Funktion1 - Ruft die Daten jede 5min mal ab.
    Code:
    If rc = 0 Then
        res1 = daveReadBytes(dc, daveDB, DaBlo, DBstart, DBLen, bydRBbuf(0))
        'res1 = daveReadBytes(dc, daveDB, DaBlo, DBstart, DBLen, ldRBbuf)
        If res1 = 0 Then
          ReadDaBlo = 0
           ' SPS Daten Unbehandelt
          For iR = 0 To DBLen - 1                   ' Gesamte Länge der Ein-/Auslagerung
            z12 = daveGetU8At(dc, iR)                 ' Auslesen der Rohdaten
            'z12 = daveGetU8At(dcCopy, iR)          ' Auslesen der Rohdaten cdCopy = Kopie von dc
            'z12 = daveGetU8from(bydRBbuf(iR))     ' Auslesen der Rohdaten 
            strRawsps = strRawsps & CStr(z12)       ' schreiben der Rohdaten in strRawsps
          Next iR
          Call Logg("RohdatenSPS: " & strRawsps) Else
          ReadDaBlo = 1
          strE = daveStrError(res1)
          Call Logg("RDB Error read " & CStr(res1) & " " & strE)
          Call Logg("RDB    DC=" & CStr(dc) & " DB=" & CStr(DaBlo) & " Start=" & CStr(DBstart) & "Len=" & CStr(DBLen))
          ' Verbindung beenden. Wird dann bei der nächsten Abfrage neu aufgebaut
          Call cleanUp(ph, di, dc)
          ph = 0
          di = 0
          dc = 0
        End If
      End If
    Funktion2 - Lifebit toggled jede sec.
    Code:
    If rc = 0 Then
        res = daveReadBytes(dc, daveDB, DaBlo, DBstart, DBLen, bylifedRBbuf(0))
        'Call Logg("result=" & CStr(res))
        If res = 0 Then
          lifebitPC = 0
          llbpc = daveGetU8At(dc, 0)       ' Auslesen des PC-Lebensbits
          If (llbpc And 1) Then
            'Call Logg(CStr(llbpc))
            'Call Logg("Toggel 0 auf 1 ")
            llbpc = daveWriteBits(dc, daveDB, DaBlo, 0, 1, 0) ' Lebensbit vom PC toggle
          Else
            'Call Logg(CStr(llbpc))
            'Call Logg("Toggel 1 auf 0")
            llbpc = daveWriteBits(dc, daveDB, DaBlo, 0, 1, 1) ' Lebensbit vom PC toggle
          End If
        Else
          lifebitPC = 1
          strE = daveStrError(res)
          Call Logg("RDB Error read " & CStr(res) & " " & strE)
          Call Logg("RDB    DC=" & CStr(dc) & " DB=" & CStr(DaBlo) & " Start=" & CStr(DBstart) & "Len=" & CStr(DBLen))
          Call cleanUp(ph, di, dc)
          ph = 0
          di = 0
          dc = 0
        End If
      End If

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

    Standard

    Zitat Zitat von Salva Beitrag anzeigen
    Hallo Jochen,

    Genau das habe ich auch schon probiert, aber scheinbar wird das ganze ignoriert!
    Hier mal ein Auszug aus den Quellcode:
    Funktion1 - Ruft die Daten jede 5min mal ab.
    Code:
    If rc = 0 Then
        res1 = daveReadBytes(dc, daveDB, DaBlo, DBstart, DBLen, bydRBbuf(0))
        'res1 = daveReadBytes(dc, daveDB, DaBlo, DBstart, DBLen, ldRBbuf)
        If res1 = 0 Then
          ReadDaBlo = 0
           ' SPS Daten Unbehandelt
          For iR = 0 To DBLen - 1                   ' Gesamte Länge der Ein-/Auslagerung
            z12 = daveGetU8At(dc, iR)                 ' Auslesen der Rohdaten
            'z12 = daveGetU8At(dcCopy, iR)          ' Auslesen der Rohdaten cdCopy = Kopie von dc
            'z12 = daveGetU8from(bydRBbuf(iR))     ' Auslesen der Rohdaten 
            strRawsps = strRawsps & CStr(z12)       ' schreiben der Rohdaten in strRawsps
          Next iR
          Call Logg("RohdatenSPS: " & strRawsps) Else
          ReadDaBlo = 1
          strE = daveStrError(res1)
          Call Logg("RDB Error read " & CStr(res1) & " " & strE)
          Call Logg("RDB    DC=" & CStr(dc) & " DB=" & CStr(DaBlo) & " Start=" & CStr(DBstart) & "Len=" & CStr(DBLen))
          ' Verbindung beenden. Wird dann bei der nächsten Abfrage neu aufgebaut
          Call cleanUp(ph, di, dc)
          ph = 0
          di = 0
          dc = 0
        End If
      End If
    Funktion2 - Lifebit toggled jede sec.
    Code:
    If rc = 0 Then
        res = daveReadBytes(dc, daveDB, DaBlo, DBstart, DBLen, bylifedRBbuf(0))
        'Call Logg("result=" & CStr(res))
        If res = 0 Then
          lifebitPC = 0
          llbpc = daveGetU8At(dc, 0)       ' Auslesen des PC-Lebensbits
          If (llbpc And 1) Then
            'Call Logg(CStr(llbpc))
            'Call Logg("Toggel 0 auf 1 ")
            llbpc = daveWriteBits(dc, daveDB, DaBlo, 0, 1, 0) ' Lebensbit vom PC toggle
          Else
            'Call Logg(CStr(llbpc))
            'Call Logg("Toggel 1 auf 0")
            llbpc = daveWriteBits(dc, daveDB, DaBlo, 0, 1, 1) ' Lebensbit vom PC toggle
          End If
        Else
          lifebitPC = 1
          strE = daveStrError(res)
          Call Logg("RDB Error read " & CStr(res) & " " & strE)
          Call Logg("RDB    DC=" & CStr(dc) & " DB=" & CStr(DaBlo) & " Start=" & CStr(DBstart) & "Len=" & CStr(DBLen))
          Call cleanUp(ph, di, dc)
          ph = 0
          di = 0
          dc = 0
        End If
      End If

    Also das kann ja jetzt nicht stimmen:

    Du nutzt die Read Funktion für den eigen Puffer

    Code:
    res1 = daveReadBytes(dc, daveDB, DaBlo, DBstart, DBLen, bydRBbuf(0))
    aber zum lesen willst du den libnodave internen verwenden:

    Code:
    z12 = daveGetU8At(dc, iR)
    Du musst da LibNoDaveGetU8From nehmen!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #6
    Salva ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.12.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Jochen, da hast du natürlich recht und das hab ich auch schon alles probiert, wollte nur mit den Quellcode verdeutlichen worum es geht! Wenn ich den eigenen Buffer auslese, sind da nur "00000000...." drin!
    wenn ich den Internen Buffer nehm sind irgendwann die ersten 10 Daten vom Rawdata_Buffer mit den Lifebit_Buffer beschrieben und somit falsch!

    EDIT:
    @ Jochen
    Irgendwie nützt er bei mir den selber definierten Speicher nicht. Ich habe keine Ahnung wieso, vielleicht weisst du da etwas! Ich programmiere das ganze in VB6. Bin für jeden Vorschlag offen.
    Wie realisiert ihr ein "Lifebit" PC => SPS ? Auch so wie ich?
    Bei meinen weiteren Überlegenung hab ich mir dann gedacht eine 2te Verbindung für das Lifebit aufzubauen, aber diese hab ich wieder verworfen, da es ja sein kann dass die "Datenverbindung" abreisst und die "Lifebitverbindung" noch aktiv ist, das würde mir dann acuh nix bringen!
    Geändert von Salva (27.01.2011 um 09:08 Uhr)

  7. #7
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    @Jochen:
    Einfach nur die Zeilen zitieren, die auch für die Antwort relevant sind und nicht den ganzen Beitrag. Bleibt dann wesentlich übersichlicher.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  8. Folgender Benutzer sagt Danke zu Rainer Hönle für den nützlichen Beitrag:

    Jochen Kühner (24.01.2011)

  9. #8
    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 Salva Beitrag anzeigen
    Hallo zusammen,
    EDIT:
    @ Zottel:
    Zusatzfrage:
    Hab ich bei 2 Verbindungen zu einer SPS auch 2 verschiedene Intere Buffer?
    Jede daveConnection hat einen Puffer.
    Zitat Zitat von Salva Beitrag anzeigen
    Zusatzfrage die 2.:
    Vorgabe :
    eine Verbindung
    Funktion1 : daveReadBytes(..... Buffer1)
    Funktion2 : daveReadBytes(..... Buffer2)
    überschreibt die Funktion 2 den Buffer trotzdem?
    daveReadBytes(..... Buffer1)
    liest zunächst immer Daten in den internen Puffer.
    Wenn du einen Puffer angibst, kopiert es anschließend den internen in deinen Puffer.
    Wenn beide Aufrufe von daveReadBytes() mit demselben daveConnection-Parameter erfolgen, überschreibt der 2. Aufruf den internen Puffer.

  10. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    Salva (06.04.2011)

Ähnliche Themen

  1. bedeutung der 2ten barcode-nummer??
    Von neuer im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 17.09.2010, 14:06
  2. Probleme beim Umstieg aus S7 5.4 ?
    Von Outrider im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 05.06.2008, 07:05
  3. Antworten: 3
    Letzter Beitrag: 28.05.2007, 09:31
  4. Probleme beim Exportieren S5 von IBH
    Von bernd67 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.01.2007, 23:11
  5. Probleme beim speichern beim Symatic Manager
    Von Anonymous im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 10.06.2005, 06:36

Lesezeichen

Berechtigungen

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