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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Datum S7

  1. #11
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    642
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Kein Problem. Als Beispiel einfach einen FC anlegen. In dem FC eine Temp-Variable "Datum" von Type DATE_AND_TIME sowie eine Temp-Variable "RetVal" vom Type INT anlegen. Die Anfangsadresse von "Datum" wird in der Schnittstelle angezeigt. Dies ist in meinem Beispiel 0.0, dann funktioniert folgender Code:
    Code:
          CALL  "READ_CLK"
           RET_VAL:=#RetVal
           CDT    :=#Datum
          L     LB     1   // Den Monat in BCD laden (Adresse Datum + 1, ggf. anpassen)
    // Ab jetzt funktionieren die beiden Beipiele von heute morgen, z.B.
          BTI             // In Dezimalzahl wandeln
          DEC   1         // Anzahl für Rotierungen
          L     DW#16#1000100   // Wegen High-Low-Anordnung und ...
          RLD             // ... weil Rotieren nur 32-bitweise geht
          T     MW   104  // Das selbe Ergebnis wie vorher
    Hier jetzt nur noch das Merkerwort anpassen, dann müsste alles funktionieren.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  2. #12
    Avatar von 1schilcher
    1schilcher ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.01.2006
    Beiträge
    135
    Danke
    16
    Erhielt 2 Danke für 2 Beiträge

    Blinzeln

    Vielen Dank, werds gleich mal ausprobieren. Meld mich wenns geht. DANKE

  3. #13
    Avatar von 1schilcher
    1schilcher ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.01.2006
    Beiträge
    135
    Danke
    16
    Erhielt 2 Danke für 2 Beiträge

    Reden

    Funktioniert,, Vielen DANK für deine Mühe.

  4. #14
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von Rainer Hönle
    Und noch eine Variante:
    Code:
          L Monat         // = Byte 1 von SFC 1-Aufruf
          BTI             // In Dezimalzahl wandeln
          DEC   1         // Anzahl für Rotierungen
          L     DW#16#1000100   // Wegen High-Low-Anordnung und ...
          RLD             // ... weil Rotieren nur 32-bitweise geht
          T     MW   104  // Das selbe Ergebnis wie vorher
    Dies ist jetzt die kompaktere aber schwieriger zu verstehende Variante (eines PC-Programmierers ).
    Kann man das in die andere Richtung auch machen?
    (wenn zB. für den Wert 5 das Bit x.5 gesetzt ist und ich will den Wert 5 zB. Binär darstellen)

    Mfg Godi

  5. #15
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    642
    Erhielt 955 Danke für 769 Beiträge

    Standard

    An dieser Stelle würde ich den einfachen Vergleich verwenden. Im folgenden Beispiel wird das erste gesetzte Bit in MB 0 gefunden (ist eigentlich sichergestellt, dass nur ein Bit gesetzt ist?):
    Code:
          U M 0.0
          SPB NULL
          U M 0.1
          SPB EINS
          U M 0.2
          SPB ZWEI
          ...
    NULL: L 0
          SPA OK
    EINS: L 1
          SPA OK
    ZWEI: L 2
          SPA OK
          ...
    OK: // In Akku1 steht nun die Bitnummer zwischen 0 und 7
    Alternativ mit nur einem Sprungbefehl:
    Code:
          L 0
          U M 0.0
          SPB OK
          INC 1
          U M 0.1
          SPB OK
          INC 1
          U M 0.2
          SPB OK
          ...
    OK: // In Akku1 steht nun die Bitnummer zwischen 0 und 7
    Es gibt schon eine direkte Lösung. Diese ist allerdings für die SPS nicht einfach zu bearbeiten wie die ersten beiden Lösungen. Und je nach SPS dauert diese Lösung auch wesentlich länger, spart dafür aber Codegröße.
    Hintergrund der Operation:
    Y = 2 ^ X
    Wobei Y die Zahl mit einem gesetzten Bit ist und X die Bitnummer. Daraus ergibt sich:
    ln( Y ) = X * ln( 2 )
    X = ln( Y ) / ln( 2 )
    Code:
          L MB 0
          DTR
          LN
          L 2.0
          LN
          /R
          RND  // In Akku1 steht nun die Bitnummer zwischen 0 und 7
    Soviel zum Thema Mathematik am Morgen bringt Kummer und Sorgen.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  6. #16
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Schönen Dank für die super Lösungen!
    Die letzte ist nicht schlecht

    Das nur ein Bit gesetzt ist muss ich noch sicherstellen.
    Momentan wird damit eine 7Segmentanzeige angesteuert die einfach 0 anzeigt wenn 2Bits gesetzt sind. Da jetzt ein OP7 eingebaut wird will ich das auch über das OP7 lösen.

    Mfg Godi

  7. Folgender Benutzer sagt Danke zu godi für den nützlichen Beitrag:

    SIGGI (04.02.2009)

Ähnliche Themen

  1. Datum und Uhrzeit
    Von HDF im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 18.12.2009, 09:08
  2. Datum vergleichen ?
    Von Pusher im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 02.07.2009, 13:01
  3. S7 Datum von VB.NET nach SPS...
    Von paddy_cmd im Forum Hochsprachen - OPC
    Antworten: 9
    Letzter Beitrag: 17.06.2009, 13:54
  4. S7-200 aus Datum Zahler
    Von blue dun im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 23.04.2008, 19:42
  5. Datum ?
    Von edi im Forum Stammtisch
    Antworten: 5
    Letzter Beitrag: 04.03.2005, 12:10

Lesezeichen

Berechtigungen

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