Animation

ross

Level-1
Beiträge
44
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forumgemeinde,

es geht um mein übungsprojekt - eine kleine Animation (WinCC Flex08).
4 Bilder (Grafische EA-Feld) sollen sich der Reihe nach in einem Takt abwechseln.
Ich habe es mir so vorgestellt: der Ein/Aus Schalter setzt mir das erste Bit und im Taktrhytmus wird es weitergeschoben - soweit so gut, nur jetzt wollte ich es mit Grafiklisten ablaufen lassen und da ist wieder das nächste Problem aufgetaucht - bei Grafiklisten darf nur ein Bit der gesetzten Variablen aktiv sein.
Nur bei meinem Prog. laufen die Bits das ganze Byte durch und ab 0.3 wird wieder ein neues Bit gesetzt (weil ich nur 4 Bilder habe) und deswegen sind dann zwei bit aktiv.

Jetzt suche ich nach einer Lösung, bzw. Tipps wie ich die Bits, welche nach 0.3 laufen wieder zurücksetzen kann?
 

Anhänge

  • animation.bmp
    216,4 KB · Aufrufe: 47
Bin grade nicht im Büro und kann das nicht nachprüfen...

Soweit ich mich recht erinnere, kannst Du doch die Auswahl des Elements in der Grafikliste auch an den Zahlenwert einer Variablen koppeln.

Dann änderst Du Dein Programm noch, indem Du die Bits nicht schiebst, sondern mit jedem Takt die Variable um 1 inkrementierst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bin grade nicht im Büro und kann das nicht nachprüfen...

Soweit ich mich recht erinnere, kannst Du doch die Auswahl des Elements in der Grafikliste auch an den Zahlenwert einer Variablen koppeln.

Dann änderst Du Dein Programm noch, indem Du die Bits nicht schiebst, sondern mit jedem Takt die Variable um 1 inkrementierst.

meinst du der takt zählen und Sprungleiste einsetzen?
 
so, ich habe es so gelöst, für andere Lösung bin ich aber dankbar

hier NW für ersten Bit:

O(
L DB1.DBW 22
L 1
==I
)
O(
L DB1.DBW 22
L 17
==I
)
= DB1.DBX 24.0

zweiten Bit:

O(
L DB1.DBW 22
L 2
==I
)
O(
L DB1.DBW 22
L 34
==I
)
= DB1.DBX 24.1
usw.....
 
Code:
UN DB1.DBX0.0  // EIN/AUS
SPB m002

U DB1.DBx6.0  // Takt
fp #H0_1
SPBN m001

// Sprung nach m002, wenn das letzte Grafikobjekt angezeigt wurde.
L DB1.DBW20
L 3
==I
SPB m002

// Variable um 1 erhöhen
L DB1.DBW20
L 1
+I
T DB1.DBW20
spa m001

// Erste Grafik anzeigen 
m002: L 0
         T DB1.dbw20

m001: nop 0

Müsste so passen.
 
Hallo Tigerente1974,
habe dein Programm probiert - bei dir werden die Bits dazugezählt nicht geschoben. s.unten
trotzdem danke.

UN E 0.0 //EIN/AUS
SPB m002
U T 1 //Takt
FP M 1.0 //Flankenmerker
SPBN m001
// Sprung nach m002, wenn das letzte Grafikobjekt angezeigt wurde.
L AB 1
L 3
==I
SPB m002
// Variable um 1 erhöhen
L AB 1
L 1
+I
T AB 1
SPA m001
// Erste Grafik anzeigen
m002: L 0
T AB 1
m001: NOP 0
 
Soweit ich mich recht erinnere, kannst Du doch die Auswahl des Elements in der Grafikliste auch an den Zahlenwert einer Variablen koppeln.

