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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: Date and Time, Bytes einzeln auswerten

  1. #11
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    in den iec functions den fc5 oder fc16
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  2. #12
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    So sollte es auch funktionieren:
    Code:
    L     "dein Byte"        //als Dezimalziffer
    ITB       
    L     B#16#30
    OW    
    T    "dein CharByte"  //als ASCII-Zeichen
    Geändert von OHGN (11.02.2008 um 17:04 Uhr)
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

  3. #13
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    @Ralle:
    Wenn ich den Code richtig interpretiere, dann macht
    Code:
    SLW 12
    SRW 12
    das selbe wie

    Code:
    UW	W#16#000F
    Oder habe ich etwas übersehen bzw. nicht verstanden?

    @smartie:
    Der ASCII-Wert entspricht der Zahl + 48 (wenn die Zahl zwischen 0 und 9) ist. Somit wäre folgendes möglich:

    Code:
    L #Jahr                     //Byte, Jahr, BCD-Codiert
    SRW 4                       //Einerstelle rechts rausschieben
    OW W#16#0030                //Statt 48 zu laden und zu addieren
    T #iZehnerJahr              //Zehnerstelle Jahr als ASCII
    
    L #Jahr                     //Byte, Jahr, BCD-Codiert
    UW W#16#000F                //Einerstellen übriglassen
    OW W#16#0030                //Statt 48 zu laden und zu addieren
    T #iEinerJahr               //Zehnerstelle Jahr als ASCII
    BTI kann nur dann entfallen, wenn der Bytewert in Akku 1 mit absoluter Sicherheit positiv ist. Davon kann bei einem BCD-Wert ausgegangen werden. Die oberen (überflüssigen) Bits wurden bei der Ladeoperation bereits genullt.
    Rainer Hönle
    DELTA LOGIC GmbH

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

  4. #14
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    @Rainer

    Ja, viele Wege führen nach Rom

    @samrtie

    Hättest du doch gleich sagen können . Mein Originalcode sieht so aus:
    Code:
          CALL  "READ_CLK"
           RET_VAL:=#RetVal
           CDT    :=#Zeit
    
    //Jahr in Stringword wandeln
          L     0
          T     #Charvars.Jahr     //Definierte Tempvar Word
    
          L     P##Zeit            //Zeit ist in Temp als Date_and_Time definiert
          LAR1                     //Adresse von Zeit in Temp laden
          L     B [AR1,P#0.0]      //Jahr ist das 1.Byte, das wird hier geladen
          T     #HM_Char2          //und in HM_Char2 kopiert, Format Word in Temp
    
          SRW   4                  //Einerstelle von Jahr (BCD-Codiert) wird gelöscht, Zehnerstelle kommt an die Einerstelle
          L     W#16#30            //30Hex=48Dez addieren (Char "erzeugen")
          +I    
          SLW   8                  //in das linke Byte schieben und in HM_Char1 (Word in Temp) speichern, also in der Zehnerstelle
          T     #HM_Char1
    
          L     #HM_Char2          //wieder das Jahr laden
          SLW   12                 //so wird die Zehnerstelle gelösche, die Einerstelle bleibt übrig
          SRW   12
          L     W#16#30            //30Hex=48Dez addieren (Char "erzeugen")
          +I    
          T     #HM_Char2
    
          L     #Charvars.Jahr     //das ist mit 0 vorbelegt
          L     #HM_Char1          //Zehnerstelle im Charformat dazu
          OW    
          L     #HM_Char2          //Einerstelle im Charformat dazu
          OW    
          T     #Charvars.Jahr     //Im Word Charvars.Jahr steht jetzt im linken
    Byte die Zehnerstelle des Jahres im Charformat, im rechten Byte steht die
    Einerstellen im Charformat, also für 08 steht 3038hex drin, für 12 steht dann
    3132hex
    Das ist etwas "umständlicher" als das von OHGN und Rainer, aber für Leute mit etwas weniger Praxis evtl. ein wenig leichter lesbar. (Hoffe ich )
    Geändert von Ralle (12.02.2008 um 00:17 Uhr) Grund: Kommentieren
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #15
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hallo zusammen,

    vielen Dank für eure Tipps, ich habe zunächst mal das Beispiel von Rainer Hönle angeschaut und es funktioniert auch ganz gut.

    Wenn ich es richtig verstehe wird da zu meinem Bytewert einfach 30 addiert.

    Das ist ganz schön Neuland für mich, ich komme aus der S7-200er Welt und habe zwar schon die ein oder andere S7-300 zum laufen gebracht.
    Aber mehr auf der E/A Ebene.

    So Sachen wie AKKU 1 und AKKU 2 und dergleichen sagen mir NULL.

    Ich glaube ich muss mir demnächst doch mal irgendwo ein Handbuch zulegen.

    @ Rainer Hönle :

    Was ist denn mit " Der ASCII-Wert entspricht der Zahl + 48 (wenn die Zahl zwischen 0 und 9)" gemeint?

    Das Beispiel von OHGN kann ich nicht nachvollziehen?
    Soll ich den von BCD nach INT gewandelten Wert wieder nach BCD wandeln?
    Oder soll ich den BCD Wert als Ausgang benutzen?

    smartie

  6. #16
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    Zitat Zitat von smartie Beitrag anzeigen
    Was ist denn mit " Der ASCII-Wert entspricht der Zahl + 48 (wenn die Zahl zwischen 0 und 9)" gemeint?
    schau dir mal eine ascii tabelle an dann siehst du sofort was reiner meint. die 0 steht dort an 'position' 48, 1 an 49 usw.

    und wie erwähnt kannst du auch die fc's nehmen
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  7. #17
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    OHGN und ich machen im Prinzip dasselbe.
    Zu Deiner Frage: der ASCII-Wert von 0 ist 48, der von 1 ist 49, ... Dies entspricht einer Addition von 48. Dies gilt natürlich nur, wenn sichergestellt ist, dass die Zahl (besser der Ausgangswert im Akku) zwischen 0 und 9 ist. Dann darüber kommt für diese Rechenart Blödsinn raus (einfach mal probieren ).
    Bei einer Zahl zwischen 0 und 9 (oder besser wenn sichergestellt ist, dass Bit4 und Bit5 nicht gesetzt sind) kann statt einer Addition mit 48 (dezimal!!) auch eine Veroderung mit 30 (hexadezimal!!), was 48 dezimal entspricht, erfolgen. Diese Variante hat auch OHGN verwendet.
    Rainer Hönle
    DELTA LOGIC GmbH

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

  8. #18
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Hättest du doch gleich sagen können .
    Hi Ralle,

    hab deinen Code nicht ausprobiert, verstehe ich ehrlich gesagt nicht ganz.
    (Pointerkentnisse = 0)

    Vom Ablauf her bekomme ich von der Fördertechnik SPS über eine S7-Verbindung eine Variable im Format Date and Time,
    diese muss ich dann an den PC über eine OPC Verbindung Byte weise im ASCII Format ausgeben.

    Zum Testen lese ich hier eben mit SFC1 die Systemuhr aus.

    Vielleicht kannst du mir ja ein klein wenig kommentieren was du da getippselt hast.

    smartie

  9. #19
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Der ASCII-Wert entspricht der Zahl + 48
    Achso, das sollte bedeuten das dezimal immer 48 dazu addiert werden kann, sofern der Wert zwischen 0 und 9 liegt.

    Soweit klar

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Bei einer Zahl zwischen 0 und 9 (oder besser wenn sichergestellt ist, dass Bit4 und Bit5 nicht gesetzt sind)
    Das ist bei einer BCD kodierten Zahl sichergestellt?

    Nochmals vielen Dank.

    @ volker:

    Den Vorschlag mit den FC´s habe ich mir auch angeschaut,
    aber wenn ich das wie von Rainer Hönle beschrieben alles in einem Netzwerk machen kann dann ist das für mich etwas übersichtlicher.

    Danke

  10. #20
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von smartie Beitrag anzeigen
    Das ist bei einer BCD kodierten Zahl sichergestellt?
    Wenn es sich wie hier um ein Nibble einer BCD kodierten Zahl oder um das ungepackte BCD-Format handelt, dann ja. Dort darf dann sowieso kein anderer Wert (also immer zwischen 0 und 9) stehen.
    Rainer Hönle
    DELTA LOGIC GmbH

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

Ähnliche Themen

  1. DATE Variable einzeln auslesen
    Von Bambam im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 17.08.2010, 12:38
  2. Time and Date
    Von paula23 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.10.2008, 08:50
  3. Date and Time im DB
    Von godi im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 19.05.2006, 15:56
  4. sps date and time ==> OP27
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 10.11.2005, 15:30
  5. Antworten: 3
    Letzter Beitrag: 02.02.2005, 17:41

Lesezeichen

Berechtigungen

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