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

Ergebnis 1 bis 10 von 10

Thema: ProDave mit VB

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum !

    Ich verwende Prodave 6.0 mit VisualBasic 6.0 und habe ein Problem mit der Prodave-funktion "gp_2_float_ex6".
    So habe ich die Funktion deklariert:
    Code:
    Declare Function gp_2_float_ex6 Lib "Prodave6.dll" (ByVal gp As Long, pieee As Single) As Long
    Lesen von 4 Bytes mit der Funktion "field_read_ex6". pReadBuffer ist Bytearray.
    Code:
        
    erg = field_read_ex6(Asc("d"), vDBnr, vByte, Amount, BufLen, pReadBuffer(0), pDatLen)
    Das Ergebnis gebe ich direkt an "gp_2_float_ex6" weiter.
    Code:
                
    Dim sng As Single
    erg = gp_2_float_ex6(pReadBuffer(0), sng)
    Das Ergebnis stimmt aber überhaupt nicht. Als Rückgabewert erhalte ich zwar eine Gleitkommazahl, die hat aber den falschen Wert.

    Vielleicht hat das schon mal jemand gemacht. Ich wäre für jede Hilfe dankbar.

    lg Andrej
    Zitieren Zitieren ProDave mit VB  

  2. #2
    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

    Durch die ByVal-Übergabe wird das erste Byte in eine Long gewandelt und dieses übergeben. Das kann so nicht funktionieren.
    Ich würde diese Funktion empfehlen:
    Code:
    Public Declare Sub MemMove Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbMove As Long)
    Aufruf dann mit:
    Code:
    Dim sng As Single
    MemMove sng, pReadBuffer(0), 4
    Rainer Hönle
    DELTA LOGIC GmbH

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

  3. #3
    Registriert seit
    14.03.2006
    Ort
    Berlin
    Beiträge
    42
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also ich arbeite jetzt seid 2 Jahren mit Prodave 5.5 und VB.


    Code:
     
      Dim Temp_druck as Single
      StartDW = 141
      MyError = db_read(ProzessDB, StartDW, AnzahlDW_Druck, S7_RETVAL(0))
      Call FehlerCodeWandeln(MyError)
      Call gp_to_float(S7_RETVAL(0), TEMP_Druck)
    das wäre der Aufruf für auslesen mit Wandlung dannach.

    Hier nochmal die Deklarationen. Ich weiss leider nicht wie die Datentypen deklariert werden müssen bei dem neuen Prodave. Da liegt aber auf jedenfall dein Fehler.

    Code:
    Declare Function db_read Lib "w95_s7.dll" (ByVal Db As Long, ByVal dw As Long, anz As Long, Value As Integer) As Long
    Declare Sub gp_to_float Lib "komfort.dll" (gp As Integer, S As Single)
    mfg Bossi

  4. #4
    Registriert seit
    03.10.2005
    Beiträge
    160
    Danke
    17
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo!
    Ich benutze diese Prodave-Funktionen nicht.Mir erscheint das auch etwas seltsam das man bei "gp_2_ieee_ex6" den Quellwert als long angeben muss. Hier mal ein Beispiel wie man das machen könnte:

    Public Sub byte2sng(Buffer() As Byte, Startbyte As Integer, Dest As Single)
    Dim temp(1 To 4) As Byte
    temp(1) = Buffer(Startbyte + 3)
    temp(2) = Buffer(Startbyte + 2)
    temp(3) = Buffer(Startbyte + 1)
    temp(4) = Buffer(Startbyte)
    CopyMemory Dest, temp(1), 4

    End Sub

    Aufgerufen wird das dann so:
    Call byte2sng(readbuffer,0,Ausgabe)

    readbuffer = Dein Bytearray mit den ausgelesenen Daten

    Die CopyMemory-API muss natürlich auch noch deklariert sein.

    Gruß Ronnie

  5. #5
    andrej_f ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.04.2007
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo !
    Zitat Zitat von Bossi Beitrag anzeigen
    Hier nochmal die Deklarationen. Ich weiss leider nicht wie die Datentypen deklariert werden müssen bei dem neuen Prodave. Da liegt aber auf jedenfall dein Fehler.
    Ja, der Meinung bin ich auch. Ich habe schon alle möglichen Datentyp-Kombinationen für die Deklaration durchprobiert aber leider ohne Erfolg. In der Prodave-Doku ist zu lesen, das für die Parameter Unsigned-Datentypen zu verwenden sind, vielleicht liegt hier das Problem da VB ja ansich keine Unsigned-Datentypen unterstützt.
    In der VB-Demoanwendung welche mit Prodave geliefert wird ist diese Funktion auch nicht eingebunden ...
    Trotzdem Danke für die Hilfe.

    lg Andrej

  6. #6
    andrej_f ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.04.2007
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo ronnie.b !

    Diese Funktion (gp_2_float_ex6) kopiert nicht nur einfach den Inhalt sondern führt auch Berechnungen aus. Im Buffer liegt eine Gleitkommazahl nach IEEE 754 und diese ist in eine VB-Gleitkommazahl zu wandeln.

    lg Andrej

    Zitat Zitat von ronnie.b Beitrag anzeigen
    Hallo!
    Ich benutze diese Prodave-Funktionen nicht.Mir erscheint das auch etwas seltsam das man bei "gp_2_ieee_ex6" den Quellwert als long angeben muss. Hier mal ein Beispiel wie man das machen könnte:

    Public Sub byte2sng(Buffer() As Byte, Startbyte As Integer, Dest As Single)
    Dim temp(1 To 4) As Byte
    temp(1) = Buffer(Startbyte + 3)
    temp(2) = Buffer(Startbyte + 2)
    temp(3) = Buffer(Startbyte + 1)
    temp(4) = Buffer(Startbyte)
    CopyMemory Dest, temp(1), 4

    End Sub

    Aufgerufen wird das dann so:
    Call byte2sng(readbuffer,0,Ausgabe)

    readbuffer = Dein Bytearray mit den ausgelesenen Daten

    Die CopyMemory-API muss natürlich auch noch deklariert sein.

    Gruß Ronnie

  7. #7
    Registriert seit
    03.10.2005
    Beiträge
    160
    Danke
    17
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo!
    Welche Berechnungen führt die denn aus??
    Wenn ich das richtig sehe wird doch nur ein S7-Realwert in ein VB-Singlewert gewandelt und das funktioniert wie ich schon geschrieben habe.

    Ronnie

  8. #8
    andrej_f ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.04.2007
    Beiträge
    5
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo ronnie.b !

    Da habe ich mich jetzt von der Prodave-Doku in die Irre führen lassen. Ich habe das so interpretiert, dass die Gleitkommazahlen auf der S7 ein anderes Format haben als die Gleitkommazahlen im VB. Natürlich funktioniert es nach deiner Anleitung bestens ! Vielen Dank nochmals. Das Problem ist hiermit gelöst.

    lg Andrej

    Zitat Zitat von ronnie.b Beitrag anzeigen
    Hallo!
    Welche Berechnungen führt die denn aus??
    Wenn ich das richtig sehe wird doch nur ein S7-Realwert in ein VB-Singlewert gewandelt und das funktioniert wie ich schon geschrieben habe.

    Ronnie

  9. #9
    Registriert seit
    03.10.2005
    Beiträge
    160
    Danke
    17
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo!
    Kein Problem. Ich hatte das Problem ja schließlich auch schon
    Das Format bei der S7 ist soweit anders, das die Bytes einfach nur verdreht sind. sprich von den beiden Datenwörtern des Real-wertes sind immer High und Low-Byte vertauscht. Das ist übrigens bei Integer-Werten auch so. da müssen auch die beiden Bytes im VB getauscht werden.

    Dann mal noch einen schönen Restarbeitstag
    Ronnie

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von ronnie.b Beitrag anzeigen
    Dann mal noch einen schönen Restarbeitstag
    Ronnie
    Danke ! Ebenfalls.

    Andrej

Ähnliche Themen

  1. Prodave
    Von Ralle im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 04.10.2007, 13:32
  2. PRODAVE
    Von Anonymous im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 02.04.2007, 15:10
  3. Prodave !!
    Von moojoe im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 02.04.2007, 08:29
  4. Prodave und VBA
    Von Kojote im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 18.06.2005, 00:25
  5. USB-Adapter für Prodave
    Von Kojote im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 16.06.2005, 07:39

Lesezeichen

Berechtigungen

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