Impulsstoß für Verarbeitung

Kinkyway

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

ich hänge jetzt schon 2 Tage an dem Problem, dass ich einen Stoß erzeugen möchte bzw. genauer gesagt soll eine Zeit ablaufen, wenn diese abgelaufen ist soll in diesem Zyklus eine Schiebeoperation ausgeführt werden. (durch Sprungbedingung die prüft ob Timer abgelaufen ist) Wenn diese Schiebeoperation abgearbeitet ist soll das Spiel von Neuem beginnen. D.h. wieder die Zeit ablaufen und dann die Schiebeoperation.

Wenn ich die Geschichte mit einem Taster, den ich manuell betreibe durchführe, funktioniert alles nach meiner Zufriedenheit. Aber wenn ich ein Zeitglied verwende geht es gar nicht, nur ein Durchlauf, oder läuft wie wild die Ganze Zeit durch.

Gibts es da irgendwie geschickte Möglichkeit sowas zu realisieren?

Oder ist die Herangehensweise falsch? Kann man eine zyklische Bearbeitung (z.b. alle 5 sek) ev. auch anderes steuern außer mit Timern und Sprungoperationen?

Danke und sonnige Grüße,

Kinkyway
 
Das muss auch mit einem Timer gehen.
Wahrscheinlich hast du irgendwo einen Fehler drin.
Stell mal deinen Code hier rein.
Alternativ könntest du auch den Taktmerker verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Öhm ja...konnte es selbst kaum glauben, aber nun geht es. Trotzdem ist die Programmierung alles andere als schön. Da gibts bestimmt einiges was man besser machen könnte. Ich stell es deshalb ma rein.

Ich habe mir das "Knight Rider"-Lauflicht mit 3 laufenden Lichtern gewählt um die verschiedenen Sachen zu üben. Da kommt vieles drinne vor was man als Anfänger mal ausprobieren sollte. Vergleicher, Sprünge, Zeiten, Schieberegister, DBs und so weiter. Fand das ganz gut. Vor allem weil man am ende was sehen kann auch ohne einen speziellen Trainingsarbeitsplatz zu haben ;-)

gibts dafür einen Trick oder muss ich jedes NW einzeln reinkopieren?

Code:
NW1:
      U     M    124.7
      S     M    124.6
      R     M    124.7
NW2:
      U(    
      UN    M    133.3
      L     S5T#250MS
      SE    T      1
      U     M    124.6
      R     T      1
      NOP   0
      NOP   0
      U     T      1
      )     
      =     M    133.3
      U     M    133.3
      S     M    124.5
NW3:
  UN    M    124.5
      SPB   pos1
NW4:
      S     M    124.7
NW5:
 
      L     DB1.DBW   12
      L     DB1.DBW   10
      <I    
      =     M     50.0
NW6:
  UN    M     50.0
      SPB   pos2
NW7:
 
      L     DB1.DBW   12
      L     1
      +I    
      T     DB1.DBW   12
NW8:
      L     DB1.DBW    6
      SLW   1
      T     DB1.DBW    6
      T     AW   124
pos2: NOP   0
 
NW9:
    U     M     50.0
      SPB   pos3
NW 10:
      L     DB1.DBW    6
      SRW   1
      T     DB1.DBW    6
      T     AW   124
NW11:
      L     DB1.DBW   12
      L     1
      +I    
      T     DB1.DBW   12
pos3: NOP   0
 
NW12:
    L     DB1.DBW   12
      L     DB1.DBW   14
      ==I   
      =     M    115.1
NW13:
      UN    M    115.1
      SPB   pos4
NW14:
      L     0
      T     DB1.DBW   12
      L     7
      T     DB1.DBW    6
      T     AW   124
NW15:
pos4: NOP   0
pos1: NOP   0
      R     M    124.5
      R     M    124.6


DB1:
Code:
DB_VAR INT 0 vorläufige Platzhaltervariable 
+2  Vergleichswert INT 2750  
+4  Test BOOL FALSE  
+6  Knight WORD W#16#7  
+8  Anzahl WORD W#16#1  
+10 Wert WORD W#16#5  
+12 Wert2 WORD W#16#0  
+14 wert3 WORD W#16#10
 
Zuletzt bearbeitet:
und gleich noch ma eine andere Frage, nun möchte ich die fest eingestellte Zeit des Timers durch eine Analogeingabe steuern.

Dazu steuere ich mit nem Poti die Spannung am Analogeingang, das ganze normiere ich dann ein und habe eine einstellbarkeit von 0-10000.

Kann ich mit normierten Analogwort direkt den Timerwert festsetzen? der hängt sich nämlich immer auf ;-)


