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

Ergebnis 1 bis 9 von 9

Thema: Ein Bit aus Doppelwort finden

  1. #1
    Registriert seit
    06.11.2005
    Ort
    daheim natürlich
    Beiträge
    119
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus zusammen,

    mal eine Frage an die S5/S7 cracks.

    sorry erst mal für die Überschrift, aber ich weiss nicht was ich mein Problem treffend beschreiben kann.

    Ich habe ein Merkerdoppelwort (z.B. MD10).
    in dem MD10 ist immer nur ein bit gesetzt (z.B. m10.4).
    Das würde ja als Dezimalzahl den WErt 16 ergeben.
    Ich würde allerdings gerne das ergebnis 5 bekommen (da es ja das 5.te Bit im MD10 ist, das gesetzt ist).
    Möglichkeit 1:könnte man natürlich hergehen und sagen MD10 hat WErt 16, und dann über abfragen die gewünschte Zahl (5) irgendwo zuweisen über lade/transfer Befehl (L 5, T xx).
    Möglichkeit 2: Eine Schleife in der das MD10 immer um eine Stelle nach rechts geschoben wird, und in der Schleife eine Variable inkrementieren, die Schleife dann beenden wenn das Bit an erster Stelle steht.
    Hoffe ihr versteht meine Erklärung . Geht das nicht irgendwie eleganter und einfacher?
    mfg, Flo

    Zitieren Zitieren Ein Bit aus Doppelwort finden  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Dafür gibt es in Step7 eine fertige Function: ENCO
    siehe: Bibliotheken > Standard Library > TI-S7 Converting Blocks > FC96 ENCO
    (Bibliotheken im KOP/AWL/FUP-Editor einblenden: Strg-G oder Strg-K)

    Der FC96 macht genau das, was Du in Deiner Möglichkeit 2 beschrieben hast
    (in einer Schleife das Doppelwort rechts schieben bis ein 1-Bit gefunden wird).

    Du legst das Doppelword an den Bausteineingang IN und in RET_VAL bekommst Du
    die Nummer des niedrigsten gesetzten Bits (0..31).
    Achtung: ist das Doppelwort=0 (kein Bit gesetzt), dann wird auch 0 zurückgegeben!

    Die Step7-Hilfe zum Baustein ENCO ist allerdings etwas konfus und irreführend.
    Lies besser die Bausteinbeschreibung in der PDF: Start > SIMATIC > Dokumentation >
    Step7 > STEP 7 - System- und Standardfunktionen für TI-S7-Konverter
    (C:\Programme\Siemens\Step7\S7MANUAL\S7STDL2A\S7stdl2a.pdf)

    Gruß
    Harald
    Zitieren Zitieren TI-S7-Lib: FC96 "ENCO"  

  3. #3
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Wozu braucht man sowas?
    Brauchst du anschliessend wirklich die Bit-Nr. und nicht das Bit an sich?


    Ich würde das wenn möglich mit Symbolischer Adressierung lösen, zb:
    ParameterWord MD10 WORD
    ParamFlag0 M10.0 :BOOL
    ParamFlag0 M10.1 :BOOL
    ParamFlag0 M10.2 :BOOL

    Oder aber in SCL mit einer AT-Sicht

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Wenn du dir sicher sein kannst dass immer nur ein, und mindestens ein Bit gesetzt ist, geht sowas:

    Code:
          L     #dw_in
          DTR   
          SLD   1
          SRD   24
          L     126
          -I    
          T     #bitpos
    Ich hatte irgendwann schonmal so eine Schweinerei mit DTR gemacht...

  5. #5
    Registriert seit
    04.04.2006
    Beiträge
    239
    Danke
    31
    Erhielt 61 Danke für 51 Beiträge

    Standard

    Zitat Zitat von Flo Beitrag anzeigen
    Ich habe ein Merkerdoppelwort (z.B. MD10).
    in dem MD10 ist immer nur ein bit gesetzt (z.B. m10.4).
    Das würde ja als Dezimalzahl den WErt 16 ergeben.
    Hilft dir zwar bei deinen Problem nicht, aber M10.4 auf ein ergibt nicht den Dezimalwert 16 im MD10. M13.4 würde in deinem Beispiel 16dez ergeben, da Siemens die Byte von links nach rechts zählt.

    Gruß Woldo

  6. #6
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Das wird ihm schon helfen, denn M10.4 ist ja damit nicht das 5. Bit sondern das 29.


    PS: Falls das mal jemand auf der S7-200 machen möchte, die hat auch die von PN/DP erwähnte eingebaute Funktion ENCO, allerdings nur für Word:
    Zitat Zitat von Microwinhilfe
    Die Operation Hexadezimalzahl in Bit wandeln schreibt die Bitnummer des niederwertigsten Bit im Eingangswort IN in das niederwertigste Halb-Byte (4 Bit) des Ausgangsbyte (OUT).
    Geändert von hucki (15.04.2010 um 23:02 Uhr) Grund: Nachtrag für Suchende

  7. #7
    Flo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2005
    Ort
    daheim natürlich
    Beiträge
    119
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Woldo Beitrag anzeigen
    Hilft dir zwar bei deinen Problem nicht, aber M10.4 auf ein ergibt nicht den Dezimalwert 16 im MD10. M13.4 würde in deinem Beispiel 16dez ergeben, da Siemens die Byte von links nach rechts zählt.

    Gruß Woldo
    ja,stimmt natürlich, danke. mein fehler

    @PN/DP: denke das ist das was ich brauche, danke!

    wozu mann das braucht?
    nun, ich halte es eigentlich immer so (muss dazu dagen, das ich überwiegend Codesys programmiere) das meine Schrittketten Case- Anweisungen in ST sind.

    Das sieht dann in etwa so aus:
    Code:
    case auto_step of
    
    0:
    result_auto_Step:='Hier kommt die Beschreibung des aktuellen Schritts rein';
    
    if .... blabla
    
    1:
    usw.
    
    end_case
    den String übergebe ich dann direkt ans HMI als Schrittkettenanzeige.
    Da ich in S7 die Schrittketten in AWL programmiere wollte ich einfach das Schrittketten DW so auslesen um dann damit eine Schrittbeschreibung zu realiseren.
    mfg,Flo

  8. #8
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.732
    Danke
    314
    Erhielt 1.520 Danke für 1.282 Beiträge

    Standard

    Wenn du gerne mit CASE arbeitest, und hier nun mit AWL,
    dann solltest du dir die Sprungleiste also den Befehl "SPL" mal näher ansehen.
    Der entspräche weitestgehend dem CASE-Befehl.

    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).

  9. #9
    Flo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2005
    Ort
    daheim natürlich
    Beiträge
    119
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    die Sprungleiste kenn ich, da wir aber bei uns in S7 fast ausschliesslich mit der "traditionellen" SR Schrittkette arbeiten (ausser wir dürfen/müssen mit Graph), möchte /sollte ich hier der Linie treu bleiben.
    Die Schrittkettenbeschreibung möchte ich in der SPS machen, weil ich die alternative (Textlisten) nicht besonders glücklich finde.
    trotzdem danke fürn hinweis.
    mfg,flo

Ähnliche Themen

  1. Doppelwort formatieren
    Von Sybkal im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 11.05.2011, 19:02
  2. ANY-Format auf Doppelwort?
    Von Jordy im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 08.10.2007, 10:23
  3. Ein Bit im Doppelwort ändern (SCL)
    Von M-Arens im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 14.03.2007, 15:29
  4. Doppelwort im DB schieben
    Von Revave im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.12.2005, 10:49
  5. Differenz von Doppelwort
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.07.2004, 10:01

Lesezeichen

Berechtigungen

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