Programm zum Datenauslesen in Textdatei

Zuviel Werbung?
-> Hier kostenlos registrieren
Warum speichert ihr den Datensatz nicht sofort, wenn er erzeugt wird über WinCC ab? Immer anhängen an eine Textdatei. Den Datenbaustein braucht man dann eigentlich entweder gar nicht oder halt zur Sicherheit. Und es werden nur Variablen für die Übertragung eines Datensatzes benötigt.
 
Weil ich keine direkte verbindung besitze.. d.h. die Daten werden nur einmal monatlich abgeholt.. ;)

Hab gerade noch feststellen müssen es kommt damit nicht klar.. dazu muss ich die demoversion bemängeln.. eigentlich ein witz, so kann niemand testen ob es funktonieren würde oder nicht.. es werden willkürlich irgendwelche werte in die excel datei geschrieben.. ich überlege momentan wirklich 2 Rechner vor ort zu installieren um die Datensicherung sicherzustellen..

auf beiden rechnern wird dann also die Datenbank direkt laufen und somit die werte direkt an die Datenbank zu schreiben.. anderes Problem wird die datenübertragung ohne WinCC sein, also steh ich effektiv wieder exakt vor dem gleichen problem.. ausgenommen ich kann via eines OPC Servers direkt auf die sps zugreifen und daten übermitteln... aber das stell ich mir auch nicht einfach vor..

ohje hab grade noch gesehen finde keine kostenlosen OPC server also benötige ich eine kostenlose möglichkeit daten aus der sps via mpi zu realisieren.. muss aufpassen sonst sprengt es mir die kosten weg..
 
Zuletzt bearbeitet:
Weil ich keine direkte verbindung besitze.. d.h. die Daten werden nur einmal monatlich abgeholt.. ;)
Das hattest du allerdings oben weiter etwas anders dargestellt ...

.. ausgenommen ich kann via eines OPC Servers direkt auf die sps zugreifen und daten übermitteln... aber das stell ich mir auch nicht einfach vor..
Der OPC_Server müsste aber m.E. auch alle Einzel-Variablen kennen. Das brächte dich nicht weiter. Außerdem hättest du dann ggf. auch wieder das Problem mit der Daten-Konsistenz.

Ich sehe hier nur die Möglichkeiten :
- kontinuierlich einlesen (wie von Ralle genannt)
- die Array's mit der vorhandenen Visu einzeln abgreifen (wie schon von mir beschrieben)
- den ganzen Block in einem Rutsch laden (wie auch schon beschrieben).

Für einen Weg mußt du sich entscheiden (oder es ganz lassen).

Vielleicht so am Rande : es ist machbar und schaffbar - ein bißchen Energie muss man allerdings schon da reinstecken ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
richtig gemäß dem fall das ich mich dafür entscheide die 2 rechner mit in den Schrank zu stellen, werden die daten trotzdem nur 1x monatlich abgeholt ich habe nur die möglichkeit beide rechner die daten Kontinuierlich abrufen zu lassen.. und somit direkt aus der Datenbank in die Hauptdatenbank zu importieren.. Ist eine einfache Möglichkeit, anderer seits, liegen die kosten etwas außerhalb des Budgets wenn ich für beide dann nochmal eine extra WinCC lizenz benötige, dazu noch 2x Datenbanklizenz und zuletzt nochmal 2x OPC Server.. Es reicht gerade noch so für die 2 Datenbanklizenzen und die rechner.. und dann bleiben noch ca 100euro übrig..

Also irgendwo etwas finden wo kostengünstig ist aber für den einfachen sinn des auslesens der Daten online aus der sps ausreicht.. könnte auch über Windows DDE oder ODBC arbeiten, frage ist nur was ist effektiv dann so günstig das ich für 2 Lizenzen noch mit 100 euro auskomme..

und wegen dem anders Darstellen, nunja 744 Datensätze sind einfach gerechnet 24h x 31 Tage = 744

Und die vorhandene Visu ist dann nicht auf diesen rechnern vorhanden!!
 
hey die hab ich sogar schon eingesetzt.. allerdings problematisch ist das der Datenlogger etwas schwer auszulesen ist wenn man keine permanente anbindung hat wie telefon, handy oder internet, geschweige denn ethernet.. allerdings besteht die möglichkeit das über email zu verschicken und ich müsste eigentlich nur einen Exchange server einrichten.. und das irgendwie sichern..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier ist einmal ein Programmbeispiel in WinCC für das Einlesen einer Rohdatenvariable (Länge 40 Byte), das Auslesen von 4 Datensätzen (jeweils bestehend aus Datum (DATE), Zeit (TOD) und Wert (REAL)) aus der Rohdatenvariable und das Abspeichern der 4 Datensätze in einer CSV-Datei.

