# Programm zum Datenauslesen in Textdatei



## dezibl (3 Dezember 2008)

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.


----------



## Larry Laffer (3 Dezember 2008)

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


----------



## dezibl (3 Dezember 2008)

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


----------



## marlob (3 Dezember 2008)

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"


----------



## marlob (3 Dezember 2008)

dezibl schrieb:


> ... Hatte auch schon einen gesonderten Rechner für die Anlage geplant allerdings bekommt es niemand mit wenn er nicht läuft oder Streikt..


Suche mal nach Watchdog oder Lebensbit hier im Forum


----------



## dezibl (3 Dezember 2008)

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


----------



## dezibl (3 Dezember 2008)

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


----------



## Larry Laffer (3 Dezember 2008)

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


----------



## dezibl (3 Dezember 2008)

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


----------



## Larry Laffer (3 Dezember 2008)

dezibl schrieb:


> WinCC kann keine Array´s verarbeiten ...


das hätte ich jetzt allerdings doch erwartet ...



dezibl schrieb:


> Flexible hat zwar den Vorteil das es Arrays verarbeiten kann, dafür aber keine C Scripte..


... aber wenn du hier einen Runtime oder ein Multipanel am Start hast, dann kannst du dort VB-Scripte erstellen. Damit sollte das dann gehen ...

Gruß
LL


----------



## dezibl (3 Dezember 2008)

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


----------



## Larry Laffer (3 Dezember 2008)

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


----------



## dezibl (3 Dezember 2008)

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


----------



## Larry Laffer (3 Dezember 2008)

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


----------



## dezibl (4 Dezember 2008)

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


----------



## DELTALOGIC Support (4 Dezember 2008)

Guten Morgen,

vieleicht hilft Ihnen ACCON-S7-EasyLog (http://www.deltalogic.de/content/view/20/37/lang,de/). Damit können auch Arrays aufgezeichnet werden. Dokumentation ist im Download enthalten, ein Video in dem Sie die Möglichkeiten der Software sehen können ist im Downloadbereich.

Bernhard Götz


----------



## dezibl (4 Dezember 2008)

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?


----------



## DELTALOGIC Support (4 Dezember 2008)

Guten Morgen,

ich würde die Werte als Array deklarieren. Damit könnten sie komplett mit einem Lesezyklus als eine Variable in die CSV Datei geschrieben werden.

Bernhard Götz


----------



## Larry Laffer (4 Dezember 2008)

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


----------



## dezibl (4 Dezember 2008)

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


----------



## Larry Laffer (4 Dezember 2008)

... entsprechend deiner Schilderung wäre das AGLink schon das Richtige.
Vielleicht sprichst du Fa. Deltalogic mal direkt an wenn du da nicht weiter kommst.

Gruß
LL


----------



## Gerhard Bäurle (4 Dezember 2008)

Hallo,

zum Thema fällt mir noch das *SPSinExcel* ein, weis aber nicht, 
ob das mit Deinen Arrays klar kommt.


----------



## Ralle (4 Dezember 2008)

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.


----------



## dezibl (4 Dezember 2008)

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


----------



## Larry Laffer (4 Dezember 2008)

dezibl schrieb:


> Weil ich keine direkte verbindung besitze.. d.h. die Daten werden nur einmal monatlich abgeholt..


Das hattest du allerdings oben weiter etwas anders dargestellt ...



dezibl schrieb:


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


----------



## dezibl (5 Dezember 2008)

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!!


----------



## sue port (5 Dezember 2008)

hola dezibl,

check thiz out:

http://www.tixi.com/functions/

greetinx


sue


----------



## dezibl (5 Dezember 2008)

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


----------



## Kai (5 Dezember 2008)

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.


```
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.


```
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


----------



## Kai (5 Dezember 2008)

Und hier sind der STEP 7-Datenbaustein sowie die in WinCC erzeugte CSV-Datei mit den Datensätzen aus der Rohdatenvariable.

Gruß Kai


----------



## dezibl (8 Dezember 2008)

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


----------



## dezibl (8 Dezember 2008)

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


----------



## Larry Laffer (8 Dezember 2008)

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


----------



## dezibl (8 Dezember 2008)

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


----------



## Kai (8 Dezember 2008)

dezibl schrieb:


> In die VBS Aktion der Schaltfläche habe ich das Script:
> 
> Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
> 
> ...


 
Das sieht soweit richtig aus.



dezibl schrieb:


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


 
Gruß Kai


----------



## dezibl (9 Dezember 2008)

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


----------



## Kai (9 Dezember 2008)

Kannst Du mal den DB mit den Aktualdaten hier in das Forum stellen?

Gruß Kai


----------



## dezibl (9 Dezember 2008)

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


----------



## Ralle (9 Dezember 2008)

Zur max. Länge der Rohdatenvariable sieh mal hier: http://www.sps-forum.de/showpost.php?p=113431&postcount=5


----------

