Verständnisfrage zu Zahlenformaten

brik

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

ich muss mich zum ersten Mal mit Zahlenformaten in Step7 auseinandersetzen.
Konkret möchte ich einen Zähler hochzählen lassen und seinen Zählwert binär über 8 Leuchten ausgeben lassen.

Nun finde ich an Funktionen aber jeweils nur Möglichkeiten den Zählwert als BCD auszugeben und nach meinem Verständnis bringt mich das nicht weiter, oder?

BCD ist ja nicht gleich binär. Oder verstehe ich da etwas falsch?

Wie gehe ich da am besten vor?

Software ist Step7 5.4 und Hardware ist eine S7-300 mit CPU 313C-2 DP

Danke und Grüße

Sebastian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ob BCD gleich Binär ist ist eine Frage der Auslegung, wie was angezeigt werden soll. Wenn du es so machen willst, dass bei Zähler = 0 keine Lampe leuchtet und bei Zähler = 255 alle des Ausgangsbytes, dann müßtest du erst noch den Befehl BTI zwischen "L Zähler" und "T Ausgangsbyte" schalten.
Ansonsten ... Need more Info ...

Gruß
Larry
 
Mein Programm sieht folgendermaßen aus:

Code:
 U     M    100.5
      ZV    "takt"
      BLD   101
      NOP   0
      NOP   0
      U     "256"
      R     "takt"
      L     "takt"
      T     MW     1
      NOP   0
      NOP   0

Code:
 L     MW     1
      L     255
      >=I   
      =     "256"
Code:
 O     E      0.0
      ON    E      0.0
      =     "Eins"
Code:
 U     "Eins"
      SPBNB _001
      L     MW     1
      DTB   
      T     MW     2
_001: NOP   0

Wobei ich dazu sagen muss, dass ich alles in FBS programmiert habe und der AWL auch nicht wirklich mächtig bin.

Was bezeichnet bei einer SPS den Akku?

@Larry: Ja, du hast es richtig verstanden. So soll es sein. Scheinbar habe ich aber genau das Gegenteil von dem gemacht, was du vorgeschlagen hast, oder?

Ich habe das Problem, dass ich absolut keine Ahnung davon habe, wie Zahlen in Step7 behandelt werden und was man mit ihnen machen muss um bestimmte Dinge zu erreichen. Habe da bis jetzt auch nicht wirklich Lesestoff zu gefunden.
 
Mein Programm sieht folgendermaßen aus:

Code:
 U     M    100.5   //woher kommt der?
      ZV    "takt"   //Zähler zählt nur bei Flankenwechsel!!
      BLD   101
      NOP   0
      NOP   0
      U     "256"    //ist das ein Merker nehme ich an?!
      R     "takt"   
      L     "takt"
      T     MW     1
      NOP   0
      NOP   0

Code:
 L     MW     1
      L     255
      >=I   
      =     "256"
Code:
 O     E      0.0
      ON    E      0.0
      =     "Eins"   //also immer "1"
Code:
 U     "Eins"
      SPBNB _001   
      L     MW     1
      DTB   //wandelt 32bit in BCD, wozu?
      T     MW     2
_001: NOP   0


Ist der M100.5 der Merker mit dem gezählt werden soll?
Wenn der statisch "1" ist wird da nicht viel passieren.
 
Hallo,
der AKKU ist das Arbeitsregister der CPU. Hierin steht der Wert, der gerade verarbeitet wird (u.A.).

Was sind die Variablen in """ für welche ? Ich hoffe, es sind keine TEMP-Variablen. Ansponsten wird es immer noch nicht funktionieren.

Hast dui den BTI nun schon probiert ?

Gruß
Larry
 
Woher weiß ich, ob es TEMP Variablen sind?
Ich arbeite in einem FB und habe die Symbole in der Symboltabelle definiert.

Habe dank weiterer Hilfe per PN nun eine funktionierende Lösung gefunden, die wie folgt aussieht:

Code:
 U     M    100.5
      ZV    "takt"
      BLD   101
      NOP   0
      NOP   0
      U     "256"
      R     "takt"
      L     "takt"
      T     MW     1
      LC    "takt"
      T     AB     0
      NOP   0

Code:
   L     MW     1
      L     255
      >=I   
      =     "256"

Code:
O     E      0.0
      ON    E      0.0
      =     "Eins"

Danke für die Hilfestellungen.


/edit: Hat so leider doch nicht richtig geklappt. Die Ausgabe war weiterhin BCD-kodiert. Mit Larrys Vorschlag hat es dann aber funktioniert. Der ausgegebene Zählerwert muss erst noch mittels BTI umgewandelt werden.

Code:
      U     M    100.1
      ZV    "takt"
      BLD   101
      NOP   0
      NOP   0
      U     "256"
      R     "takt"
      L     "takt"
      T     MW     1
      LC    "takt"
      T     MW     2
      NOP   0

Code:
      L     MW     1
      L     255
      >=I   
      =     "256"

Code:
      O     E      0.0
      ON    E      0.0
      =     "Eins"

Code:
      L     MW     2
      BTI   
      T     AB     0
      NOP   0


So geht es nun wie gewünscht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Woher weiß ich, ob es TEMP Variablen sind?

TEMP-Variablen erkennst du daran, dass du sie im Deklarations-Bereich TEMP des jeweiligen Bausteins deklariert hast.
Diese Variablen werden NICHT von Zyklus zu Zyklus gepuffert.
Im Gegensatz dazu Variablen, die du in einem FB im Bereich STAT deklariert hast, diese werden im Instanz-DB des FB's gepuffert (wie z.B. Merker etc.).

Nur so zur Info ...

Gruß
Larry


Ach ja ... Nachsatz : Schön, dass es funktioniert ... :)
 
Zurück
Oben