# Zähler vergleichen



## apolo (19 Februar 2009)

Hallo

ich hab folgendes Problem

ich hab einen eingang 1 auf dem 10 mal am tag ein signal ankommt (zeitschaltuhr) dieser eingang hab ich auf einen zähler (Z1) gesetzt

der zählt auch wunderbar hoch! nun würde ich gerne diesen wert in der SPS
mit einem fest eignestellten wert vergleichen!

so soll z.b. wenn der eingang das erste mal kommt ein ausgang 1(oder ein merker1) geschaltete werden wenn zum 2 mal einen Ausgang 2(merker2)..... usw....

bin noch net so ganz fitt in s7 und das soll ein projekt für meinen wintergaten werden! 

das proble was ich hab ich habe am zähler einen Word ausgang und die vergleicher haben ja einen int eingang!

Programieren kann ich bis jetzt auch nur in FUP

und das ganzs ist in einer C7


----------



## vierlagig (19 Februar 2009)

das ist eher ein fall für SPL statt einen zähler ... aber es geht auch mit dem zähler:

der zähler hat einen ausgang DUAL ... da einfach ein MW dran gehangen ... fertig ist der wert für dein programm und du kannst damit vergleichen


----------



## Gebs (19 Februar 2009)

Hallo apolo,

soll immer nur ein Ausgang angesteuert werden? Dann brauchst Du auch keinen Vergleicher.
Du nimmst das MW vom Dual-Ausgang und transferierst es auf Dein AW.

Grüße
Gebs


----------



## vierlagig (19 Februar 2009)

Gebs schrieb:


> Hallo apolo,
> 
> soll immer nur ein Ausgang angesteuert werden? Dann brauchst Du auch keinen Vergleicher.
> Du nimmst das MW vom Dual-Ausgang und transferierst es auf Dein AW.
> ...


 
ich glaube nicht tim, da steht eindeutig ausgang eins und zwei

0000
0001
0010 - bis hier her ok
0011 - schon scheiße
0100 - wieder jut


 und das ganze AW deswegen belegen? ich glaub es hackt.


----------



## Gebs (19 Februar 2009)

@VL: Ist mir gerade auch eingefallen, war nen Schnellschuss. Leider daneben


----------



## OHGN (19 Februar 2009)

