# WinCC Flex 2005 - Anzeige von Texten aus Textdatei



## eYe (30 Oktober 2008)

Moin,

ich möchte gerne in meiner Visu einige Texte variabel gestalten, damit der Kunde Sie je nach Anlage anpassen kann. Da er kein WinCC Flex 2005 besitzt müßten die Texte am besten anhand einer Excel oder Textdatei in die Visu übernommen werden. (Runtime ist Advanced und läuft auf XP Prof. Rechner)

Ist das möglich, hat sowas schonmal jemand gemacht?


----------



## Larry Laffer (30 Oktober 2008)

Hallo,
das geht, nur mußt du dabei berücksichtigen, dass du diese Texte nur in angelegten Variablen ausgeben kannst. Diese Variablen wären dann allerdings interne Variablen und zählen somit nicht zu den Powertags ...

Als Quelle würde ich dann aber eine ASCII-Datei (Textdatei ohne Formatierungen etc.) nehmen. Das importieren von Daten aus einer Excel-Quelle kann u.U. langsam sein.

Gruß
LL


----------



## eYe (30 Oktober 2008)

Das ist schonmal schön zu wissen das es geht 

Die internen Variablen anzulegen stellt kein Problem dar, eine Excel file wäre schöner da diese Textlisten halt standardmäßig schon in Excel vorliegen.
Aber Ascii wäre auch kein Beinbruch.

Ich wäre ja schonmal begeistert wenn ich es überhaupt hinbekomme 

In der Hilfe bin ich auf VB Code gestoßen um Textdatein zu lesen, ist das bei der Lösung auch so?
Leider habe ich nicht viel Ahnung davon und wäre begeistert wenn sich jemand die Mühe macht mir das Ganze mal näher zu bringen.

Die Visu ist halt eine Ganze Simple Seite auf der Zig LED's angezeigt werden und daneben steht der dazugehörige Text. Dieser muss nun halt aus der txt gelesen werden damit jeder einfach ändern kann.


----------



## Larry Laffer (30 Oktober 2008)

eYe schrieb:


> In der Hilfe bin ich auf VB Code gestoßen um Textdatein zu lesen, ist das bei der Lösung auch so?


... wenn du den Beitrag von Volker in der FAQ meinst, dann ja.



eYe schrieb:


> Ich wäre ja schonmal begeistert wenn ich es überhaupt hinbekomme
> 
> Leider habe ich nicht viel Ahnung davon und wäre begeistert wenn sich jemand die Mühe macht mir das Ganze mal näher zu bringen.


 
Ich kann dir gerne dabei helfen, aber die Arbeit hast schon du ...



eYe schrieb:


> Die Visu ist halt eine Ganze Simple Seite auf der Zig LED's angezeigt werden und daneben steht der dazugehörige Text. Dieser muss nun halt aus der txt gelesen werden damit jeder einfach ändern kann.


 
In deinem beschriebenen Fall würde ich die internen Variablen jeweils beim Aufbauen der entsprechenden Bildschirmseite einlesen. An dieser Stelle verstehst du vielleicht auch, warum ich hier vom Prinzip her eine ASCII-Datei bevorzugen würde - das geht vom Zugriff einfach schneller ...

Gruß
LL


----------



## eYe (3 November 2008)

Hallo LarryLaffer,

habe heute mal wieder ein paar min Zeit und habe mir nun nochmal in ruhe den FAQ Beitrag von Volker durchgelesen.

Die Runtime läuft unter Windows XP und da du mir ja ASCI empfohlen hast gehe ich ma davon aus, dass folgender code zu verwenden ist?

*Windows - Daten lesen* ( FAQ )


```
Set fso = CreateObject("Scripting.FileSystemObject")
Set fs = CreateObject("WScript.Shell")
 
    Set TextFile = fso.openTextFile(datei, 1)
    x = 0
    do while textfile.atendofstream <> true
        x = x + 1
        name(x) = TextFile.readline
    loop
    textfile.close
```

Hierzu ein paar Anfängerfragen 

1) Es fehlt die Deklarierung der Variablen? Also noch "Dim fso, fs, etc" einügen?
2) Wo gebe ich den Dateipfad und den Dateinamen an? (Name = datei.txt?)
3) Die einzelnen Zeilen werden in name(x) geschrieben, wie bekomme ich den Text von dort in meine internen String Variablen?

sry, habe leider mit SKripten kaum Erfahrungen...


----------



## Kai (4 November 2008)

Hier sind einmal zwei Programmbeispiele für das Einlesen einer CSV-Datei und das Speichern der gelesenen Werte in WinCC flexible Runtime.

Im ersten Programmbeispiel besteht die CSV-Datei aus 4 Zeilen und 3 Spalten.

Datei_1.csv


```
Text 11;Text 12;Text 13
Text 21;Text 22;Text 23
Text 31;Text 32;Text 33
Text 41;Text 42;Text 43
```
 
VBScript Datei_1


