Programm zum Datenauslesen in Textdatei

dezibl

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

zuerst ich bin neu hier im forum und kenn mich hier noch nicht so aus, aber hoffe trotzdem ihr könnt mir helfen.

Also folgendes Problem ich habe eine SPS S7 315, in der Historische Daten in einem Datenbaustein abgelegt werden, d.h. ich bekomme Datum, Zeit und eine Realzahl aufgelistet. Es werden Stundenwerte maximal 31 Tage lang gespeichert, das sind 744 Datensätze mit jeweils 3 Doppelwörtern enthalten, daraus ergeben sich 8928 Bytes. Ich suche zuerst ein Programm mit dem ich diese Daten einfach in ein Textdokument speichern kann. Und weiterführend kommt das riesenproblem zustande das ich das irgendwie im WinCC C-Script umsortieren muss um es im Grunde im TXT so aussehen zu lassen:

Datum;Zeit;Wert
2008-12-02;08:23:22;0,34
2008-12-02;09:23:22;0,45
...

Die problematik dabei ist, das diese Daten in eine SQL datenbank zu integrieren sind.

Grüße und vielen Dank im vorraus für euere Antworten.
 
Hallo,
für diese Aufgabe solltest du die Variablen der Visu zugänglich machen und in dieser dann ein Script erstellen mit dem du die Daten in dem von dir gewünschten Format in eine Datei schreibst ...

Zu diesem Thema vielleicht auch einmal die Forum's-Suche verwenden, denn dazu ist schon so allerlei geschrieben worden ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
erst einmal danke für die Antwort, allerdings kann ich keine 2232 Variablen im WinCC verbraten, (für eine Variable die in die Datenbank einfließen soll, wenn ich es soweit fertig habe das es mit einer funktioniert folgen noch 4weitere Werte) da ich die nicht weiter benötige in der Visu. Weiterhin dachte ich ich arbeite mit Rohdatenvariablen aber da liegt wiederrum das problem drin das Rohdaten nicht länger als rund 208Bytes lang sein kann, also bin ich immernoch bei 50 Rohdatenvariablen... noch ein weiteres Problem daran ist das ich keine Ständige verbindung zur SPS habe, daher die problematik der Datenherkunft.. Diese Station liegt so weit weg das weder funk noch Datenleitung noch telefon oder Handykommunikation möglich ist.. also ist die letzte möglichkeit die Daten so auf einem PG via MPI mindestens 1x im Monat zu holen.. deshalb Benötige ich das ganze über eine Textdatei, Weiterhin ist das Restliche PLS schon recht umfangreich und es bleiben mir nicht viele Variablen übrig. Hatte auch schon einen gesonderten Rechner für die Anlage geplant allerdings bekommt es niemand mit wenn er nicht läuft oder Streikt..
 
Um Daten von WinCC in eine Datenbank zu schreiben findest du ein Beispiel in dem WinCC Dokumentation System unter "Arbeiten mit WinCC->VBS zum Erstellen von Prodezuren und Aktionen->Beispiele zu VBS->Beispiele Allgemein"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
naja des nützt mir auch nicht viel wenn nur einmal einer im Monat vorbeikommt und erst dann feststellt das 1monat komplett an daten fehlen.. Störmeldungen raussenden geht aus technischen gründen auch nicht.. ;)

und vb script des ist auch eine idee ich schau mir gleich mal die hilfe an..
 
Danke nochmal für den Tipp mit der Hilfe, anderer seits hilft auch das nicht weiter, weil das Problem die großen datenmengen sind, zumal alles in einzelnen DW abgelegt werden, also es entsteht folgendes Problem für einen Wert den ich in die Datenbank einbinde benötige ich 2232 WinCC variablen und von der 64k lizenz sind nicht mal mehr 1000 übrig.. also wirds so nichts, da ich eigentlich genau genommen keine WinCC anbindung benötige oder an die WinCC datenbank sondern WinCC nur benötige um die Daten einer *.txt Datei neu zu sortieren.. also ich bekomme das Soweit hin wenn ich Rohdaten einlese bis 208Bytes, oder auch 52 DW oder auch für rund 17 Werte.. allerdings bin ich an der Leistungsgrenze der Rohdatenvariablen.. also müsste ich rund 43 Rohdatenvariablen lesen und weiterverarbeiten.. und das in ein Array im C schreiben und vom Array in der richtigen folge in ein Txt Dokument schreiben.. allerdings könnte ich mir einen Problemhaufen vom hals halten indem ich nur von TXT einlesen kann..
 