oder muss ich das irgendwie auf dieses s5t#-format trimmen?


Nachtrag: Hmm mist, habe dazu gerade was in der SuFu gelesen ;-) ich arbeite mich da erst mal durch...also is die Frage hier erst ma hinten angestellt....Beitrag löschen geht ja nich...
 
Zuletzt bearbeitet:
und gleich noch ma eine andere Frage, nun möchte ich die fest eingestellte Zeit des Timers durch eine Analogeingabe steuern.

Dazu steuere ich mit nem Poti die Spannung am Analogeingang, das ganze normiere ich dann ein und habe eine einstellbarkeit von 0-10000.

Kann ich mit normierten Analogwort direkt den Timerwert festsetzen? der hängt sich nämlich immer auf ;-)


oder muss ich das irgendwie auf dieses s5t#-format trimmen?


Nachtrag: Hmm mist, habe dazu gerade was in der SuFu gelesen ;-) ich arbeite mich da erst mal durch...also is die Frage hier erst ma hinten angestellt....Beitrag löschen geht ja nich...

Guckst du hier: http://www.sps-forum.de/showthread.php?t=2942

Oder du nimmst einen timer aus der IEC-Library, bei denen kann man die Zeit in Millisekunden angeben, braucht aber einen Instanz-DB.

PS: Du kannst dein Programm in eine AWL-Quelle umwandeln, dann aus diese Quelle kopieren, was du benötigst hier im Editorfenster einfügen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm also ich habe jetzt folgendes...funktioniert aber leider nich...schaltet auf stop.

is doch richtig die Umrechnung auf 2000hex (eigentl. dez. 8192), wenn ich den Bereich zwischen 1ms und 1000 ms (ca.) einstellen will? Oder mache ich noch etwas verkehrt?

Code:
 L     PEW  752
      ITD   
      DTR   
      L     2.764800e+004
      /R    
      L     8.000000e+003  
      *R    
      T     MD   126
      T     MW   130
      RND   
      T     MW   123
 
Hmm also ich habe jetzt folgendes...funktioniert aber leider nich...schaltet auf stop.

is doch richtig die Umrechnung auf 2000hex (eigentl. dez. 8192), wenn ich den Bereich zwischen 1ms und 1000 ms (ca.) einstellen will? Oder mache ich noch etwas verkehrt?

Code:
 L     PEW  752
      ITD   
      DTR   
      L     2.764800e+004
      /R    
      L     8.000000e+003  
      *R    
      T     MD   126
      T     MW   130
      RND   
      T     MW   123

Was genau machst du???
Gehst du dann mit MW123 an den Timer?
Das geht so nicht, sie dir nochmal die FAQ an. Da geht es nicht um das Umrechnen, sonder darum das richtige Format für S5Time zu erstellen.
2000Hex heißt, Sekundenbereich, also 1 Sekunde, 2 Sekunden ...
S5-Timer haben 10ms als kleinstes Delta.
 
jo mit dem gehts aufn timer...

hmm und mein anliegen muss es doch jetzt sein, den wert der analogeingabe auf einen bestimmten Wert zu bekommen, der der s5 time entspricht, oder?

d.h. wenn ich einen Bereich von 100ms bis 1sek haben will, dann muss des ne Zahl zw. 1000hex und 2000hex als s5t sein mit der ich letztendlich den Timer anspreche, oder?
 
ja habe ich...ich habe hier so eine cou 313c mit integrierten Ein-/Ausgängen. Die sind da so vorgeschrieben.

Das mit dem pew 752 passt.
 
Hallo

Simatic-Timer decken nur den Bereich von 10ms bis 9990 Sekunden ab. Für Deinen Fall würde sich der Einfachheit halber folgende Berechnung eignen (Zeitbereich 10...9990 ms):

L PEW 100 // Analogeingang
ITD
DTR
L 2.764800e+004
/R
L 9.990000e+002
*R
RND
ITB
T MW 124 // Berechneter Zeitwert

Simatic-Timer bestehen aus einer BCD-Konstanten (die rechten drei Nibbles im Wort) sowie einer Zeitbasis (rechte zwei Bits des äussersten linken Nibbles: 00=10ms, 01=100ms, 10=1000ms, 11=10000ms).

In der Hilfe von Simatic-Manager unter dem Begriff S5TIME steht das auch.

Markus
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wunderbar MarkusP210,


hat einwandfrei funktioniert! Hab nur den Zeitbereich auf 10 ms bis 990 ms angepasst, damit ich max 1 sek warten muss.

Schaut gut aus und lässt sich auch sauber regulieren.

Danke dir! ;-)
 
Zurück
Oben