Zähler > 50000

hi,
wie wäre es denn damit :

u #signal
fp #flanke
= #ergebnis

L 1
L #wert
+D
t #wert

u #ruecksetzen

spbn rs

L 0
t #wert

rs:nop 0



hab aber nicht so riesige ahnung vom step7 programmieren...



ach ja, #signal; #flanke, #ergebnis also bool deklarieren und #wert als DINT
 
hi,
wie wäre es denn damit :

u #signal
fp #flanke
= #ergebnis

L 1
L #wert
+D
t #wert

u #ruecksetzen

spbn rs

L 0
t #wert

rs:nop 0



hab aber nicht so riesige ahnung vom step7 programmieren...



ach ja, #signal; #flanke, #ergebnis also bool deklarieren und #wert als DINT


fast...

um den "zähler" muss noch ein sprung, sonst wird in jedem zyklus erhöht.
lade und transfer aktionen inetessieren sich nicht für das VKE...


u #signal
fp #flanke
spbn CNT1

L 1
L #wert
+D
t #wert
CNT1: nop 0


u #ruecksetzen
spbn rs
L 0
t #wert
rs:nop 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ottopaul.

Hier mal ein Beispiel.

Code:
      U     E    126.0 // Das zu zählende Signal
      FP    M    200.0
      U(    
      L     MD   210
      L     L#5000 // Begrenzung auf 5000 Stück
      <D  
      )     
      SPBN  Ncou
      L     MD   210
      +     L#1
      T     MD   210
Ncou: NOP   0
      U     E    126.1 // Siganl zum rücksetzen
      SPBN  Nres
      L     0
      T     MD   210
Nres: NOP   0

Ich hofe es ist verständlich. Bei fragen einfach melden.
 
fast...

um den "zähler" muss noch ein sprung, sonst wird in jedem zyklus erhöht.
lade und transfer aktionen inetessieren sich nicht für das VKE...


u #signal
fp #flanke
spbn CNT1

L 1
L #wert
+D
t #wert
CNT1: nop 0


u #ruecksetzen
spbn rs
L 0
t #wert
rs:nop 0


stimmt, hatt ich glatt vergessen das mit dem vke

aber man kann es auch mit einer variablen weniger lösen ( die flane fällt weg ) :


u #signal
spbn CNT1

L 1
L #wert
+D
t #wert
CNT1: nop 0


u #ruecksetzen
spbn rs
L 0
t #wert

r#signal

oder hat einer der erfahrenen user was gegen die methode des rücksetzten auszusetzen?

bin selber noch am "lernen" des programmierens, deswegen auch der ein oder andere fehler...
 
Du brauchst die Flanke sonst wird solange jeden Zyklus hochgezählt solange das #Signal true ist.

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das hängt davon ab wie und wo "#signal" gemacht wird.

Wenn signal mit einer = Zuweisung irgendwo über mehrer Zyklen auf TRUE geschrieben wird, zb eine Taste oder eine Lichtschranke, dann nützt dir das "R #Signal" herzlich wenig weil es im nächsten Zyklus wieder "TRUE" sein wird...

abgesehen davon muss auch vor deine R Anweisung noch eine VKE=1. alos zb:

SET
R #Signal


Die Flanke kannst du dir nur sparen wenn du sicherstellen kannst das "#signal" bereits eine "flanke" ist bzw. nur einen Zyklus lange da ist.

ich würde die flankenbildung in beiden fällen drin lassen, wenn irgendso ein held später meint er muss im programm rumpfuschen, und "#signal" dann plötzlich keine flank mehr ist...

Wenn du zeilen sparen willst, dann kannst du auf die "nop 0" verzichten, anstatt von denen kann da auch eine anweisung stehen.

oder du packst das reseten auch noch mit ein den zähler rein damit du nur noch einmla "T zähler" da stehen hast.

solche sachen mache ich in standartbausteinen die zukünftig eine blackbox darstellen sollen, aber in normalem code würde ich aufgrund der lesbarkeit lieber ein paar zeilen mehr stehen lassen...
 
Die Flanke kannst du dir nur sparen wenn du sicherstellen kannst das "#signal" bereits eine "flanke" ist bzw. nur einen Zyklus lange da ist.

hi markus,

aber durch das rücksetzten am ende des codes von "#signal" ist doch automatisch gewehrleistet das das signal nur einen zylus lang ansteht oder?
und somit würde auch bei dauer "true" nur einmal gezählt...
 
hi markus,

aber durch das rücksetzten am ende des codes von "#signal" ist doch automatisch gewehrleistet das das signal nur einen zylus lang ansteht oder?
und somit würde auch bei dauer "true" nur einmal gezählt...


der ob läuft zyklisch --> endlosschleife

kleines beispiel warum es nicht geht:


erstes netzwerk ob1:
U Lichtschranke
= signal



dein ob1 ruft irgendwann einen baustein auf in dem steht

u signal
spbn
blabla
...sieht oben


danach schreibtst du

SET
r signal


dann ist signal ab hier IMMER FALSE bis zur nächsten zuweisung
und die ist in dem fall im OB1, und da kannst du hier setzen und rücksetzen soviel du willst, solange die Lichtschranke belegt ist, ist signal=true und wenn sie frei ist, dann ist es eben false...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
zähler > 50000

hallo, welche antwort ist denn nun ok? und funktioniert. aussderdem soll der bis 50000 gehen und nicht bis 5000.
ist ja super, dass sich schon viele gedanken gemacht haben.
danke...
 
Code:
      U     E      1.0                  //reset
      FP    M      1.0
      L     L#0
      SPB   res
      U     E      1.1                  //zähle plus
      FP    M      1.1
      SPBN  end
      L     L#1
      L     DB1.DBD0
      +D    
res:  T     DB1.DBD0
end:  NOP   0
 
Code:
      U     E      1.0                  //reset
      FP    M      1.0
      L     L#0
      SPB   res
      U     E      1.1                  //zähle plus
      FP    M      1.1
      SPBN  end
      L     L#1
      L     DB1.DBD0
      +D    
res:  T     DB1.DBD0
end:  NOP   0

die flanke beim reset muss nicht sein.

U E 1.0 //reset
L L#0
SPB res
U E 1.1 //zähle plus
FP M 1.1
SPBN end
L L#1
L DB1.DBD0
+D
res: T DB1.DBD0
end: NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die flanke beim reset muss nicht sein.

Ja die flanke muss nicht sein aber wenn du gleich wieder Zählen willst auch wenn Reset längere Zeit ansteht (zb durch Taster) dann brauchst du die flanke. Wenn du den Zähler so lange auf Null halten willst wie du die Resettaste drückst dann brauchst du natürlich keine Flanke.

godi
 
Zurück
Oben