Auswertung eines Zählwerts

4nD1

Level-2
Beiträge
497
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe gerade eine schleife mit einem normalen Zähler programiert der alle 15 min einen Wert hoch zählt. Wollen damit eine Stromzähler simulieren den wir später an der Stelle einbauen wollen. Der Zählwert soll dann über ein Energieleitsystem aufgezeigt werden und wird über einen OPC-Server auf dieses Leitsystem übertragen.

Nun habe ich das Problem das der Zählwert in Dual (HEX Format) oder im Dez (BCD Format) ausgeben wird.

Nun stell ich mir die frage ob es einen Zähler gibt der das gleich in DEZ ohne BCD raus gibt. Oder einen BCD to Int oder BCD to Word umwandlung gibt.
 
Das liegt in AWL nur am Befehl:

L Z1 -> Zählerwert dezimal
LC Z1 -> Zählerwert BCD

In FUP hat der Zähler dafür zwei Beine hintenraus ;-)
 
Anderer Vorschlag:

Gleich einen eigenen Zähler programmieren, der auf INT oder DINT-Basis arbeitet!
 
Das liegt in AWL nur am Befehl:

L Z1 -> Zählerwert dezimal
LC Z1 -> Zählerwert BCD

In FUP hat der Zähler dafür zwei Beine hintenraus ;-)

Habs jetzt geändert. in S7 steht 12 im DB. Und in meinem OPC Client steht trotzdem noch 23 drin.

Hab außerdem noch den BTI Wandlung befehl in AWL gemacht und es geht trotzdem nicht so wie ich es eigentlich haben will.

Habt ihr ne IDee wie man solch eine schleife recht einfach und schnell programmieren kann und sie dann nachher auch den Wert in Dez ausspuckt. (Ich steh irgendwie auf dem Schlauch)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit welchen Datentyp hast du die Variable deklariert?

Wie wird dir das im DB angezeigt, W#16#12 oder dezimal?

Wie kommst du von 12 auf 23? 12 als BCD wären dezimal auch nur 18...

Und zur Schleife:
Schau mal in der Hilfe unter LOOP nach. Du könntest vielleicht auch genauer beschreiben was die Schleife machen soll.
 
Weiß zwar nicht, warum es eine Schleife sein muss - aber ein normales Hochzählen von Ganzzahlen geht ungefährt so:
Code:
    UN #Flanke Zählsignal //positive Flanke deines Signales
    SPB =next
    L #Zählwert   //INT, DINT 
    L 1 
    +I                //Oder +D bei DINT
    T #Zählwert
Next: Nop 0
 
Die Variable ist mit Word deklaiert und sie liegt in einem DB.

Die Varibale wird in W#16#13 momentan gezeigt.
Keine Ahnung wie das geht auf der Online Visualisierung des OPC steht halt 23 drin.

Im Prinzip soll die schleife nur eins machen. Jede 15 min am Zähler einen Zähler hochzählen. Also von 4 auf 5 und das nach 15 min. Wobei es auch nicht schlecht wäre wenn man die Zeit auch mal ändern könnte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann nimm doch den Code von Approx und häng einen Timer davor der 15min läuft.

Code:
[FONT=Courier New]    L    S5T#15M  // Kannst du auch variabel gestalten
    SE   T   1[/FONT]
    UN   T   1
    SPB =next
    L #Zählwert   //INT, DINT 
    L 1 
    +I                //Oder +D bei DINT
    T #Zählwert
Next: Nop 0
[FONT=Courier New]
[/FONT]
 
L S5T#5M // Kannst du auch variabel gestalten
SE T 29
UN T 29
SPB Next
L #Zaehlwert
L 1
+I //Oder +D bei DINT
T #Zaehlwert
Next: NOP 0

Einmal ist es nun umgesprungen aber seither tut sich nichts mehr. Woran könnte das liegen? (Kenn mich mit AWL nicht so gut aus)
 
Du musst deinen Timer natürlich wieder zurück setzen damit er neu gestartet wird. Kannst du auch gleich in deiner Schleife machen, nachdem du eins hochgezählt hast. ==> R T x .
Und du musst den Timer auch starten, also vor dem Timeraufruf U #start_bedingung.
 
Zuletzt bearbeitet:
Schau dir doch mal die Step7-Hilfe zu einem Timer an. Dort ist der Aufruf ziemlich gut beschrieben. Das wird dir denke ich weiter helfen.
 
Einmal ist es nun umgesprungen aber seither tut sich nichts mehr. Woran könnte das liegen? (Kenn mich mit AWL nicht so gut aus)

L S5T#5M // Kannst du auch variabel gestalten
SE T 29
UN T 29
SPB Next
L #Zaehlwert
L 1
+I //Oder +D bei DINT
T #Zaehlwert
R T 29
Next: NOP 0
 
Hallo

Im Beitrag 11 ist es schon geschrieben.
Der Timer muss gestartet werden.
Das heißt du brauchst ein "VKE 1"
dass der Timer überhaupt läuft.
Das muss vor L S5T.....

Gruß
Bernhard
 
Zurück
Oben