step7 und excel, bzw langwidrige datenspeicherung

win98

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

ich möchte nun meine aufgezeichneten temperaturwerte speichern und auswerten lassen.

nun isses so, das ich im forum danach lösungen gesucht hab und bin teilweise auf verschiedene meinungen gestoßen. um anzufangen brauch ich erstmal einen weg und ich weiß nich welchen ich einschlagen soll.

1. mir steht ein externer rechner zur verfügung, der zB jede Woche einmal idealer weise die daten in excel einliest, bzw aktualisiert. dazu braucht man aber wie ich gelesen hab die werte im DB, wobei ich das problem habe, dass meine cpu den sfc83 und sfc84 nicht unterstützt. ist das auch mit dem scf20 möglich? den kann ich laden aber bekomm keine werte in den DB

2.ich speicher die daten irgendwie auf einen OPC server (wobei der rechner immer laufen müsste was nich so toll is). ich nutze die cpu aber über einen usb-mpi adapter und es soll nur über ethernet funktionieren hab ich gehört.

3. Ich benutze den internen Speicher der SPS (4MB) und schreib die daten händich aus der Variablentabelle raus.

die erste möglichkeit wäre mir am liebsten. da kann ich auch schön in excel graphen zeichnen.

was empfiehlt ihr mir?
 
Wenn ich dich richtig verstanden habe willst du die Daten in der SPS zwischenspeichern und dann einmal wöchentlich auslesen?
Wieviele Werte fallen da denn wöchentlich an.
Auslesen kannst du die DBs z.B. mit libnovave. Oder gucke mal bei Deltalogic die haben da auch was im Programm
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die anzahl der werte kommt auf die lösung an.

mindestens brauch ich die maxtemp pro tag, also 7 werte die woche.
bestenfalls wäre wenn ich auch noch zwischenwerte (all 2-3-4 stunden) mit speichern kann.

libnovave hab ich mir mal runtergeladen, aber das war irgendwie ein komisches format, ich hätte da eher n installer erwartet... oder hab ich das falsch bedient...
bei deltalogic hab ich auch schon das ACCON-AGLink gefunden, aber das kostet ja 500€.....

funktioniert libnovave nur wenn die werte in nem DB stehn oder wie kann ich das verstehen?

danke schonmal :)
 
also alle 2 Stunden und dann 7 Tage lang ergibt 84 Werte. Das ist immer machbar :)
Bei libnodave gibt es Testprogramme bei. Unter anderem auch für Excel.
gucke mal im Verzeichnis "Excel and VB"
Hier im Forum gibt es auch noch einige Beispiele. Du kannst da auch andere Bereiche mit auslesen als DBs. Aber wenn du Daten speicherst, solltest du das in einem DB machen
 
Für diese Aufgabenstellung eignen sich auch Tools wie der SPS-Analyser oder unser AutoSPy. Damit werden die gewünschten Daten in DBs aufgezeichnet und dann immer wieder abgeholt. Inwieweit das komplett offline geht, müsste noch geprüft werden. Auf jeden Fall werden dort auch andere Adapter und nicht nur Ethernet unterstützt.
Wenn der PC die ganze Zeit laufen kann, dann könnte ACONN-S7-EasyLog in Frage kommen. Dies liest die Daten aus und speicher diese in einer CVS-Datei. Dabei sind beliebige Triggerbedingungen (zeitlich, ereignisgesteuert,..) möglich. Auch hier kann nicht nur Ethernet verwendet werden. Die CSV-Datei kann dann direkt mit Excel eingelesen und weiterbearbeitet werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
also meine bisherige "datenspeicherung" basiert auf merkern in der variablentabelle. das problem hatte ich hier schonmal gestellt und wir sind zum ergebnis gekommen das meine cpu nicht sfc83 und sfc84 kann...

das ACONN-S7-EasyLog ist aber auch kostenpflichtig, sollte möglichst nicht sein. und das der rechner die ganze zeit mitläuft will ich eigentlich vermeiden.

hab jetzt das libnodave ins excel eingefügt. aber ich hab kein makro gefunden was mir einen DB oder VAT ausliest...

liegt das daran das mein DB noch leer ist?
 
Dies ist der Hilfetext von libnodave zu Excel
The file Modul12.bas was created and tested with MS Excel 97, a CPU 315-2DP and an MPI adapter.
I do not include the spreadsheet contents.
To work with Excel:
- Copy libnodave.dll into your work directory or your system directory.
- Open a blank sheet.
- Open the VBA editor and import Modul12.bas.
- Execute Macro initTable. This will put some values into the spreadsheet.
- Adjust these values to your needs.
- If you want to use a communication protocol other than MPI, adjust some lines in sub initialize
as explained there.
- Now use any of the other macros

The first part of Modull12.bas contains all the declarations to interface with libnodave.dll. Copy
this into your own VB(A) programs.

