Bits im DB 42 zählen

tanja

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

ich brauch mal die Hilfe von euch Spezialisten.
Wir haben bei uns mehrer Maschinen alles S7-300 und S7-400 Siemens CPS, und ich brauche einen Baustein der Automatisch
Alle Bits mit dem Zustand TRUE in einem Datenbaustein Zählt.
Der Baustein hat immer die DB Nr. 42. Die Länge ist bei jeder Maschine unterschiedlich, aber es sind immer ganze Datenwörter.
Der Baustein soll dann eine OUT Variable haben in der dann die Anzahl der aktiven Bits steht.

Ich hab nicht die geringste Ahnung wie man so was Programmiert.
Ich hab jetzt nach langem lesen herausgefunden das ich mit

„AUF DB42“
„L DBLG“

wie ich die DB Länge automatisch ermitteln kann.

Aber jetzt bin ich echt ratlos. Vor allem kann der Baustein ja 100 Datenworte haben oder nur 6.

Zudem brauch ich den Datenbaustein echt dringend. Hab das ganze Wochenende mit Hilfen und grübeln verbracht.
Ich denke da brauch ich eine Schleife oder so was, aber davon hab ich gar keine Ahnung.
Hab ich bis jetzt auch noch nie benötigt.

Vielen Dank

Tanja
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt in der Standard Library auch einen "FC99 BITSUM", der kann das auch,
dann müsste man um diesen nur noch eine Schleife Basteln, Anzahl der Durchläufe mit DBLG/4 ermittelt. (Der hat als Eingang ein Doppelwort)

Mfg
Manuel
 
erst mal Danke für die 2 Tipps.

Bei beiden Varianten brauch ich eine Schleife.
Daraus ergibt sich bei mir leider das nächste Problem.
Würdet ihr mir da auch helfen?

Wenn ich das richtig sehe benötigt der FC99 ein Doppelwort.
Ich habe aber immer nur Worte, die Anzahl der Bytes lässt sich sicher durch 2 Teilen, aber eben nicht immer durch 4.

Das Beilspiel von "Volker's Hompage" wertet immer nur Byts aus. Damit würde es ja dann gehen. Nur wie bekomm ich da mein Problem mit der Schleife gelöst?
 
Eins vorweg, der FC99 lässt sich natürlich auch mit Worten oder Bytes versorgen,
allerdings wäre bei der Versorgung mit Doppelworten die Schleifendurchläufe kürzer,
und man hätte Vorteile bei der Zykluszeit, was aber u.U. vernachlässigbar ist.

Für die Schleife findet man hier im Forum oder auch in der Hilfe zu Step7 einige Beispiele.
Im Moment habe ich ehrlich gesagt keine Zeit dir detailierter zu helfen.

Mfg
Manuel
 
SUPER !!!!

Vielen Dank Stricky.
Genau das was ich gebraucht habe.

Jetzt werde ich mir mal die Anweisungen und die Hilfe zu gemüte führen,
damit weiß was du da gemacht hast.

Danke auch MSB und Coma2205.

Tanja
 
Hier noch mal eine weitere Lösungsmöglichkeit: :)

Code:
// FC100 : Anzahl Bits (TRUE) zählen
 
// Adressregister AR1 sichern
 
      TAR1  #AR1_TEMP
 
 
// Anzahl Bits (TRUE) zählen
 
// DBLG = Länge Globaldatenbaustein = Anzahl Datenbytes
// Anzahl Datenbytes * 8 = Anzahl Datenbits
 
      AUF   #DB_NUMMER                  // Datenbaustein öffnen
 
      L     P#0.0                       // Zeiger Bits
      LAR1  
 
      L     0
      T     #ZAEHLER_BITS               // Zähler Bits
 
      L     DBLG                        // Länge Datenbaustein
      L     8
      *I    
M01:  T     #ZAEHLER_SCHLEIFE           // Zähler Schleife
 
      U     DBX [AR1,P#0.0]             // Abfrage Bits TRUE
      SPBN  M02
 
      L     #ZAEHLER_BITS               // Zähler Bits + 1 
      L     1
      +I    
      T     #ZAEHLER_BITS
 
M02:  L     P#0.1                       // Zeiger Bits + 1
      +AR1  
 
      L     #ZAEHLER_SCHLEIFE           // Zähler Schleife
      LOOP  M01
 
      L     #ZAEHLER_BITS               // Zähler Bits
      T     #ANZAHL_BITS
 
 
// Adressregister AR1 wiederherstellen
 
      LAR1  #AR1_TEMP

Gruß Kai
 

Anhänge

  • OB1.pdf
    3,6 KB · Aufrufe: 56
  • FC100.pdf
    4,2 KB · Aufrufe: 82
  • DB100.pdf
    2,5 KB · Aufrufe: 45
  • DB110.pdf
    2,5 KB · Aufrufe: 34
Zurück
Oben