TIA Script für automatischen Zeilenumbruch für ein Textfeld funktioniert nicht.

uweschwarz

Level-2
Beiträge
229
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich arbeite mit TIA Professional V17 und versuche eine VBScript zum laufen zu bringen, welches eine Zeichenkette in Zeilen mit x Buchstaben ausgibt. Das Script habe ich hier im Forum gefunden und finde es ehrlich gesagt sehr elegant :)
Code:
Const SEP = " "                                                                     ' seperator of words in Str
 
    Dim Word, Line                                                                      ' arrays
    Dim i, j, uB                                                                        ' counter

 
    vbSplitStr = vbNullString                                                           ' init ret val to nothing

    Word = Split(Str, SEP, -1, vbTextCompare)                                           ' split Str to array
 
    uB = UBound(Word)                                                                   ' count of words
    If uB < 0 Then Exit Function                                                        ' no words -> exit
 
    ReDim Line(0)                                                                       ' first line
    Line(0) = Word(0)                                                                   ' add first word to first line
 
    i = 1                                                                               ' init counter to second word
    j = 0                                                                               ' init counter to first line
 
 
    While i <= uB                                                                       ' all next words
        If Len(Trim(Line(j) & SEP & Word(i))) > Mx Then                                 '    line with next word to long?
            j = j + 1                                                                   '       next line
            ReDim Preserve Line(j)                                                      '       add next line to array
        End If
        Line(j) = Trim(Line(j) & SEP & Word(i))                                         '    add word to current line
        i = i + 1                                                                       '    next word
    Wend

Um den Code zu testen habe ich eine interne Variablen MsgStr angelegt und das Script auf einen Button gelegt, der die interne Variable MsgStr in einem Textfeld anzeigt. 1741097749587.png

Der Funktionsaufruf am Button sieht so aus:
1741097817510.png
In der RT sieht das so vor Klick so aus:1741097910850.png
Nach dem Klicken: 1741097945527.png
Kein Zeilenumbruch nach 20 Zeichen und außerdem teilweise die Leerzeichen aus der Zeichenkette entfernt und teilweise nicht.
Hat jemand eine Idee woran das liegen könnte?
 
Dein Code ist von dem Skript vbSplitStr? Eine Function? Der Code ist nicht vollständig, es fehlt zumindest die Rückgabe des fertigen String-Arrays.
Kann das Textfeld überhaupt String-Arrays ausgeben?
 
Kann das Textfeld überhaupt String-Arrays ausgeben?
Weiß nicht. Sieht irgendwie nicht so aus. Ich habs auch mal mit einem EA-Feld versucht, das funktioniert auch nicht.

Edit: Vielleicht wäre es besser den String wieder zusammenzusetzen und statt des line feed ein $L in den String zu schreiben?
 
Edit: Vielleicht wäre es besser den String wieder zusammenzusetzen und statt des line feed ein $L in den String zu schreiben?
Das wäre mein erster Versuch gewesen. (ich kenne WinCC Professional nicht)
evtl. etwas experimentieren, ob von dem Textfeld ein $L (vbLf, Chr(10) ) oder $R (vbCr, Chr(13) ) oder beide Zeichen für eine Zeilenschaltung benötigt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
  vbSplitStr = Join(Line, vbLf)
Das gibt aber gar kein Array, sondern eine "normale" Zeichenfolge zurück. Da musst du also die Steuerzeichen für Zeilenschaltung in die Zeichenfolge einfügen. (Ich würde schon in dem Script gar nicht erst mit Array arbeiten, sondern direkt eine einfache Zeichenfolge erzeugen.)
evtl. etwas experimentieren, ob von dem Textfeld ein $L (vbLf, Chr(10) ) oder $R (vbCr, Chr(13) ) oder beide Zeichen für eine Zeilenschaltung benötigt werden.
 
Ich habe das Script jetzt zum laufen bekommen. Es geht ganz einfach mit vbNewLine
Code:
  vbSplitStr = Join(Line, vbNewLine)

Allerdings verstehe ich das Bild aus dem Beitrag von hucki (https://www.sps-forum.de/threads/st...eld-oder-e-a-feld-ausgeben.106339/post-814253) noch nicht so richtig.

Wo genau wird jetzt das Script aufgerufen bzw. wo muss es aufgerufen werden damit das EA-Feld bei Wertänderung von Msg abläuft. Der HMI Variablen selbst kann ich kein Script zuordnen oder weiß zumindest nicht wie.


1741277866250.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Sript wird in der Funktionsliste bei Wertänderung der Variablen Msg unter WinCC Advanced aufgerufen.

Im Bild sieht man oben die Variable (in einer Variablentabelle des HMI) und unten deren Eigenschaft "Ereignis bei Wertänderung".
Die Variable Msg ist eine der wenigen, die ich dafür "zyklisch fortlaufend" aktualisiere.


PS:
Wie das genau bei WinCC Professional aussehen sollte, weß ich leider auch nicht.
Auch ich hab' da keinerlei Erfahrungen mit.
🤷‍♂️
 
Zuletzt bearbeitet:
Ist vlt. sinnvoll, dass Script für Professional noch einmal komplett, so wie's jetzt funktioniert, für andere Suchende zu posten.
Scheint ja doch einiges etwas anders zu sein als für die Comfort-Panels.
;)
 
Zurück
Oben