The first part ends here:
'*****************************************************
' End of interface declarations and helper functions.
'*****************************************************


Have fun!
Hast du das mal gemacht und was kommt als ergebnis?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja den text hab ich in der readme gefunden.

ich hab n mpi-usb adapter.

wenn ich jetzt in excel zB das Makro ReadDIagnostics ausführe bekomm ich port MPI Adress und IP Adresse usw.

aber ich hab mal alle markos einmal ausgeführt, aber ich bekomm keine werte angezeigt
 
WAAA...

iwi hab ich was kaputt gemacht.

also ich das excelmakro zum ersten mal starten wollte hat er gesagt libnodave.dll fehlt. dann hab ich die aus dem win ordner in den selben pfad wie die excel datei kopiert und dann kam die meldung nicht mehr.

jetzt kommt die meldung wieder, obwohl ich eigenlicht nix verstellt hab und die .dll immernoch im selben pfad wie die excel ist.....

wenn ich verweise einfügen will dann nimmt er die datei nicht an:(
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
also ich hab jetzt rausgefunden dasses mit der dll iwi nur klappt wenn ich n neues excel öffne und das makro immer neu einfüg.

trotzdem krieg ich keine werte aus der SPS raus.

hab zB in die A Spalte folgendes eingetragen (wie im Beispiel) "MD0(REAL):"
aber wenn ich auf readfromplc geh dann bleibt das feld in b immernoch leer
 
ok danke :)

nach einigem googeln, tüfteln und probieren bin ich zu folgenden ergebnis gekommen:

Code:
Sub readFromPLC()
Cells(1, 2) = "Testing PLC read"
Dim ph As Long, di As Long, dc As Long
res = initialize(ph, di, dc)
If res = 0 Then  'Haltepunkt gesetzt
    res2 = daveReadBytes(dc, daveFlags, 0, 0, 16, 0)
    Cells(5, 1) = "result from readBytes:"
    Cells(5, 2) = res2
    If res2 = 0 Then
        v1 = daveGetFloat(dc)  Geändert von mir
        Cells(7, 1) = "MD0(REAL):"  'Geändert von mir
        Cells(7, 2) = v1
        v2 = daveGetFloat(dc)  'Geändert von mir
        Cells(8, 1) = "MD4(REAL):"  'Geändert von mir
        Cells(8, 2) = v2
        v3 = daveGetFloat(dc)  'Geändert von mir (statt S32
        Cells(9, 1) = "MD8(REAL):"  'Geändert von mir
        Cells(9, 2) = v3
        v4 = daveGetFloat(dc)
        Cells(10, 1) = "MD12(REAL):"
        Cells(10, 2) = v4
        v5 = daveGetFloatAt(dc, 12)
    Else
        e$ = daveStrError(res)
        Cells(9, 4) = "error:"
        Cells(9, 5) = e$
    End If
End If
Call cleanUp(ph, di, dc)
End Sub

wenn ich mir jetzt haltepunkte einsetz und sehe das ich res=-1 habe, von daher geht das programm gar nicht in den code rein wo er die variablen auslesen soll. wenn ich es erzwinge indem ich vorher res=0 schreib, dann stürzt mein excel ab :(
 
Welche kommunikation wählst du denn?
Über MPI, Profibus, Profinet (Ethernet) ?
Demenstprechend mußt du dein Makro anpassen!

Gruß wolder
 
an der sps steckt er an mpi und an meinem rechner über usb und dazwischen dieser usb-mpi adapter.

wo muss ich das einstellen, bzw wie
 
Zuviel Werbung?
-> Hier kostenlos registrieren
sry für den doppelpost, aber bin grad auf folgendes gestoßen.

wenn ich inittabelle mach, bekam ich immer schön standartwerte:

Code:
Serial port:   COM1
Baudrate:   38400
Parity:   O
MPI/PPI Address:   2
IP Address:   192.168.1.1
Access point:   /S7ONLINE
aber das kann eigentlich gar nicht sein, da ich nicht über COM1 dran bin sondern MPI und auch keine IP adresse deswegen habe.

im makro sind das keine dynamischen werte sondern nur string zuweisung auf die zellen... muss ich vielleicht dort was ändern?

hab ma versucht statt com1 mpi zu schreiben, aber ohne erfolg
 
Zuletzt bearbeitet:
Prinzipiell mußt du das in der
Code:
Private Function initialize(ByRef ph As Long, ByRef di As Long, ByRef dc As Long)
einstellen.

ABER, da steht nichts von USB!

Hast du vielleicht noch einen alten Seriell auf MPI wandler?

In der Tabelle müßtest du dann wo Seriell steht, USB eintippen.
Bei MPI, deine MPI-Adresse (meistens 2)

Ich hab jetzt leider keinen USB-MPI-Wandler da, sonst könnte ich es testen.
Über Ethernet bzw. seriell funktioniert das ganz gut!

Gruß wolder
 
Zurück
Oben