Die folgende VBS-Aktion ist in WinCC an einem Button projektiert und wird beim Drücken der linken Maustaste ausgeführt.

Code:
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y) 
 
' ==============================
' Datensatz
' ==============================
 
' Konstanten deklarieren
 
Const Dateiname = "F:\Datensatz.csv"
 
' Variablen deklarieren
 
Dim FSO, Datei
 
Dim Index
 
Dim Rohdaten
 
Dim Datum, Zeit , Wert
 
' Objektreferenz erzeugen
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
' Datei erzeugen
 
Set Datei = FSO.CreateTextFile(Dateiname)
 
' Spaltennamen schreiben
 
Datei.WriteLine("Datum;Zeit;Wert")
 
' Rohdaten lesen und in einem Array speichern
 
Rohdaten = HMIRuntime.Tags("Rohdaten").Read
 
For Index = 0 To 30 Step 10
 
    ' Datensatz Datum aus Rohdaten lesen
 
    Datum = DatensatzDatum (Rohdaten, Index)
 
    ' Datensatz Zeit aus Rohdaten lesen
 
    Zeit = DatensatzZeit (Rohdaten, Index)
 
    ' Datensatz Wert aus Rohdaten lesen
 
    Wert = DatensatzWert (Rohdaten, Index)
 
    ' Datensatz in Datei schreiben
 
    Datei.WriteLine(Datum & ";" & Zeit & ";" & Wert)  
 
Next
 
' Datei schließen
 
Datei.Close
 
End Sub

Im Deklarationsbereich der obigen VBS-Aktion sind die folgenden VBS-Funktionen projektiert.

Die VBS-Funktionen werden von der obigen VBS-Aktion aufgerufen.

Code:
Option Explicit
 
 
Function DatensatzDatum (Rohdaten, Index)
 
' ==============================
' Datensatz Datum
' ==============================
 
' CLng(CDate("1.1.1900")) = 2
' CLng(CDate("1.1.1990")) = 32874
 
DatensatzDatum = CDate(Rohdaten(Index) * 2^8 + Rohdaten(Index + 1) + 32874)
 
End Function
 
 
Function DatensatzZeit (Rohdaten, Index)
 
' ==============================
' Datensatz Zeit
' ==============================
 
Dim Zeit, Stunden, Minuten, Sekunden
 
Zeit = (Rohdaten(Index + 2) * 2^24 + Rohdaten(Index + 3) * 2^16 + _
        Rohdaten(Index + 4) * 2^8  + Rohdaten(Index + 5)) \ 1000 
 
Stunden = Zeit \ 3600
 
Minuten = (Zeit - Stunden * 3600) \ 60
 
Sekunden = Zeit - Stunden * 3600 - Minuten * 60
 
DatensatzZeit = TimeSerial(Stunden, Minuten, Sekunden)
 
End Function
 
 
Function DatensatzWert (Rohdaten, Index)
 
' ==============================
' Datensatz Wert
' ==============================
 
Dim Vorzeichen, Exponent, Mantisse
 
' Vorzeichen
 
If Rohdaten(Index + 6) And &h80 Then
    Vorzeichen = - 1.0
Else
    Vorzeichen = 1.0
End If
 
' Exponent
 
Exponent = (Rohdaten(Index + 6) And &H7F) * 2^1 + Rohdaten(Index + 7) \ 2^7
 
Exponent = Exponent - 127
 
' Mantisse
 
Mantisse = (Rohdaten(Index + 7) And &H7F) * 2^16 + Rohdaten(Index + 8) * 2^8 + _
            Rohdaten(Index + 9)
 
Mantisse = 1.0 + Mantisse / 2^23
 
' Wert
 
DatensatzWert = CSng(Vorzeichen * Mantisse * 2.0^Exponent)
 
End Function

Gruß Kai
 

Anhänge

  • WinCC_Variablen.jpg
    WinCC_Variablen.jpg
    349,7 KB · Aufrufe: 37
  • WinCC_Graphics_Designer_1.jpg
    WinCC_Graphics_Designer_1.jpg
    523,3 KB · Aufrufe: 30
  • WinCC_Graphics_Designer_2.jpg
    WinCC_Graphics_Designer_2.jpg
    402,4 KB · Aufrufe: 32
  • WinCC_Graphics_Designer_3.jpg
    WinCC_Graphics_Designer_3.jpg
    414,7 KB · Aufrufe: 28
Und hier sind der STEP 7-Datenbaustein sowie die in WinCC erzeugte CSV-Datei mit den Datensätzen aus der Rohdatenvariable.

