Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Laufschrift für LED-Anzeige programmieren

  1. #1
    Registriert seit
    24.09.2013
    Beiträge
    16
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Beitrag


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich hoffe hier kann mir jemand weiterhelfen.
    Ich habe eine 315-PN/DP. Daran ist mittels Profinet eine LED-Anzeige mit 8 Zeichen angeschlossen.
    Die Texte landen in einem DB. Jedes ASCI-Zeichen ist 1 Byte groß.

    Der Text soll dann als Laufschrift durchlaufen. Nach dem letzten Zeichen sollen dann 3-4 Leerzeichen folgen und dann geht der Text wieder von vorne los.

    Stehe da grade noch aufm Schlauch.
    Es wäre super, wenn ich ein paar Programmbeispiele- oder Fragmente bekommen könnte.

    Schonmal vielen Dank.

    Mfg
    Thomas
    Zitieren Zitieren Laufschrift für LED-Anzeige programmieren  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo,
    ich empfehle dir, dich dazu mit indirekter Adressierung auseinander zu setzen.
    Hier wäre ein Beitrag, der die Basics dafür recht schön erklärt : Pointer Zeiger FIFO LIFO

    Du bildest dir einen Zeiger, der auf den Anfang des Datenbereichs zeigt und liest die ersten 8 Zeichen ab da und übergibst die den PAB's / AB's.
    Nun wartest du einen Moment (Timer) und erhöhst den Pointer um eins und wiederholst das Ganze mit der Übertragung.
    Wird dein Ende-Zeiger größer als dein Datenbereich dann schreibst du deine Leerzeichen und schließlich setzt du ihn wieder auf Anfang - das Gleiche mit dem Start-Zeiger.

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    thomas1285 (05.09.2014)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.302
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Du richtest Dir einen Schiebetakt von z.B. 250ms ein (aus Taktmerkerbyte oder Timer).
    Mit jeder Taktflanke verschiebst Du den anzuzeigenden Text in einem BYTE-Array um ein Zeichen nach vorn und fügst hinten ein neues Zeichen ein. Mit dem selben Takt sendest Du die ersten 8 BYTE des Arrays zur Anzeige bzw. kopierst aus dem Array in die PROFINET-Ausgangsbytes der Anzeige (kopieren könnte man auch in jedem OB1-Zyklus).

    Alternativ kann man auch einen Pointer oder Index auf den Anfang des darzustellenden Text-Bereichs im Gesamt-Text im Takt weitersetzen und ab der gepointerten/indizierten Adresse in die Ausgangsbytes kopieren.

    In AWL oder SCL eigentlich recht einfach quick-n-dirty gecoded.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    thomas1285 (05.09.2014)

  6. #4
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.532
    Danke
    1.152
    Erhielt 1.253 Danke für 982 Beiträge

    Standard

    Bei 8 Zeichen kannst du das sogar im KOP mit einem Zähler, ein paar Vergleichern und ein paar Move-Befehlen machen.

    Den Zähler mit einem passenden Taktmerker hochzählen,
    dann Vergleich auf Wert 1 und mit Move DBB1 nach ABx.
    dann Vergleich auf Wert 2 und mit Move DBB2 nach ABX.
    ...
    Wenn Zähler = 12 -> Reset

    Für einen Einsteiger wird das wohl das Einfachste sein.

    Gruß
    Dieter

  7. Folgender Benutzer sagt Danke zu Blockmove für den nützlichen Beitrag:

    thomas1285 (05.09.2014)

  8. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.738
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Bei 8 Zeichen kannst du das sogar im KOP mit einem Zähler, ein paar Vergleichern und ein paar Move-Befehlen machen.
    Kann es sein, dass Du da was missverstanden hast?
    8 Zeichen ist die LED-Anzeige lang. Der Text selbst kann länger sein.
    Zitat Zitat von thomas1285 Beitrag anzeigen
    ... eine LED-Anzeige mit 8 Zeichen angeschlossen.

    @thomas1285,

    btw., wie lang ist denn der Text maximal?
    Und woher weißt Du, wo der Text im DB endet, wenn er nicht die maximale Länge hat?
    Gibt's ein Abschlusszeichen oder ist irgendwo die aktuelle Länge angegeben?

  9. Folgende 2 Benutzer sagen Danke zu hucki für den nützlichen Beitrag:

    Blockmove (03.09.2014),thomas1285 (05.09.2014)

  10. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.302
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Bei 8 Zeichen kannst du das sogar im KOP mit einem Zähler, ein paar Vergleichern und ein paar Move-Befehlen machen.
    Ja kann man. Und wenn man BLKMOV statt MOVE zum Umkopieren nimmt, dann gehts auch kurz für beinahe beliebig langen Text.

    Man kann den Lauftext ohne indirekte Adressierung in FUP/KOP realisieren, wenn man das Linksschieben per Umkopieren macht (2. bis letztes Zeichen des Ausgabepuffers zu 1. bis vorletztes Zeichen kopieren). Das geht ohne ANY-Pointer mit einem fest parametrierten SFC20 BLKMOV. Allerdings nur absolut adressiert, nicht symbolisch. Siehe Anhang.
    Code:
    DB9.DBB0..22 : "DB9".Ausgabetext_1 : '        Mein Lauftext! '
                                         //Ausgabetext mit 8 führende und ein abschließendes Leerzeichen
    DB8.DBB0..22 : "DB8".Ausgabepuffer
    AB100..AB107 : PROFINET-Ausgänge zu 8-stelliger LED-Anzeige
    Länge_LED_Anzeige ==> Anzahl_führende_Leerzeichen (8)
    Textlänge + Länge_LED_Anzeige ==> Anzahl_Schiebetakte (14 + 8 = 22)
    Textlänge + Länge_LED_Anzeige + 1 ==> ARRAY_Größe (14 + 8 + 1 = 23)
    ARRAY_Größe - 1 ==> Blocklänge des Schiebe-BLKMOV (22)

    Harald
    Angehängte Grafiken Angehängte Grafiken
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    thomas1285 (05.09.2014)

  12. #7
    thomas1285 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.09.2013
    Beiträge
    16
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen vielen Dank für die Hilfe!

    @PN/DP
    Das funktioniert echt super. Ein Problem habe ich aber noch. Der letzte BLK_MOVE schiebt die Daten aus dem Ausgangspuffer nicht in die PAB´s.
    Das mit dem P#A100.0 Byte 8 scheint die Steuerung nicht hinzubekommen.
    Jetzt mache ich das Umkopieren noch von Hand.

  13. #8
    thomas1285 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.09.2013
    Beiträge
    16
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    wie muss ich den Pointer anlegen, damit die Länge des Textes variabel gestaltet werden kann?
    Da muss ich ja das Byte... ( z.B. Byte 22 ) in P#DB9.DBX0.0 Byte 22 anpassen!?

  14. #9
    thomas1285 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.09.2013
    Beiträge
    16
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich muss nochmal nerven

    gibt es einen Baustein, der eine Textvariable, die aus dem WinCC kommt, in die einzelnen Zeichen zerlegt und in einem Datenbaustein als Byte speichert?
    Geändert von thomas1285 (04.09.2014 um 11:05 Uhr)

  15. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.302
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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
    Angehängte Grafiken Angehängte Grafiken
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  16. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    thomas1285 (05.09.2014)

Ähnliche Themen

  1. Laufschrift für Meldungen in WINCC7
    Von mill im Forum HMI
    Antworten: 5
    Letzter Beitrag: 19.01.2012, 14:11
  2. LED Motivationslaufband-Anzeige
    Von ToBo im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 09.08.2009, 22:48
  3. LED - Laufschrift
    Von hhoeller im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 11.02.2009, 11:48
  4. LED Anzeige
    Von Dirk LXXVI im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 10.08.2006, 22:01
  5. Laufschrift programmieren
    Von emtewe im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 26.10.2005, 14:34

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •