Jaaa, wenn das Ganze jetzt mit variablen Textlängen funktionieren soll, dann wird 's in FUP/KOP langsam schwierig.
Der kurze Beispielcode zeigt eigentlich nur, wie es grundsätzlich funktiert. Nun mußt Du den Code nach Deinen eigentlichen Anforderungen anpassen, den Anzeigetext von außen füttern, ggf. Parameter variabel gestalten...
Erzähl doch mal mehr, was Du eigentlich tun willst. Wieviele verschiedene Texte? Wie lang ist der längste Text, wie lang der kürzeste? Wie oft ändert sich der Ausgabetext?
Wenn Du nur 1 Text mit variablem Inhalt ausgeben willst (der z.B. von einer Visu/WinCC kommt), dann kannst Du das Beispiel auf die maximale Stringlänge auslegen und nur so oft schieben, wie tatsächlich Zeichen vorhanden sind.
z.B. Ausgabe max 60 Zeichen Text
- das Beispiel in #6 arbeitet mit einem festen Text, der in DB9.DBB0..DBB22 liegt. Das änderst Du zu einem String der maximal benötigten Länge + mindestens 8 Leerzeichen, z.B. in DB9 ab DBB0:
DB9: +0.0 | Ausgabetext | STRING[68] | Anfangswert: ' ' (mind. 1 Zeichen lang)
- für das Texteingabefeld von WinCC legst Du irgendwo eine String-Variable für die maximal benötigte Stringlänge an, z.B.
Eingabetext | STRING[60]
- in WinCC legst Du eine String-Variable für das E/A-Feld auf diese Variable an.
Und ein E/A-Feld zum Eingeben des Textes in diese Variable.
- mit der IEC Function FC2 CONCAT bastelst Du 8 führende und 8 nachfolgende Leerzeichen an den Eingabetext.
Dafür brauchst Du einen STRING mit 8 Leerzeichen:
Leer8 | STRING[8] | Anfangswert: '........' (8 Leerzeichen)
- Damit Du CONCAT auch gleich für die ohnehin benötigte Kopierfunktion in den Ausgabepuffer benutzen kannst, muß der Ausgabepuffer (Schiebepuffer) vom Typ STRING sein:
DB8: +0.0 | Ausgabepuffer | STRING[76] | Anfangswert: '.........' (mind. 9 (Leer)Zeichen)
- Netzwerk 4 muß auf die neue Länge und Adresse des Ausgabepuffer angepasst werden
1. BLKMOV (Text links schieben) : SRCBLK:=P#DB8.DBX3.0 BYTE 75 und DSTBLK:=P#DB8.DBX2.0 BYTE 75
2. BLKMOV (Ausgabe zu Anzeige): SRCBLK:=P#DB8.DBX2.0 BYTE 8
- in Netzwerk 3 ersetze SFC20 BLKMOV durch 2x FC2 CONCAT (siehe Bild im Anhang)
- in Netzwerk 3 mußt Du die Anzahl Schiebetakte (max-Vergleichswert für den Schiebezähler) anpassen von 22 zur tatsächlichen Textlänge des Ausgabetextes. (da wird es in FUP/KOP langsam aufwendig wegen der Typprüfung)
Dazu nimmst Du die aktuelle Stringlänge von "DB9".Ausgabetext (aus dem zweiten Byte des Strings von Adresse DB9.DBB1) und ändere den Vergleich von CMP>=I zu CMP>I
(siehe Bild im Anhang)
Wenn Du den Lauftext noch variabler brauchst, dann wirst Du Dich wohl mit indirekter Adressierung mit AWL oder SCL beschäftigen müssen. Das geht nicht in FUP/KOP. Und dann kann man es auch ohne die absoluten Adressangaben programmieren.
Ausgabe an die Ausgangsbytes zur LED-Anzeige:
Der SFC20 BLKMOV kann nur ins Prozessabbild A... kopieren, nicht zur Peripherie PAB...
Am einfachsten ist es, wenn Du die A-Adressen der LED-Anzeige ins Prozessabbild der Ausgänge legst, dann kannst Du SFC20 benutzen. Wenn die Adressen außerhalb des Prozessabbilds liegen, dann kommt es darauf an, wie die Konsistenz für das PROFINET-Device projektiert ist. Wenn Konsistenz über die gesamte Länge (8 Byte) projektiert ist, dann mußt Du mit SFC15 DPWR_DAT kopieren. Wenn nicht, dann kannst Du mit mehreren MOVE-Blocks von DB8.DBB2..DBB9 zu PA.. kopieren.
Harald