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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: dringend Hilfe zu Zählern

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag!
    Ich bin neu hier im Forum und habe ein Problem mit einer Prüfungsaufgabe.

    Es soll gezählt werden, wie viele Bits im Eingangsbyte 0 den Wert 1 haben. Wenn der Wert gerade ist, dann wird M20.0=0, ansonsten o.
    Die Zahl 0 ist eine gerade Zahl.

    Eine Lösung in AWl wäre sehr hilfreich. Danke schon mal im voraus.
    Zitieren Zitieren dringend Hilfe zu Zählern  

  2. #2
    Registriert seit
    22.07.2004
    Beiträge
    749
    Danke
    41
    Erhielt 66 Danke für 47 Beiträge

    Standard

    Hallo,

    bei solchen Sachen werden dir die meisten erst helfen wenn du zumindest einen Ansatz bietest und dann fragen hast wo du nicht weiterkommst.
    Bei Prüfungs- und Schulaufgaben wird sonst kaum einer tätig hier.

  3. #3
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Da Du ja dringend hilfe brauchst hier:

    Code:
    FUNCTION countBits : BOOL
    VAR_INPUT
        Eingangsbyte    :BYTE;
    END_VAR
    VAR
        Counter         :BYTE;
    END_VAR
    Code:
    Counter := 0;
    IF Eingangsbyte.0 THEN
        Counter := Counter + 1;
    END_IF;
    IF Eingangsbyte.1 THEN
        Counter := Counter + 1;
    END_IF;
    IF Eingangsbyte.2 THEN
        Counter := Counter + 1;
    END_IF;
    IF Eingangsbyte.3 THEN
        Counter := Counter + 1;
    END_IF;
    IF Eingangsbyte.4 THEN
        Counter := Counter + 1;
    END_IF;
    IF Eingangsbyte.5 THEN
        Counter := Counter + 1;
    END_IF;
    IF Eingangsbyte.6 THEN
        Counter := Counter + 1;
    END_IF;
    IF Eingangsbyte.7 THEN
        Counter := Counter + 1;
    END_IF;
    
    IF ((Counter MOD 2) <> 0) THEN
        countBits := TRUE;
    ELSE
        countBits := FALSE;
    END_IF;
    Geändert von zotos (21.03.2007 um 11:57 Uhr)
    If you open your Mind too much, your Brain will fall out.

  4. Folgender Benutzer sagt Danke zu zotos für den nützlichen Beitrag:

    nade (21.03.2007)

  5. #4
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    hallöchen

    matmer du sprichts mir aus der seele

    noch besser ist es wenn schülerchen aufgaben von internet abgeben und dann nicht wissen was programmiert ist

    so aber zu deinen problem

    Du hast ein Byte wo du die 1 Bits zählen willst
    du hast einige möglichkeiten

    entweder du schiebst dir das bit 1 nach denn anderen nach rechts und siehst nach was am 1 bit ansteht und zählst dies

    oder du machst eine einfache addition wo du bei einen 1 am bit deine zahl um 1 hochrechnest

    probiers mal aus stell denn code online und deine fragen dazu

  6. #5
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Zitat Zitat von zotos Beitrag anzeigen
    Da Du ja dringend hilfe brauchst hier:
    ZOTTOOOSSSSSSSSSSSSSSSSS

    ab jetzt frag ich dich um erlaubniss ob ich was schreiben darf


  7. #6
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.526 Danke für 1.286 Beiträge

    Standard

    In der Standartbibliothek gibt es irgendwo einen FC99 "Bitsum".
    Dieser Zählt die Bits in einem Doppelwort, die Auswertung ob gerade oder nicht
    sollte ja kein Problem mehr darstellen.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  8. #7
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von kpeter Beitrag anzeigen
    ...
    entweder du schiebst dir das bit 1 nach denn anderen nach rechts und siehst nach was am 1 bit ansteht und zählst dies
    ...
    ...das gefällt mir.


    Code:
    FUNCTION countBits_for : BOOL
    VAR_INPUT
        Eingangsbyte    :BYTE;
    END_VAR
    VAR
        Hilfsbyte       :BYTE;
        Counter         :BYTE;
        forCount        :INT;
    END_VAR
    Code:
    Counter := 0;
    
    FOR forCount := 0 TO 7 DO
        Hilfsbyte := SHR(Eingangsbyte,forCount);
        IF Hilfsbyte.0 = TRUE THEN
            Counter := Counter + 1;
        END_IF;
    END_FOR;
    
    IF ((Counter MOD 2) <> 0) THEN
        countBits_for := TRUE;
    ELSE
        countBits_for := FALSE;
    END_IF;
    Geändert von zotos (21.03.2007 um 11:57 Uhr)
    If you open your Mind too much, your Brain will fall out.

  9. #8
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Zitat Zitat von zotos Beitrag anzeigen
    ...das gefällt mir.

    zotos er will awl nicht scl

    und wieso machen wir seine aufgaben
    der soll doch was lernen

  10. #9
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    [quote=zotos;75995]...das gefällt mir.

    [quote]

    Aber vieleicht gefällt dir das auch

    wenn du in deinen zähler byte das ganz rechte bit ansiehst weist du auch obs gerade oder ungerade ist dann ganzt du dir deine ganze modula berechnung sparen

    rechte bit 1 = ungerade
    rechte bit 0 = gerade

  11. #10
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von kpeter Beitrag anzeigen
    zotos er will awl nicht scl

    und wieso machen wir seine aufgaben
    der soll doch was lernen
    Das er AWL will ist klar. Eben weil ich ihm nicht die Hausaufgabe machen will gebe ich ihm die Lösung nicht in AWL ;o)

    Zitat Zitat von kpeter Beitrag anzeigen
    Aber vieleicht gefällt dir das auch

    wenn du in deinen zähler byte das ganz rechte bit ansiehst weist du auch obs gerade oder ungerade ist dann ganzt du dir deine ganze modula berechnung sparen

    rechte bit 1 = ungerade
    rechte bit 0 = gerade
    Nee das gefällt mir nicht.

    Bei Modulo sehe ich auf den ersten Blick ohne Kommentar um was es geht.
    Und bei Alternatvie die Du erwähnt hast wird der Code zwar kürzer aber nicht hübscher. Wo bei das im Auge des Betrachters liegt.

    Mit Modulo
    Code:
    IF ((Counter MOD 2) <> 0) THEN
        countBits_for := TRUE;
    ELSE
        countBits_for := FALSE;
    END_IF;
    Ohne Modulo
    Code:
    countBits_for := Counter.0;
    Geändert von zotos (21.03.2007 um 11:57 Uhr)
    If you open your Mind too much, your Brain will fall out.

Ähnliche Themen

  1. Hilfe Schaltung für LED ... Dringend
    Von Rollroll im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 25.07.2011, 17:17
  2. Antworten: 90
    Letzter Beitrag: 21.03.2010, 12:35
  3. Brauche Dringend Hilfe
    Von 1schilcher im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 14.09.2007, 14:10

Lesezeichen

Berechtigungen

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