Step 7 MW von Zähler springt ungewollt 6Zahlen weiter.

Lucas39

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe einen Zähler der in 15min schriten bis 96 (24h) zählt. Ab einer bestimmten Uhrzeit z.B. 5:00 (MW.. = 20) oder 14:30 (MW.. = 58) sollen dann verschiedene Ausgänge gesetzt werden.
dies möchte ich mit mehreren Vergleichern: CMP ==I realisieren. Die "Uhr" läuft so wie sie soll, der Taktgeber gibt alle 15 min ein Signal aus und der Zähler gibt den Wert MW24 aus.

Wenn ich nun diesen Wert vergleichen möchte springt er regelmäßig um 7 stellen weiter.
MW24 wird in keinem anderen Baustein oder Funktion verwendet.

Woran liegt das und was kann ich dagegen unternehmen?
Bitte berücksichtigt das ich ein Anfänger bin.


WhatsApp Image 2021-03-05 at 13.27.18(2).jpgWhatsApp Image 2021-03-05 at 13.27.18.jpg


LG Lucas
 

Anhänge

  • WhatsApp Image 2021-03-05 at 13.27.18(1).jpg
    WhatsApp Image 2021-03-05 at 13.27.18(1).jpg
    50,2 KB · Aufrufe: 30
Moin Lucas39,

das liegt daran, dass Du den Zähler nicht mit einer Flanke (1 SPS-Zyklus), sondern mit einem Impuls von 500ms aktivierst. Du hast doch schon eine Flanke (N). Gib die doch direkt auf den Zähler. Warum der Impuls. Wenn in der Impulszeit 7 SPS-Zyklen durchlaufen, wird halt insgesamt eine 7 hinzugezählt.

VG

MFreiberger
 
Irretiert dich da vielleicht nur die Darstellung?

Am Zähler ist sie in Hex am Vergleicher in Int. Hex 10 ist nunmal 16...
 
Außerdem ist es auch empfehlenswert mit Symbolik zu arbeiten und nicht nur mit den direkten Adressen. Ist ganz schön mühselig sich sowas anzuschauen, Symbolik macht die Sachen so viel angenehmer und schneller lesbar. Man kann auch über die Verwendung von Merkern streiten, wenn man neu anfängt sollte man sich so etwas aber meiner Meinung nach gar nicht mehr angewöhnen. Das ganze lieber über DBs, IDBs oder Lokalvariablen abbilden.
 
Oh, oh, oh!
Immer diese Verwirrung mit dual, dezimal, hexadezimal, BCD.
Wandle die DezimalZahl 10 in BCD, addiere (dezimal) eine 1 drauf und wandle sie wieder in dezimal und schwupps, schon hast Du den Sprung, dass plötzlich 17 daraus geworden ist.

Verwirrend sind natürlich die Bezeichnungen DUAL und DEZ. Mit DEZ ist nicht dezimal, sondern BCD gemeint und mit DUAL ist nicht dual, sondern dezimal gemeint.
Und bei BCD gibt es die "PseudoTetraden" (10..15), die in BCD gar nicht auftreten dürfen, sondern "übersprungen" werden.
 
Etwas überschnell gewesen ? :ROFLMAO::sw20:

Code:
Dez:             Hex:              BCD:
16 (0001_0000) = 10 (0001_0000) =  [COLOR="#FF0000"]16 (0001_0110)[/COLOR]
Ja, warst Du wohl. ;)

Es ist: 0001_0000 binär = 16 dez = 10 hex (16#10) = 10 BCD (C#010)

Die Codierung der Ziffern im BCD-Format ist genau wie die Codierung der Ziffern in Hex, nur der Wertebereich ist auf den Wertebereich der Dezimalziffern 0..9 beschränkt. Die in Hex möglichen Werte 16#A..16#F sind in BCD nicht erlaubt ("Pseudotetraden").

Im Beitrag #1 auf den Bildern sichtbar:
Der Zähler gibt den Zählerstand am Ausgang "DEZ" im BCD-Format ("C#010") in das MW24 aus. Der Zählerstand ist also 10 dez.
Im nächsten Netzwerk wird beim Vergleicher der Wert des MW24 (C#010) dezimal angezeigt: 16 (!). Wenn man sich den Inhalt des MW24 hexadezimal oder als BCD-Wert ansehen würde, dann würde 16#10 oder C#010 angezeigt.


Ein S5/S7-Zähler zählt so:
Code:
Stand :   Ausgang DUAL   :   Ausgang DEZ
------+------------------+--------------------------
   0  :   0 dez = 16#00  : C#000 = 16#00 =  0 dez
   1  :   1 dez = 16#01  : C#001 = 16#01 =  1 dez
   2  :   2 dez = 16#02  : C#002 = 16#02 =  2 dez
...
   9  :   9 dez = 16#09  : C#009 = 16#09 =  9 dez
  10  :  10 dez = 16#0A  : C#010 = 16#10 = 16 dez
  11  :  11 dez = 16#0B  : C#011 = 16#11 = 17 dez
...
 999  : 999 dez = 16#3E7 : C#999 = 16#999 = 2457 dez
Der Zähler kann/darf nur bis 999 (dez) zählen, weil er den Zählerstand auch im BCD-Format ausgeben können muß. BCD-Format: Je BCD-Ziffer braucht man genau 4 Bit, dann braucht man noch (mindestens) 1 Bit für das Vorzeichen, und in 15 Bit kann man nur 3 BCD-Ziffern unterbringen: 3 x 4 Bit = 12 Bit, Rest 3 Bit. 3 Bits reichen aber nicht für eine weitere BCD-Ziffer 0..9. Deshalb maximal ausgebbar: C#999 ( = 16#999), deshalb maximaler Zählerstand 999 dez.

Harald
 
Zurück
Oben