Richtig! Die Variante würde damit funktionieren, dass man das Auswahlkriterium für die Grafik in der Grafikliste an einen Zahlenwert koppelt.
Habe zur Zeit keinen Zugriff auf einen Rechner mit Step7, Du solltest aber ruhig mal schauen, ob du das im Flexible nicht so einstellen kannst. Ich denke das würde die ganze Sache am einfachsten machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tigerente1974,
habe dein Programm probiert - bei dir werden die Bits dazugezählt nicht geschoben. s.unten
trotzdem danke.
Hallo ross,
also Tigerentes Variante passt auf jeden Fall. ;)
Wenn du aber dennoch bei deiner Variante bleiben willst, musst du an folgender Stelle den Code ändern:
Code:
// ALT:
   U DB1.DBX20.3
   FN #H0_3
   S DB1.DBX20.0
 
// NEU:
   U DB1.DBX20.3
   FN #H0_3
   SPBN xxx
   L 0
   T DB1.DBW20
xxx: NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und um das Ganze abzuschließen...

Hier ein Beitrag aus dem Handbuch:
http://support.automation.siemens.c...6AV6691-1AB01-3AA0&ID=18796010&ehbid=18796010

Grafikliste projektieren
Öffnen Sie den Editor "Grafiklisten" durch Doppelklick auf den Eintrag "Grafiklisten" im Projektfenster. Durch Doppelklick auf die erste, leere Zeile im Editor legen Sie eine neue Grafikliste an.
Klicken Sie in die Spalte "Auswahl" und öffnen Sie die Klappliste.
Wählen Sie den Ihrer Anforderung entsprechenden Bereich für die Grafikliste aus. Folgende Bereiche stehen zur Verfügung:
● Bereich (... - ...) Mit dieser Einstellung werden ganzzahligen Werten bzw. Wertebereichen einer Variablen die Grafikeinträge aus der Grafikliste zugeordnet. Die Anzahl der Grafikeinträge können Sie frei wählen. Die maximale Anzahl der Einträge ist abhängig vom verwendeten Bediengerät.
Sie legen einen Standardwert fest, der dann angezeigt wird, wenn der Wert der Variablen außerhalb des definierten Bereichs liegt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine weiter mögliche Variante: Taktmerker aus der SPS (z.Bsp. 500ms-Takt). An diesen Taktmerker ein Script im WinCCFlex binden, welches bei Wertänderung eine interne Variable aufaddiert und bei Erreichen des Max-Vertes wieder auf 0 setzt.
 
so ich habe die Variante von Tigerente probiert, mit PLCSIM läuft alles wunderbar, aber am echtem CPU nicht - die Bits werden nicht der Reihe nach hochgezählt und alles läuft nicht im Takt. Kann mir Bitte jemand erklären warum?


UN DB1.DBX 0.0 //EIN/AUS
SPB m002 //Sprung nach m002 bei Aus
U T 1 //Takt
FP #HO_1 //Flankenmerker
SPBN m001

// Sprung nach m002, wenn das letzte Grafikobjekt angezeigt wurde.
L DB1.DBB 1
L 9 //Anzahl der Bilder die Animiert werden sollen
==I
SPB m002

// Variable um 1 erhöhen
L DB1.DBB 1
L 1
+I
T DB1.DBB 1
SPA m001

m002: L 0
T DB1.DBB 1

m001: NOP 0
 
so ich habe die Variante von Tigerente probiert, mit PLCSIM läuft alles wunderbar, aber am echtem CPU nicht - die Bits werden nicht der Reihe nach hochgezählt und alles läuft nicht im Takt.
Wie wird denn dein Takt erzeugt?
Zeige doch mal bitte wie du die T1 startest.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
#H0_1 wird ja eine Lokalvariable sein.
Ist H0_1 evtl. eine TEMP-Variable?!?
Da Temp-Variablen am Zyklusende nicht gespeichert werden können, ist damit keine Flankenauswertung möglich.

Falls ja: Merker nehmen oder einen FB benutzen in dem #H0_1 eine STAT-Variable ist.
 
Zurück
Oben