Gruß Kai
 

Anhänge

  • STEP7-DB100.pdf
    5,7 KB · Aufrufe: 41
  • Datensatz.csv.txt
    130 Bytes · Aufrufe: 56
Nicht schlecht, nicht schlecht.. Das ganze noch erweitern schon habe ich meine Problematik gelöst... Über einen Tastendruck kann ich durchaus so recht viel erreichen... muss so nur den Profibus nach außen verlegen, kann die daten lesen und direkt in die Datenbank importieren...

Erste Testresultate haben einwandfrei funktioniert.. das ganze dann im größenbereich *186 ansiedeln..

Danke..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kai,

kleines Problem, habe jetzt nochmal exakt das in das Projekt übernommen aber es funktoniert nicht mehr.. bekomme allerdings auch keine Meldung...

Drücken auf den Taster passiert einfach gar nichts.. er erstellt auch keine datei.. um abzuklären ob ich alles richtig gemacht habe, folgendes:

In die VBS Aktion der Schaltfläche habe ich das Script:

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)

' ==============================
' Datensatz
' ==============================

' Konstanten deklarieren

Const Dateiname = "E:\Datensatz.csv"

' Variablen deklarieren

Dim FSO, Datei

Dim Index

Dim Rohdaten

Dim Datum, Zeit , Wert

' Objektreferenz erzeugen

Set FSO = CreateObject("Scripting.FileSystemObject")

' Datei erzeugen

Set Datei = FSO.CreateTextFile(Dateiname)

' Spaltennamen schreiben

Datei.WriteLine("Datum;Zeit;Wert")

' Rohdaten lesen und in einem Array speichern

Rohdaten = HMIRuntime.Tags("Rohdaten").Read

For Index = 0 To 30 Step 10

' Datensatz Datum aus Rohdaten lesen

Datum = DatensatzDatum (Rohdaten, Index)

' Datensatz Zeit aus Rohdaten lesen

Zeit = DatensatzZeit (Rohdaten, Index)

' Datensatz Wert aus Rohdaten lesen

Wert = DatensatzWert (Rohdaten, Index)

' Datensatz in Datei schreiben

Datei.WriteLine(Datum & ";" & Zeit & ";" & Wert)

Next

' Datei schließen

Datei.Close

End Sub

Und in die VBS Funktion.. da hab ich weng ein Problem weil ich nicht weiss als was ich die einfügen muss.. als Projekt Modul oder als Aktion?? da ich etwas anfänger bin in sache VBS tu ich mir da etwas schwer.. C Script währ für mich etwas einfacher...
 
Hallo,
da mir auf den ersten (und zweiten) Blick kein Fehler auffallen will ... speichert dein Script gar nichts ? Auch nicht die oberste Kopfzeile ?

gruß
LL
 
nein Dachte erst es liegt an der erstellung des Files, weil nicht einmal die erstellt wurde, dann hab ich sie händisch erstellt.. und selbst da speichert er nichts rein..

