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

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

Thema: Teil eines DINT's-Wert kopieren

  1. #1
    Registriert seit
    18.06.2003
    Beiträge
    141
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    Eine Anlage liefert mir über Ethernet ein 8-stelliger DINT-Wert, z.B.
    57081201 was die Sorten-Nr. des produzierten Papiers entspricht. Je nach Papiersorte ändert sich diese Nummer sowie auch die Grammatur die aber immer 3-Stellig bleibt..

    Frage: Ich sollte aus dieser DINT-Nummer die 4., 3., und die 2.-letzte Stelle auf ein anderes DBD od. DBW kopieren. Also in diesem Fall wäre es den Wert 120, was die Grammatur des Papiers entspricht.

    Beispiel: DB300.DBD20 -> 57081201-> 120 auf DB301.DBD od. DBW20

    Hat jemand von euch einen Hinweis, Tips, oder sogar eine elegante Lösung in der Schublade? Wäre euch sehr dankbar. Bin nämlich noch nicht auf das Resultat gekommen.

    Besten Dank im voraus.
    mfG churchill
    Zitieren Zitieren Teil eines DINT's-Wert kopieren  

  2. #2
    Registriert seit
    20.08.2003
    Beiträge
    275
    Danke
    38
    Erhielt 32 Danke für 31 Beiträge

    Standard

    Hallo,
    wenn ich das Problem richtig verstanden habe, handelt es sich um einen 32-Bit Hex-Wert also um DW#16#57081201.
    Dann sollte dieses Programm dein Problem lösen.

    L DB300.DBD20 // Wert von der Anlage (z.B. DW#16#57081201)
    SRW 4 // rechte Tetrade rausschieben
    L W#16#FFF // Maske für die 3 Stellen
    UW
    T DB301.DBW 20 // ins Ziel kopieren

    mfg. Rayk

  3. #3
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo churchill,

    so wird's gehen, falls es sich tatsächlich um DINT (32-bit-Festpunktzahl) handelt:


    Code:
     
    
          L     L#57081201                  //bzw. DB200.DBD..
          L     10
          /D    
          L     1000
          MOD                               //Ergebnis im Akku1


    Gruß, Onkel

  4. #4
    Anonymous Gast

    Standard

    Hallo Churchill,

    ein weiterer Vorschlag:
    Den DINT Wert mit den String IEC-Funktionen bearbeiten.
    DINT mit FC 5 in String umwandeln
    die drei Ziffern mit FC26 herauskopieren
    Rueckwandlung auf DINT oder Int mit FC37 oder FC38
    Zitieren Zitieren Titel: Teil eines DINT's-Wert kopieren mit Stringverarbeitun  

  5. #5
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    man kann aber auch den DINT-Wert in BCD wandeln, dann 4 Stellen nach rechts schieben, den linken Teil ausfiltern (Vorzeichen??) und dann wieder in INT oder DINT wandeln.

    MfG
    André Räppel
    Zitieren Zitieren DINT  

  6. #6
    churchill ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.06.2003
    Beiträge
    141
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo zusammen

    Erstmals vielen Dank für eure Hilfsbereitschaft.
    Die Lösung mit den Strings hab ich auch schon ausprobiert--->ist aber für das Resultat das ich brauche viel zu aufwändig und geschwollen , trotzdem vielen Dank.
    Der Lösungsvorschlag von André werde ich sicherlich ausprobieren, vielen Dank.
    Da es sich um eine 32-Bit-Festpunktzahl handelt hab ich die Lösung von Onkel Dagobert verwendet, was auch wunderbar funktioniert. Besten Dank.
    Eigentlich wenn man es sich genauer anschaut und überlegt, ist es ziemlich einfach. Ich sollte meine mathematische Kenntnisse wohl vertiefen müssen

    Nochmals Vielen Dank an alle und einen schönen Sonntag.

    mfG churchill

  7. #7
    churchill ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.06.2003
    Beiträge
    141
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo zusammen

    Es erinnert mich an einen vergangenen Beitrag der ich noch eine Lösungserklärung schuldig bin.
    Hier klicken
    Naja, die Lösung ist eigentlich ganz simpel:

    L #High_Word
    L 10000
    *D
    L #Low_Word
    +D
    T #Ret_Val

    Damit kann man die zwei Festpunktzahlen 16-Bit in einer 32-Bit zusammensetzen.

    Ich möchte auch gestehen, dass ich den MOD-Befehl nicht gekannt habe.
    Danke nochmals für eure Hilfe.

    mfG churchill

  8. #8
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo churchill,

    gern geschehen :P !

    Ich denke mal, daß es nicht viele Anwendungen gibt bei der die MOD-Rechnung sinnvoll eingesetzt werden kann. Wer braucht in einer Steuerung schon den Rest einer ganzzahligen Division? Daher wird sie sicherlich von vielen Programmieren beim Nachdenken oftmals garnicht berücksichtigt.

    Ein sehr interessanter, eigentlich fast schon genialer Fall für die MOD-Anweisung ist die Berechnung eines Zeigers für ein Umlaufregister, ein FiFo oder auch für einen Aufrufverteiler. Es geht mit MOD sehr viel eleganter als mit Vergleichen und Rücksetzen des #REGISTER_ZEIGER über Sprungbefehle. Bei jedem Aufruf wird #REGISTER_ZEIGER um 1 erhöht. Ist #REGISTER_ZEIGER=#MAX_ANZAHL, liefert MOD das Ergebnis "0" und es wird wieder von vorne gezählt.

    Code:
    //*** Umlaufregister mit MOD
          L     #REGISTER_ZEIGER
          L     #MAX_ANZAHL
          MOD   
          T     #REGISTER_ZEIGER            // 0..(MAX_ANZAHL-1)
    
    //*** Register-Bearbeitung
          ...
          ...
    
    //*** Pointer erhöhen
          L     #REGISTER_ZEIGER
          L     1
          +I    
          T     #REGISTER_ZEIGER
    Gruß, Onkel
    Zitieren Zitieren gern geschehen  

  9. #9
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.812
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    cool! kannte ich auch nicht, DANKE!

  10. #10
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.812
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    naja ich glaub so das optimale für ein sr ist der befehl doch nicht...

    1. geht nicht bei registern die in beide richtungen laufen (zeiger wird nicht auf <0 überwacht)

    2. wenn die registerbreite nicht durch die registerlänge teilbar ist, oder einfach nur der zeiger (aus welchen gründen auch immer) "verrutscht" läuft er über das registerende hinaus weil die mod anweisung ja nur "0" liefert wenn er genau die registerlänge erreicht.

Ähnliche Themen

  1. Wert Sortieren + Anhang Kopieren
    Von Rauchegger im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 30.03.2011, 10:32
  2. Seminar DIN EN 13849 Teil 1 und Teil 2
    Von Safety im Forum Werbung und Produktneuheiten
    Antworten: 1
    Letzter Beitrag: 28.12.2010, 09:59
  3. Excel: Wert statt Formel kopieren
    Von Jelly im Forum PC- und Netzwerktechnik
    Antworten: 5
    Letzter Beitrag: 17.09.2010, 11:51
  4. Float Wert to Dword und dann zu DINT geht das?
    Von mcmatthew im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 11.12.2009, 16:50
  5. Antworten: 8
    Letzter Beitrag: 24.03.2007, 13:15

Lesezeichen

Berechtigungen

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