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

Ergebnis 1 bis 6 von 6

Thema: Messwert in DB Schreiben

  1. #1
    Registriert seit
    26.10.2007
    Beiträge
    80
    Danke
    6
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Habe folgendes Problem:
    Ich muss einen Messwert alle 2 Sekunden in einen DB Schreiben und das Zwanzig mal! Also meinetwegen in den DB10DBW0 Messwert 1, in DB10DBW2 Messwert 2 usw. Messwert 21 wird dann wieder in den DB10DBW0 geschrieben. Wie löse ich diese Aufgabe

    Bye M.R.
    Zitieren Zitieren Messwert in DB Schreiben  

  2. #2
    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

    Suche im Forum nach FIFO und LIFO, bzw. schau in der FAQ des Forums nach.
    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

  3. #3
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Wenn du Messwert und DB ind die Suche eingibst, wirst du auch ein paar interessante Sachen finden

  4. #4
    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

    ungetestet:

    Code:
    *
          U     #freigabe                   // beim einschalten
          FP    #helpflag_1
          SPBN  norm
          L     0                           // Startwert
          T     #startDW                    // initialisieren
    
    norm: U     #freigabe
          U     #plc_pulse_7                // CPU-Takt-Merker x.7 2s
          FP    #helpflag_2
          SPBN  end
          AUF   DB [#db_nr]                 // Datenbaustein öffnen
    
          L     #startDW                    // Adresse für Ablageort laden
          SLD   3                           // Pointer erzeugen
          LAR1                              // in das Adressregister 1 laden
    
          L     #messwert                   // Messwert
          T     DBW [AR1,P#0.0]             // in DB schreiben
    
          L     #startDW                    // Adresse
          L     38                          // auf max
          <I                                // prüfen
          SPBN  neu
    
          L     #startDW                    // Adresse
          +     2                           // um zwei erhöhen
          T     #startDW
          SPA   end
    
    neu:  L     0                           // wenn Adresse max
          T     #startDW                    // Adresse wieder auf 0
    
    end:  NOP   0
    kai hätte sich sicher mehr mühe gegeben
    Geändert von vierlagig (17.04.2008 um 18:12 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo M.R.,
    meine Lösung in AWL sieht so aus:

    FC1:
    L MD 4
    L L#38
    >D //Überwachung der Grenze von 20 Messwerten
    SPB M1 //bedingter Spriung nach M1
    L MD 4 //Adresse mit falschem Bit-Muster im MD4 laden
    SLD 3 //Schiebe links Doppelwort um 3 Bit
    T MD 4 //MD4 erhält richtiges Adress-Bit-Muster
    AUF DB 1 //DB1 öffnen
    L 12345 //"Messwert"
    T DBW [MD 4] //Datenwort in DB1 schreiben
    L MD 4 //Wert aus dem MD4 laden
    SRD 3 //Schiebe rechts Doppelwort um 3 Bit
    L L#2 //DINT-Zahl 2 laden
    +D //DINT-Addition
    T MD 4 //Ergebnis der Addition geht ins MD4
    BEA
    M1: L L#0 //damit der nächste Messwert wieder ins DBW0 geht
    T MD 4

    Im DB1 ist ein Array für 20 INT-Werte angelegt.
    Wenn das Schreiben der Messwerte mit genau 2s Abstand erfolgen soll, würde ich den OB35 nehmen und ihn auf 2s einstellen.


    Gruß
    Earny

  6. #6
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe noch eine Lösung in SCL:

    FUNCTION FC1:VOID
    IF Nummer >= 40 THEN //20 Messwert
    Nummer :=0;
    Else;
    DB1.DW[Nummer]:=12345; //Nummer hat Datentyp INT (Symboltabelle)
    Nummer:=Nummer + 2;
    END_IF;
    END_FUNCTION

    Die FC1 wird wieder aus dem OB35 aufgerufen.

    Gruß
    Earny

Ähnliche Themen

  1. SM331 Falscher Messwert
    Von Erisch im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 14.09.2009, 20:33
  2. Zählimpuls als Messwert anzeigen
    Von M.R. im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 30.04.2009, 12:25
  3. ET200S: 2AI TC - Messwert ist falsch
    Von Markus im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 02.03.2009, 19:04
  4. Antworten: 1
    Letzter Beitrag: 11.06.2008, 11:17
  5. Messwert Erfassung mit S7
    Von niox im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 22.11.2006, 11:20

Lesezeichen

Berechtigungen

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