Wichtig war mir nur ob ich das 2. auch als Projekt modul parametieren muss?? und muss ich das irgendwo noch hinterlegen?? finde den fehler nicht.. :(

such jetzt schon seit stunden.. beim 1. Mal hats geklappt und jetzt will ernicht mehr.. :(
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In die VBS Aktion der Schaltfläche habe ich das Script:

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)

' ==============================
' Datensatz
' ==============================

' Konstanten deklarieren

Const Dateiname = "E:\Datensatz.csv"

' Variablen deklarieren

Dim FSO, Datei

Dim Index

Dim Rohdaten

Dim Datum, Zeit , Wert

' Objektreferenz erzeugen

Set FSO = CreateObject("Scripting.FileSystemObject")

' Datei erzeugen

Set Datei = FSO.CreateTextFile(Dateiname)

' Spaltennamen schreiben

Datei.WriteLine("Datum;Zeit;Wert")

' Rohdaten lesen und in einem Array speichern

Rohdaten = HMIRuntime.Tags("Rohdaten").Read

For Index = 0 To 30 Step 10

' Datensatz Datum aus Rohdaten lesen

Datum = DatensatzDatum (Rohdaten, Index)

' Datensatz Zeit aus Rohdaten lesen

Zeit = DatensatzZeit (Rohdaten, Index)

' Datensatz Wert aus Rohdaten lesen

Wert = DatensatzWert (Rohdaten, Index)

' Datensatz in Datei schreiben

Datei.WriteLine(Datum & ";" & Zeit & ";" & Wert)

Next

' Datei schließen

Datei.Close

End Sub

Das sieht soweit richtig aus.

Und in die VBS Funktion.. da hab ich weng ein Problem weil ich nicht weiss als was ich die einfügen muss.. als Projekt Modul oder als Aktion?

Die VBS-Funktionen habe ich im Deklarationsbereich der VBS-Aktion projektiert.

Der Deklarationsbereich wird mit der Schaltfläche "Deklarationsbereich einblenden" im Aktionseditor für die VBS-Aktion eingeblendet.

Siehe dazu auch die WinCC-Online Hilfe:

Deklarationsbereich in Aktionen

Wenn Sie Aktionen im Graphics Designer erstellen, können Sie mit der Schaltfläche "Deklarationsbereich einblenden" den Deklarationsbereich der Aktion einblenden. Beim Anlegen einer neuen Aktion wird die Anweisung "Option explicit" automatisch und nicht löschbar in den Deklarationsbereich eingetragen. Die Anweisung ist erforderlich um Fehler durch falsche Schreibweise von Variablen ohne Deklaration zu vermeiden.

Die Anweisung erfordert, dass Sie Variablen immer mit der Anweisung "Dim" in Ihrem Code definieren.

Verwenden Sie die Anweisung "Option explicit" nicht in Ihrem Code, da es sonst zu Laufzeitfehlern kommen kann.

Im Deklarationsbereich können Sie zusätzlich allgemeine Festlegungen treffen, die Sie global für das aktuelle Bild verwenden möchten, z.B.:

  • Variablendefinitionen
  • Prozeduren oder Funktionen, die Sie nur in diesem Bild verwenden möchten
In den Deklarationsbereichen der Aktionen können in den Bereichen "Ereignis" und "Eigenschaften" eines Objektes voneinander unabhängige globale Variablen definiert werden. Zwischen gleichnamigen globalen Variablen in diesen beiden Bereichen besteht keine Verbindung.

Gruß Kai
 

Anhänge

  • WinCC_Graphics_Designer_1.jpg
    WinCC_Graphics_Designer_1.jpg
    528 KB · Aufrufe: 21
  • WinCC_Graphics_Designer_2.jpg
    WinCC_Graphics_Designer_2.jpg
    394,2 KB · Aufrufe: 20
  • WinCC_Graphics_Designer_3.jpg
    WinCC_Graphics_Designer_3.jpg
    421,3 KB · Aufrufe: 16
  • WinCC_Graphics_Designer_4.jpg
    WinCC_Graphics_Designer_4.jpg
    403,4 KB · Aufrufe: 13
  • WinCC_Graphics_Designer_5.jpg
    WinCC_Graphics_Designer_5.jpg
    397,2 KB · Aufrufe: 16
funktioniert soweit schon mal die werte in eine datei zu speichern, nur Datum und zeit passen nicht.. hab totale chaosdaten..

mach zum testen folgendes ich schreibe die aktuelle zeit und datum jede sekunde in den db.. und der wert passt..

so sieht das endergebnis aus:
Datum Zeit Wert
21.01.2010 00:00:06 0,815
25.11.1994 00:00:06 0,815
05.03.2159 00:00:06 0,815
07.01.2144 00:00:06 0,815
10.11.2128 00:00:06 0,815
14.09.2113 00:00:06 0,815
18.07.2098 00:00:06 0,815
22.05.2083 00:00:06 0,815
25.03.2068 00:00:06 0,815
27.01.2053 00:00:06 0,815
01.12.2037 00:00:06 0,815
05.10.2022 00:00:06 0,815
10.08.2007 00:00:06 0,815
12.06.1992 00:00:06 0,815
20.09.2156 00:00:06 0,815
25.07.2141 00:00:06 0,815
29.05.2126 00:00:06 0,815
02.04.2111 00:00:06 0,815
03.02.2096 00:00:06 0,815
07.12.2080 00:00:06 0,815

hoffe jemand weiss woran das liegen könnte... scheinen die Daten irgendwie verdreht anzukommen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Des war nen guter Tip.. hat sich erledigt.. DB war ausversehen verkehrt rum.. d.h. er hat das datum als zeit gespeichert und die zeit als Datum..

SORRY

Anderes problem hab ich schon feststellen müssen, das ich nur 200Bytes übertragen kann.. das sind rund 20 Datensätze.. hab einfach mehr eingestellt und urplötzlich geht das ganze nur noch ab und zu.. 1x hat er bisher die werte vollständig übernommen.. danach gar nicht mehr.. rohdatenvariable gekürzt und es funktioniert wieder.. werde wohl auch mal direkt mit siemens rücksprache halten müssen wie die tatsächliche länge sich verhält..
 
Zurück
Oben