Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: Bit's mit Zustand 1 im DB Zählen

  1. #1
    Registriert seit
    25.04.2006
    Beiträge
    20
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich möchte alle Bits in einem Bekannten Baustein die den Zustand 1 haben zählen. Die DB-Länge ist mir nicht bekannt. Alle Daten haben das Format Int. Ich hab das jetzt so gelöst. Meine Funktion funktioniert, nur wird das Vorzeichenbit nicht erkannt. Hat jemand eine Idee?


    TAR1 #AR1_Temp
    TAR2 #AR2_Temp

    AUF DB 50
    L DBLG
    T #Laenge
    L 0
    T #zaehler
    T #i_16
    T #i_gesamt
    LAR1
    m001: L DBW [#i_gesamt]
    T #wert
    L 0
    T #i_16
    m002: U L [#i_16]
    SPBN m010
    L #zaehler
    + 1
    T #zaehler
    m010: L #i_16
    L L#1
    +D
    T #i_16
    L 15
    >=I
    SPBN m002
    L #i_gesamt
    L P#2.0
    +D
    T #i_gesamt
    L 2
    +D
    L #Laenge
    SLW 3
    >=I
    SPBN m001

    LAR1 #AR1_Temp
    LAR2 #AR2_Temp
    Geändert von norman (28.09.2009 um 16:06 Uhr)
    Zitieren Zitieren Bit's mit Zustand 1 im DB Zählen  

  2. #2
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Norman,

    Du vergleichst mit >=15. D.h. das 15. Bit (Vorzeichenbit) wird nicht mehr bearbeitet.
    Versuchs mit >I, dann funktionierts auch.

    Grüße
    Gebs

  3. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    norman (28.09.2009)

  4. #3
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    Programm als AWL-Quelle

    FUNCTION_BLOCK FB 1
    TITLE =
    VERSION : 0.1

    VAR_INPUT
    DBNR : INT ;
    END_VAR
    VAR_OUTPUT
    Anzahl_Bits : DINT ;
    END_VAR
    VAR_TEMP
    DBNR_t : INT ;
    Pointer_daten_bit_t : DWORD ;
    SchleifenZaehler_T : DINT ;
    Bitzaehler_t : DINT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =Zählung aller Bit=1 innerhalb eines beliebig grossen Datenbaus
    //Zahlenformate spielen Keine Rolle
    L #DBNR; //Indirektes Öffenen des Datenbausteines über In Parameter
    T #DBNR_t;
    AUF DB [#DBNR_t];
    //******************************************************************************** ***********
    LAR1 P#0.0; //Initialisierung des Datenbitpointers
    //******************************************************************************** ***********
    L L#0; //Initialisierung des Bitzaehlers
    T #Bitzaehler_t;
    //******************************************************************************** ***********
    L DBLG; //auslesen der Datenbausteinlänge in Byte
    L L#8; //multiplikationfaktor Byte nach Bit
    *D ;
    next: T #SchleifenZaehler_T; //Vorspannen des Schleifenzaehlers in DINT,da die Schleife grösser als 32767 sein Könnte
    CLR ; //Erzwingen VKE=0
    U DBX [AR1,P#0.0];
    SPBN m001; //wenn Bit=0 Springe
    L L#1; //Zaehlen wenn ein Bit=1
    L #Bitzaehler_t;
    +D ;
    T #Bitzaehler_t;
    m001: +AR1 P#0.1; //Pointererhöhung für nächsten Schleifendurchlau
    L #SchleifenZaehler_T; //dekrementierung SchleifenZaehler_T um 1
    L L#1;
    -D ;
    L L#1;
    >=D ;
    SPB nex2; // Rücksprung in Schleife wenn noch nicht alle Bits des DB auf 1 Geprüft
    SPA m002;
    nex2: TAK ;
    SPA next;
    m002: NOP 0;
    //******************************************************************************** ***********
    L #Bitzaehler_t; // Übergabe der Temporär gezaehlten 1=Bit an Output
    T #Anzahl_Bits;
    END_FUNCTION_BLOCK
    Geändert von Bernard (30.09.2009 um 19:20 Uhr)
    Zitieren Zitieren Bit`s mit Zustand 1 im DB Zählen  

  5. Folgender Benutzer sagt Danke zu Bernard für den nützlichen Beitrag:

    de vliegende hollander (11.09.2014)

  6. #4
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.339
    Danke
    388
    Erhielt 219 Danke für 173 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke Bernard.

    So eine Funktion hab ich gesucht.

    Lauft auch im TIA V13. Habs schon drinnen.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

Ähnliche Themen

  1. DB Zustand auslesen
    Von derwestermann im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 02.12.2010, 15:31
  2. Rücksetzen bei AUS-Zustand
    Von Treppi100 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 26.10.2009, 15:15
  3. Zustand in SCL merken
    Von M-Arens im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 09.02.2007, 22:52
  4. unbetätigter Zustand
    Von Anonymous im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 13.05.2005, 13:19
  5. CPU Zustand auslesen
    Von M-Arens im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 14.02.2005, 11:53

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •