Sonstiges Daten aus einer S7300 in Excel importireren

cwe89

Level-2
Beiträge
219
Reaktionspunkte
50
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein Problem bei dem ich eure Hilfe bedarf.

Ich möchte Messwerte die in einem DB vorliegen in Excel importieren und richtig darstellen.
Das importieren funktioniert dank libnodave.
Nur die Zahlen werden mir nicht richtig dargestellt, die Werte liegen im DB als Real zahl vor in Excel bekomme ich aber z.B für den Wert 1,11 die Zahl 1066275963.

Ich habe schon in VBA die Zahl von Singel in Double geändert aber ohne Veränderung.

Was kann man noch ändern oder einstellen das er mir die richtige Zahl anzeigt


Mein aktueller Code:
Private Sub CommandButton4_Click()

On Error GoTo Err:

Dim i As Double

If (CPU_Connected = True) Then

TextBox1.Text = Val(CPU.DD(1, 0))
TextBox2.Text = Val(CPU.DD(1, 4))
TextBox3.Text = Val(CPU.DD(1, 8 ))
TextBox4.Text = Val(CPU.DD(1, 12))


GoTo Ende
End If
Err:

Ende:

End Sub

Bitte um Hilfe

Christoph
 
Spontan: wie ist denn die Ausgabezelle formatiert?
Dann verwirrt: ich mache ja viel mit Excel und LibnoDave, doch Code der wie Deiner aussieht, habe ich da noch nie gebraucht.

Bei mir sieht das etwa so aus: REAL aus S7 in Excel-Zelle einlesen
Code:
[COLOR="#006400"]'... Verbindung aufbauen (ph, di, dc) ...[/COLOR]
If res = 0 Then [COLOR="#006400"]' Verbindung zur CPU erfolgreich aufgebaut[/COLOR]

    Do [COLOR="#006400"]'für vorzeitiges Beenden bei Fehlern[/COLOR]
        res2 = daveReadBytes(dc, daveDB, 123, 0, 30, 0)
        If res2 <> 0 Then Exit Do [COLOR="#006400"]'Fehler beim Lesen[/COLOR]
'...
        [COLOR="#0000CD"]Cells(zeile, spalte) = daveGetFloat(dc)[/COLOR]
'...
    Loop While 0 = 1 [COLOR="#006400"]' NIE wiederholen[/COLOR]
    If res2 <> 0 Then [COLOR="#006400"]'Lesefehler aufgetreten ?[/COLOR]
        resmb = MsgBox(daveStrError(res2), vbExclamation, "Fehler bei Datenlesen PLC_1:DB123...")
    End If

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Formatierung steht Momentan auf Standart es hilft aber auch nix die zu ändern hab das schon Probiert.

War ein Fehler von mir das ist gar kein Libnodave das ist etwas von IBH Softec.
 
Ich habe einen IBH link da sind Beispiele für Excel, Access und vieles mehr dabei.

Noch eine Idee zu meinem Problem?


Sent from my iPhone using Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gibt es bei IBH keine Funktion, die den 32Bit-Wert als Datentyp Single zurückgibt??
Läßt sich vielleicht bei der Deklaration der von VBA genutzten IBHNET.DLL-Funktion tricksen?

Alternativ sollte dies funktionieren:
Code:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)


Private Sub CommandButton4_Click()
Dim tempRaw32 As Long
Dim tempSingle As Single
  
On Error GoTo Err:
   
 If (CPU_Connected = True) Then
   tempRaw32 = CPU.DD(1, 0)
   CopyMemory tempSingle, tempRaw32, 4
   TextBox1.Text = tempSingle

   tempRaw32 = CPU.DD(1, 4)
   CopyMemory tempSingle, tempRaw32, 4
   TextBox2.Text = tempSingle

   tempRaw32 = CPU.DD(1, 8)
   CopyMemory tempSingle, tempRaw32, 4
   TextBox3.Text = tempSingle

   tempRaw32 = CPU.DD(1, 12)
   CopyMemory tempSingle, tempRaw32, 4
   TextBox4.Text = tempSingle

   GoTo Ende
 End If
Err:
      
Ende:

End Sub

PS: Wozu die Val-Funktion in Deinem Code nützlich sein soll, das weiß wohl anscheinend nur IBH.
Wenn Du eine REAL-Zahl mit Nachkommastellen anzeigen willst, dann ist Val() geradezu schädlich, weil es die Nachkommastellen abschneidet.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, da hab ich wohl die nicht ganz eindeutige Excel2002-Hilfe zur Val-Funktion missverstanden.
VBA 6.0 - Val-Funktion schrieb:
Die Val-Funktion liest die Zeichen einer Zeichenfolge bis zum ersten Zeichen, das nicht als Teil einer Zahl interpretiert werden kann. Symbole und Zeichen, die oft als Teil eines numerischen Wertes erkannt werden (z.B. Währungssymbole und Kommas), werden nicht erkannt.

Ein schneller praktischer Test zeigt: die Nachkommastellen werden abgeschnitten - doch genauere Analyse zeigt: da kann Val() tatsächlich nicht dafür sondern die implizite Typkonvertierung, weil die Zahl nicht als String sondern schon als Zahl vorliegt.
Code:
Dim tempSingle As Single

tempSingle = 123.456
Cells(1, 1) = tempSingle            'Anzeige: 123,456001
[COLOR="#FF0000"]Cells(2, 1) = Val(tempSingle)       'Anzeige: 123[/COLOR]

Cells(3, 1) = Val(Str(tempSingle))  'Anzeige: 123,456

Was ich aber meinte: Was macht es für einen Sinn, einen Long-Wert implizit in einen String umzuwandeln, damit er mittels Val in einen geeigneten numerischen Wert umgewandelt wird, der wiederum implizit in einen String umgewandelt wird, damit er einer Text-Eigenschaft zugewiesen werden kann ... :confused:

So wie die Val-Funktion im Beispielcode von IBH benutzt wird und vom TE übernommen wurde, würden die Nachkommastellen entfernt werden - falls die IBH-Library einen Single liefern würde. Ob die das jemals getestet haben?

Harald
 
Zurück
Oben