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

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 51

Thema: Dezimalzahl in Datenbaustein laden

  1. #1
    Registriert seit
    20.10.2009
    Beiträge
    30
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus Leute!

    Ich hab hier ein Programm, welches zwar funktioniert aber zu umständlich (Größe) geschrieben ist.
    Folgendes Problem:
    Ein Eingang, Bsp. E0.1, soll bei einem Sprung 0->1 eine Dezimalzahl, Bsp. 1, in einen Datenbaustein schreiben.
    Wenn ein weiterer Eingang, Bsp. E0.2 ebenfalls einen solchen Sprung erfährt, soll die Zahl, Bsp. mit 2, im Datenbaustein überschrieben werden.

    Ich hab das mal versucht mit Sprüngen zu verwirklichen....

    ------------------
    FC1:

    U E 0.1
    UN M 0.1
    SPB _001

    U E 0.2
    UN M 0.2
    SPB _002
    SPA _100

    _001: L 1
    T DB1.DBW0
    SPA _100

    _002: L 2
    T DB1.DBW0
    SPA _100

    _100: BE

    ------------------

    FC2:

    U E 0.1
    S M 0.1
    UN E 0.1
    R M 0.1

    U E 0.2
    S M 0.2
    UN E 0.2
    R M 0.2

    ------------------

    Die ganze sache funktioniert wie ich es mir vorgestellt hab.
    Jetzt zum PROBLEM:
    Ich habe nicht zwei Eingänge sonder weit über 100.
    Daher würde ein ewig langes Programm entstehen, was ich umgehen möchte.

    Habt ihr einen Tipp wie ich das ganze einfacher gestallten kann?
    Wichtig ist vorallem, dass der Wert immer vom aktuellsten Eingangs-Sprung überschrieben wird.

    Ich sag jetzt schon mal Danke für eure Hilfe!!
    MfG
    Alex
    Zitieren Zitieren Dezimalzahl in Datenbaustein laden  

  2. #2
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Hallo,

    Jetzt zum PROBLEM:
    Ich habe nicht zwei Eingänge sonder weit über 100.
    Und was soll passieren, wenn 12 Eingänge auf einmal anstehen?

    oder kommt sowas nie vor?

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Code:
    *
    //Adressregister initialisieren
          LAR1  P#0.0
    //Schleife vorbereiten
          L     200
    next: T     #iLoopCounter
    //Eingang Abfragen
          U     E [AR1,P#0.0]
          SPBN  nich
    //Nummer berechnen und ausgeben
          L     -1
          L     #iLoopCounter
          *I    
          +     200
          T     #iNumber
    //Adressregister erhöhen und solange Schleifenzähler > 0 zurück zu next
    nich: +AR1  P#0.1
          L     #iLoopCounter
          LOOP  next
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    @4L
    Damit erwischst Du "nur" den gesetzten Eingang mit der höchsten Adresse aber nicht zwangsläufig den, der als letzter gekommen ist.

    Besser wäre:

    Code:
    *
    //Adressregister initialisieren
          LAR1  P#0.0
    //Schleife vorbereiten
          L     200
    next: T     #iLoopCounter
    //Eingang Abfragen
          U     E [AR1,P#0.0]
          FP    M[AR1,P#0.0]
          SPBN  nich
    //Nummer berechnen und ausgeben
          L     -1
          L     #iLoopCounter
          *I    
          +     200
          T     #iNumber
    //Adressregister erhöhen und solange Schleifenzähler > 0 zurück zu next
    nich: +AR1  P#0.1
          L     #iLoopCounter
          LOOP  next
    [/QUOTE]
    Gruß
    Michael

  5. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von M-Ott Beitrag anzeigen
    @4L
    Damit erwischst Du "nur" den gesetzten Eingang mit der höchsten Adresse aber nicht zwangsläufig den, der als letzter gekommen ist.
    ich nenne das "room for improvement"

    aber wenn schon, dann

    Code:
    *
    //Adressregister initialisieren
          LAR1  P#0.0
          AUF   DB [#iDBNo]
    //Schleife vorbereiten
          L     200
    next: T     #iLoopCounter
    //Eingang Abfragen
          U     E [AR1,P#0.0]
          FP    DBX[AR1,P#0.0]
          SPBN  nich
    //Nummer berechnen und ausgeben
          L     -1
          L     #iLoopCounter
          *I    
          +     200
          T     #iNumber
    //Adressregister erhöhen und solange Schleifenzähler > 0 zurück zu next
    nich: +AR1  P#0.1
          L     #iLoopCounter
          LOOP  next
    laut seiner sprungverteilung wollte er aber die höchste adresse, oder?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #6
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    laut seiner sprungverteilung wollte er aber die höchste adresse, oder?
    nope... er wollte die niedrigste ... das geht natürlich nicht... das kann ich nicht lösen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Perfekt!

    Zitat Zitat von Alexus85 Beitrag anzeigen
    ...dass der Wert immer vom aktuellsten Eingangs-Sprung überschrieben wird.
    Er wollte aber den aktuellsten!
    Gruß
    Michael

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Der FC1 von Alex ermittelt - im Gegensatz zu seiner Erklärung - die niedrigste Eingangsnummer, die gerade "springt".
    Was will er wohl tatsächlich? Die Nummer des "aktuellsten Sprungs"? Was soll passieren, wenn es mehrere "aktuellste" gibt?

    Es scheint irgendeinen seltsamen metaphysischen Zusammenhang zu geben ... Programmierer, die sich nicht so eindeutig
    ausdrücken können, schreiben ziemlich oft auch solchen Code:
    Code:
    U E 0.1
    S M 0.1
    UN E 0.1
    R M 0.1
    Das kommt womöglich davon, das die nur in Setzen und Rücksetzen denken können?

    Auf diese geniale Weise kann man schon mal sehr viele Zeilen Code einsparen:
    Code:
    U E 0.1
    = M 0.1
    @Alexus85
    Besser noch, Du schaust Dir mal den Flanken-Befehl FP an, das spart noch mehr Codezeilen.
    Und wenn Du platzsparend gleich Word- oder Doppelwordweise die Flankenerkennung durchführen willst,
    da haben wir hier auch ein FAQ dazu.

    Und wenn Du nochmal genau beschreiben könntest was Du brauchst, dann gibt es sicher eine noch kürzere Lösung.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Das kommt womöglich davon, das die nur in Setzen und Rücksetzen denken können?
    ich würds ja aufs alter schieben, wenn die 85 da nicht stehen würde ... früher gabs doch och nur flip-flops
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #10
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Mordor_FRI Beitrag anzeigen
    und wie wäre dies so allgemein gefragt eben aus dem Ärmel mit einer Movebox ?
    Eingang mit FP als Eneable und die Zahl in den DB gehauen?
    und das ganze mal 100 ... bausteinende erreicht ...

    welche sprünge meinst du eigentlich?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 01.06.2011, 17:34
  2. CSV in Datenbaustein laden
    Von McLac im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 02.07.2009, 21:56
  3. DB in Dezimalzahl
    Von tisler im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 15.10.2008, 15:20
  4. Dezimalzahl speichern
    Von Syntaxfehler im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 22.01.2008, 15:25
  5. Datenbaustein bei der S7-200 neu laden
    Von hubert im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 24.05.2005, 21:56

Stichworte

Lesezeichen

Berechtigungen

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