```
' =========================================================
' Lesen einer CSV-Datei und speichern der gelesenen Werte
' =========================================================
 
' Konstanten deklarieren
 
Const ForReading = 1
 
Const Dateiname = "F:\Datei_1.csv"
 
' Variablen deklarieren
 
Dim FSO, Datei
 
Dim TextZeile, TextFeld, Zeile
 
' Objekt erzeugen
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
' Öffnen der Datei zum Lesen
 
Set Datei = FSO.OpenTextFile(Dateiname, ForReading, False)
 
Zeile = 1
 
' Datei bis zum Ende durchlaufen
 
While Not Datei.AtEndOfStream
 
    ' Lesen einer Zeile
 
    TextZeile = Datei.ReadLine
 
    ' Zeile an Semikolon trennen und die Werte in einem 
    ' Array speichern
 
    TextFeld = Split(TextZeile,";")
 
    ' Werte aus dem Array in Variablen speichern
 
    SmartTags("Text_" & Zeile & "1") = TextFeld(0)
 
    SmartTags("Text_" & Zeile & "2") = TextFeld(1)
 
    SmartTags("Text_" & Zeile & "3") = TextFeld(2)
 
    Zeile = Zeile + 1
 
Wend
 
' Schließen der Datei
 
Datei.Close
```
 
Datei_2.csv


```
Text 14;Text 15;Text 16
Text 24;Text 25;Text 26
Text 34;Text 35;Text 36
Text 44;Text 45;Text 46
```
 
VBScript Datei_2


```
' =========================================================
' Lesen einer CSV-Datei und speichern der gelesenen Werte
' =========================================================
 
' Konstanten deklarieren
 
Const ForReading = 1
 
Const Dateiname = "F:\Datei_2.csv"
 
' Variablen deklarieren
 
Dim FSO, Datei
 
Dim TextZeile, TextFeld, Zeile
 
' Objekt erzeugen
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
' Öffnen der Datei zum Lesen
 
Set Datei = FSO.OpenTextFile(Dateiname, ForReading, False)
 
Zeile = 1
 
' Datei bis zum Ende durchlaufen
 
While Not Datei.AtEndOfStream
 
    ' Lesen einer Zeile
 
    TextZeile = Datei.ReadLine
 
    ' Zeile an Semikolon trennen und die Werte in einem
    ' Array speichern
 
    TextFeld = Split(TextZeile,";")
 
    ' Werte aus dem Array in Variablen speichern
 
    SmartTags("Text_" & Zeile & "1") = TextFeld(0)
 
    SmartTags("Text_" & Zeile & "2") = TextFeld(1)
 
    SmartTags("Text_" & Zeile & "3") = TextFeld(2)
 
    Zeile = Zeile + 1
 
Wend
 
' Schließen der Datei
 
Datei.Close
```
 
Gruß Kai


----------



## Kai (4 November 2008)

Und noch ein paar Bilder.

Gruß Kai


----------



## Kai (4 November 2008)

Und noch ein paar Bilder.

Gruß Kai


----------



## Kai (4 November 2008)

Im zweiten Programmbeispiel besteht die CSV-Datei aus 4 Zeilen und 1 Spalte.

Datei_3.csv


```
Text 51
Text 61
Text 71
Text 81
```
 
VBScript Datei_3


```
' =========================================================
' Lesen einer CSV-Datei und speichern der gelesenen Werte
' =========================================================
 
' Konstanten deklarieren
 
Const ForReading = 1
 
Const Dateiname = "F:\Datei_3.csv"
 
' Variablen deklarieren
 
Dim FSO, Datei
 
Dim TextZeile, Zeile
 
' Objekt erzeugen
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
' Öffnen der Datei zum Lesen
 
Set Datei = FSO.OpenTextFile(Dateiname, ForReading, False)
 
Zeile = 5
 
' Datei bis zum Ende durchlaufen
 
While Not Datei.AtEndOfStream
 
    ' Lesen einer Zeile
 
    TextZeile = Datei.ReadLine
 
    ' Wert aus der Zeile in einer Variablen speichern
 
    SmartTags("Text_" & Zeile & "1") = TextZeile
 
    Zeile = Zeile + 1
 
Wend
 
' Schließen der Datei
 
Datei.Close
```
 
Datei_4.csv


```
Text 52
Text 62
Text 72
Text 82
```
 
VBScript Datei_4


```
' =========================================================
' Lesen einer CSV-Datei und speichern der gelesenen Werte
' =========================================================
 
' Konstanten deklarieren
 
Const ForReading = 1
 
Const Dateiname = "F:\Datei_4.csv"
 
' Variablen deklarieren
 
Dim FSO, Datei
 
Dim TextZeile, Zeile
 
' Objekt erzeugen
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
' Öffnen der Datei zum Lesen
 
Set Datei = FSO.OpenTextFile(Dateiname, ForReading, False)
 
Zeile = 5
 
' Datei bis zum Ende durchlaufen
 
While Not Datei.AtEndOfStream
 
    ' Lesen einer Zeile
 
    TextZeile = Datei.ReadLine
 
    ' Wert aus der Zeile in einer Variablen speichern
 
    SmartTags("Text_" & Zeile & "1") = TextZeile
 
    Zeile = Zeile + 1
 
Wend
 
' Schließen der Datei
 
Datei.Close
```
 
Gruß Kai


----------



## Kai (4 November 2008)

Und noch ein paar Bilder.

Gruß Kai


----------



## Kai (4 November 2008)

Und noch ein paar Bilder.

Gruß Kai


----------



## eYe (4 November 2008)

Vielen Dank klappt super 

Habe es noch etwas an meine Bedürfnisse angepaßt und bin mehr als zufrieden.


thx, eYe          :TOOL:


----------