Das Problem was er offensichtlich hat ist, dass der Zählerausgang als Word deklariert ist. (versteh' eigentlich auch nicht was das soll)


			
				apolo schrieb:
			
		

> das proble was ich hab ich habe am zähler einen Word ausgang und die vergleicher haben ja einen int eingang!
> 
> Programieren kann ich bis jetzt auch nur in FUP


 
@apolo: Schalte die Typprüfung von Operanden ab, dann funktioniert das.

Im KOP/FUP-Editor unter Extras-> Einstellungen-> Reiter KOP/FUP das Häkchen bei "Typprüfung von Operanden" rausnehmen!


----------



## vierlagig (19 Februar 2009)

OHGN schrieb:


> Das Problem was er offensichtlich hat ist, dass der Zählerausgang als Word deklariert ist. (versteh' eigentlich auch nicht was das soll)
> 
> 
> @apolo: Schalte die Typprüfung von Operanden ab, dann funktioniert das.
> ...


 
der OHGN isn Fuchs 

ich würd die typprüfung anlassen und das word in eine INT MOVEn


```
*
      L     "WORD_WERT"
      T     "INT_ZAHL"
      NOP   0
```


----------



## OHGN (19 Februar 2009)

Klar, geht natürlich auch.
Es ist nur so, dass ich diese Typprüfung sowas von überflüssig finde...
weiß garnicht vor welchem "Unheil" mich dieser Mist bewahren soll.


----------



## vierlagig (19 Februar 2009)

OHGN schrieb:


> Klar, geht natürlich auch.
> Es ist nur so, dass ich diese Typprüfung sowas von überflüssig finde...
> weiß garnicht vor welchem "Unheil" mich dieser Mist bewahren soll.


 
jemanden, der seit gefühlten 50 jahren proggt, so wie du, kann sie vor nichts schützen ... einen anfänger bewahrt sie davor ausversehen den falschen block einzusetzen

bsp: dword schieben und doch nur den block SHL_W ausgewählt - die ergebnisse sind komisch und landen dann hier im forum


----------



## vierlagig (19 Februar 2009)

in AWL is man da flexibler

z.b.:


```
*
      L     Z      1
      L     3
      ==I   
      SPBN  end
      S     A      0.2
      R     A      0.1
end:  NOP   0
```
 
oder


```
*
      L     Z      1
      SPL   more
      SPA   zero
      SPA   firs
      SPA   seco
      SPA   thir
more: SPA   end
zero: S     A      0.0
      R     A      0.3
      SPA   end
firs: S     A      0.1
      R     A      0.0
      SPA   end
sec:  S     A      0.2
      R     A      0.1
      SPA   end
thir: S     A      0.3
      R     A      0.2
end:  NOP   0
```
 
auch schön:


```
*
      U     "RESET"
      SPBN  shif
      L     1
      T     AB     0

shif: U     "TRIGGER"
      FP    "HELPFLAG"
      SPBN  end
      L     AB     0
      SLW   1
      T     AB     0
end:  NOP   0
```
 
AWL is schon was feines


----------



## OHGN (19 Februar 2009)

vierlagig schrieb:
			
		

> AWL is schon was feines


Ja, aber wer prüft den Operandentyp? :s3:


----------



## dtsclipper (19 Februar 2009)

Die letzte Lösung von 4L gefällt mir am besten...

Was aus einer einfachen Frage werden kann...


----------



## apolo (19 Februar 2009)

Super danke euch für die extrem schnelle antwort 

da hätte ich eigendlich auch drauf kommen können 

funktioniert super!!!


----------



## vierlagig (19 Februar 2009)

dtsclipper schrieb:


> Die letzte Lösung von 4L gefällt mir am besten...


 
mir nich, hier muß noch unbedingt indirekt adressiert werden, ansonsten ist das zu unflexibel


----------



## dtsclipper (19 Februar 2009)

```
*
      U     #RESET
      SPBN  shif
      L     1
      T     #OUTPUTWORD

shif: ON    #TRIGGER
      O     #HELPFLAG
      SPB  end
      L     #OUTPUTWORD
      SLW   1
      T     #OUTPUTWORD

      SET
      S     #HELPFLAG
end:  NOP   0

      ON    #TRIGGER
      R     #HELPFLAG
```

So in etwa?


----------



## Gerri (19 Februar 2009)

vierlagig schrieb:


> in AWL is man da flexibler
> 
> auch schön:
> 
> ...


 

Vorsicht wenn du die anderen Ausgangs-Bits nutzt!! Die werden dann auch verschoben.


----------



## apolo (19 Februar 2009)

ich hab die ganz einfache variante genommen und habs einfach den Dual mit einem MW belegt und so gehts hört ich sonst auch alles super an aber für das wofür ich es brauche reicht es so absolut 

vielen vielen dank euch allen 

Mfg
Thomas


----------



## OHGN (19 Februar 2009)

Das geht aber nur wenn Du die Operandentypprüfung abgeschaltet oder das MW in der Symboltabelle nicht deklariert hast.
Letzteres finde ich weniger schön.


----------



## vierlagig (19 Februar 2009)

dtsclipper schrieb:


> So in etwa?


 
mit dir müssen wir irgendwann noch nen begrifflichkeiten-grundkurs machen

nicht lokal sondern indirekt! so mit pointer und dem ganzen struz


@gerri: das weiß ich, aber vielleicht sind es ja sogar 8 ausgänge, die er schalten will ... ansonsten hilft ein variable und eine w verknüpfung weiter


----------



## Gerri (19 Februar 2009)

daß du das weisst ist mir schon klar, es geht ja darum dass das apolo auch berücksichtigt und nicht einfach nur was übernimmt was er nicht komplett nachvollzogen hat.


----------



## apolo (19 Februar 2009)

OHGN schrieb:


> Das geht aber nur wenn Du die Operandentypprüfung abgeschaltet oder das MW in der Symboltabelle nicht deklariert hast.
> Letzteres finde ich weniger schön.


hmmm..

also das MW hab ich in der Symboltabelle aber deklariert  ohne mag ich das mal sowas von garnet :-D

an der Operandentypprüfung hab ich eigendlich nix verstellt... sollte also so stehen wie es beim installieren normal ist... aber es geht  aber ich werd mir die Operandentypprüfung mal anschauen wie die ausschaut... (habs heute morgen nur schnell auf dem Laptop auf der Arbeit getestet.... kann gut sein das es da ausgeschaltete ist...) bin jetzt zu hause und werds mal versuchen


----------



## dtsclipper (19 Februar 2009)

vierlagig schrieb:


> mit dir müssen wir irgendwann noch nen begrifflichkeiten-grundkurs machen
> 
> nicht lokal sondern indirekt! so mit pointer und dem ganzen struz



Jetzt mal ehrlich für das bisschen ist indirekt doch etwas übertrieben.

Den Grundkurs nehme ich gerne, bin aber zur Zeit noch in Osteuropa unterwegs.

grüßle!


----------



## vierlagig (19 Februar 2009)

dtsclipper schrieb:


> Jetzt mal ehrlich für das bisschen ist indirekt doch etwas übertrieben.


 
sinn und unsinn mal dahin gestellt ... für bis zu 32 ausgänge:


```
*
// TRIGGER ABFRAGEN
      U     #xTrigger
      FP    #xHelpFlag
      SPBN  end
 
// AR2 sichern
      TAR2  #dAR2Temp
 
// AR1 berechnen, also erst das BYTE
      L     #iOutByte
      SLD   3
// dann die bitnummer noch dazu
      L     #iOutFirst
      +D    
      LAR1  
// und noch ne Sicherheitskopie
      TAR1  #dAR1Temp
 
// AR2 mit der Adresse eines DWords versorgen
      LAR2  P##dTemp
 
// den Status der Ausgänge ins DWord schreiben
      L     #iOutNumber
nex1: T     #iLoopCount
      U     A [AR1,P#0.0]
      =      [AR2,P#0.0]
      +AR1  P#0.1
      +AR2  P#0.1
      L     #iLoopCount
      LOOP  nex1
 
// maximal möglichen wert errechnen
      L     #iOutNumber
      +     -1
      L     1
      SLD   
      L     #dTemp
      >D    
      SPBN  nore

// reset
      L     1
      T     #dTemp
      SPA   writ

// oder vorhandenen wert
nore: L     #dTemp
      SLD   1
      T     #dTemp
writ: LAR1  #dAR1Temp
      LAR2  P##dTemp
 
// den Status des DWORDS auf die Ausgänge schreiben
      L     #iOutNumber
nex2: T     #iLoopCount
      U      [AR2,P#0.0]
      =     A [AR1,P#0.0]
      +AR1  P#0.1
      +AR2  P#0.1
      L     #iLoopCount
      LOOP  nex2
 
// AR2 zurücksichern
      LAR2  #dAR2Temp
end:  SET   
      SAVE
```
 
*ROFL*


----------



## dtsclipper (19 Februar 2009)

DAS ist der Unterschied zwischem dem Ingenieur und dem stattlich geprüften Techniker...

4L, ich gebs zu, auf den ersten Blick blick ich nicht durch.

Da bist Du mir über, muß ich anerkennen.

Was macht das Programm noch mal ?

dtsclipper...


----------



## OHGN (19 Februar 2009)

Ja, der Kollege vierlagig muss sich ja nun aus bekannten_Gründen mit seinen Programmierkünsten verstärkt hier im Forum austoben.


----------



## vierlagig (19 Februar 2009)

ich hab mal kommentare eingepflegt ...

jeder weiß, dass das blödsinn ist, aber man kann es sich halt auch ordentlich schwer machen - ja, sogar nicht nur sich!


----------



## Ralle (19 Februar 2009)

Seid ihr noch ganz dicht, so einen Mammut-Thread aus dieser simplen Frage zu machen? 

In Allgemeinen lese ich alle Threads, damit nicht irgendwann wieder wer rummeckert, daß er schlecht behandelt wurde. Aber manchmal geht es einfach zu weit, tut mir leid. Geht in den Stammtisch und ballert euch da euren Wundercode um die Ohren! :twisted: Für mich liegt das langsam nah am Spam!


----------



## BPlagens (19 Februar 2009)

Täusche ich mich oder bleibt der Zähler nicht irgend wann "stehen"?
So aus dem Bauch raus bei 999?
Sprich man braucht eine Funktion die ihn wieder auf 0 stellt?

Lange her das ich einen Zähler verwendet habe - glaube mich aber daran erinnern zu können das ich damals am R-Eingang einen Vergleicher hatte der den Zähler bei einen bestimmten Wert wieder resetet.

Hoffe ich blamiere mich nicht gerade!


----------



## zotos (19 Februar 2009)

dtsclipper schrieb:


> ...
> Den Grundkurs nehme ich gerne, bin aber zur Zeit noch in Osteuropa unterwegs.
> ...



Hallo dtsclipper,
das trifft sich gut. Der vierlagig wohnt ja in Osteuropa ;o)

Und bei so einer Aufgabe zu Pointern ist oversized und zeugt nur von Langeweile und nicht von Können.

PS: Sorry 4L ;o)


----------



## vierlagig (19 Februar 2009)

zotos schrieb:


> Und bei so einer Aufgabe zu Pointern ist oversized und zeugt nur von Langeweile und nicht von Können.


 
*ACK* ...unterfordert...


----------