... hast du schon mal über Array's nachgedacht ?
Bei WinCC weiß ich es nicht, aber bei WinCCFlexibel und auch bei ProTool zählen Array's als 1 Tag ... Vielleicht ein Ansatz ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
WinCC kann keine Array´s verarbeiten, d.h. wenn du ein Array anlegst im DB kannst du mit WinCC nicht einfach auf das Array verweisen sondern musst einzeln die DW anlegen und brauchst somit das volle Paket an Variablen.. das is ja das ganze problem.. Flexible hat zwar den Vorteil das es Arrays verarbeiten kann, dafür aber keine C Scripte.. :( seh schon das wird schwer... muss aber möglich sein..
 
naja VB bin ich jetzt nicht so fit, da fällt es mir schwerer dann im nachhinein die daten so zu verändern das sie nutzbar sind.. Mir würde es schon genügen wenn ich meine daten direkt aus der S7 in irgend ne art Programm bekommen würde, wie z.b. Excel, da könnte ich immernoch soweit agieren das die excel file nur noch anders formatieren muss..

d.h. einen ganzen DB mit den ganzen 7450 Bytes in Excel laden.. und dann kann ich weiter mit den Daten agieren..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... ich kann hier nur Vorschläge machen und ggf. meine Hilfe anbieten ...
Machen musst du schon selber ... und du musst auch festlegen, was es werden soll.

Auf der Basis meines Vorschlages :
Ich würde den DB so aufbauen :
1 ARRAY [1..xyz] mit den Datums-Werten
1 ARRAY [1..xyz] mit den Uhrzeit-Werten
1 ARRAY [1..xyz] mit den Messwerten
diese in der Visu als Kurven deklarieren und mit der Kurvenanforderung übertragen.
Gleichzeitig eine Variable setzen, auf die die Visu reagiert und ihr Script aufruft.
Mit diesem Script die Daten abspeichern. Als Daten-Ziel würde ich hier allerdings nicht SQL oder Excel wählen, sondern zunächst eine neutrale Datei (*.CSV). Das geht erheblich schneller mit den Zugriffen. Diese Datei kannst du dann hinterher in die Datenbank importieren.
Ist alles übertragen muß der Kram in der SPS natürlich gelöscht werden ...

Die VB-Script-Routinen sind nicht sehr kompliziert (dazu gibt es im Forum auch schon eine Menge Beiträge zum Nachlesen).

Denk mal drüber nach ...

Gruß
LL
 
das ist schon annähernd eine lösung, der DB ist technisch gesehen leider nicht anders strukturrierbar.. d.h. ich bekomme ein Großes Array mit jeweils 744 datensätzen, und jeder datensatz bekommt Datum, Zeit und Wert. Also DB sieht folgendermaßen aus:
Struct
DS1 Struct
Datum Date
Zeit Time of Day
Wert Real
End_Struct
DS2 Struct
...

Um den Db zu ändern muss ich die ganze Wertübertragung neu Programmieren..

Csv Datei würde mir auch sehr gut gefallen.. denn über eine CSV kann man auch historische Daten in die Datenbank importieren...
 
... das mit dem STRUCT in deinem DB habe ich mir gedacht.
Der von mir vorgeschlagene Weg ist (für die Daten-Übertragung) wesentlich einfacher zu realisieren. Denk darüber nach ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
eine möglichkeit hätte ich noch das ganze irgendwie auf 3 db´s aufzuteilen.. ob das nun einfacher ist ist die andere frage.. problem ist das ich das zeitstempelverfahren benötige in der datenbank.. d.h. datum und zeit muss sein..
 
Schon nicht schlecht, ne nummer einfacher würde schon genügen.. d.h. das was die software jetzt macht ist Aktualwerte auflisten und in die CSV datei schreiben.. nur eigentlich bräuchte ich exakt das nur das ich die Werteliste bereits in der SPS besitze.. also nur eine Wertübernahme der 744 Werte.. (Problem ist ja bereits das ich 64 werte maximal auslesen kann) :(

wo ist denn der große :TOOL: Gott? :confused:
 
Hallo dezibl,
wir streiten uns da im Augenblick (glaube ich) um des Kaisers Bart ...
Du hast aktuell ein ARRAY of struct mit den Einträgen Datu, Uhrzeit und Wert in der Struktur. Ich hatte dir (um die Konsistenz der Daten zueinander aufrecht erhalten zu können) vorgeschlagen, daraus 3 einzelne ARRAY's zu machen.
Das hatte ich in erster Linie wegen der daten-Übertragung zur Visu so gemacht, denn wenn du die Werte passend abspeichern möchtest, dann geht das nicht ganz so einfach (ich beschäftige mich damit schon eine Weile).

Eine vollkommen andere Alternative wäre der Vorschlag von Deltalogic. Die Idee ist auch nicht schlecht. Ich würde hier allerdings das AGLink vorziehen und das Auslesen der Daten vom PC aus mit einem Read-Auftrag realisieren. So kannst du auch sicher stellen, dass die Daten zusammengehörig sind. Außerdem müßtest du in dem Fall auch die Struktur nicht ändern.

Anmerkung:
Auch wenn das jetzt Werbung für Delatalogic war sei folgendes gesagt :
"Ich bin kein Mitarbeiter der Firma und erhalte auch keine Provisionen". Ich hatte allerdings deren Produkte schon mal eingesetzt und für gut befunden ...

Gruß
LL
 
Mhh.. Des Accon bekomm ich nicht zum laufen, das ich irgendwie ein Array auslesen könnte.. Schon die ganze zeit versucht..

Einfach ausgedrückt laufen hier mehrere Probleme zusammen. Grundsätzlich schon mal die möglichkeit irgendwie die Daten (die im DB Sortiert und jeweils mit datum und Zeit versehen sind) auf einen Rechner zu bekommen der keine Dauerhafte verbindung bereitstellt. Eben nur ab und zu.

2. Problem ist dann die Daten vom Rechner grundsätzlich einmal in die Datenbank zu bekommen

und 3. Problem ist dann natürlich auch eine Konsistenz der Daten sicherzustellen

744 Datensätze mit jeweils Datum, Zeit und Wert sind numal eine Kapazität die nicht so einfach zu realisieren ist zumal das noch nicht einmal mit einem Wert funktioniert geschweige denn mit 10..

Eigentlich bräuchte ich als Gesammtes eine Lösung um Einfach und Effektiv die Daten abholen zu können, die Bereits fertig sortiert sind und dann in die Datenbank zu schreiben.. Händisch funktioniert das einfach, aktualwerte im S7 Manager anschauen, einfach kopieren und dann die Werte in ein Textdokument einfügen und der Datenbank nur sagen wie sie Formatiert sind.

Die Datenbank ist vielseitig und nimmt von CSV über TXT bis hin zu anderen beliebigen Dateiformaten alles.. man muss nur einstellen wie die Daten bereitgestellt werden in der Datei.

Das nächste Problem ist die Daten dann beim aufsplitten auf mehere DB´s wieder in richtige reihenfolge zu bekommen.. und auch diese wieder zusammen zu bekommen als Paket. Array´s sind eigentlich nur eine andere Ansicht für ein einfaches Struct, denn ein Struct kann mehrere Datentypen verwalten was bei einem Array unmöglich ist.

mir würde vorerst schon mal nur eine möglichkeit ausreichen die nichts anderes tut als ich händisch bisher die daten zu kopieren und in eine Datei einzufügen.. Ich weiss es ist recht heikel und mit Streiten hat das recht wenig zu tun.

Eigentlich reicht eine Software wo ich sage DB3 und dann wird der komplette Inhalt gelesen und geschrieben, irgendwo vielleicht noch sagen können Datentyp.. und dann lese ich einfach und bequem 3 Datenbausteine aus und hab einfach eine Uhrzeitliste eine Datumsliste und eine Werteliste.. muss ich eben das SPS programm soweit anpassen.. allerdings spare ich mir dadurch auch werte, da ich immer beim selben Impuls Datenbausteine um einen wert erweitere.. dann hätte ich bei 10 werten gerade mal 12 DBs.. mit jeweils 744 Datensätzen.. das sind 8928 Datensätze.. wohin ich bei dem bisherigen verfahren bei jedem wert datum und zeit dabei habe.. also 22320 Datensätze entstehen..
 
Zuletzt bearbeitet:
Zurück
Oben