Messwert in DB Schreiben

M.R.

Level-1
Beiträge
80
Reaktionspunkte
1
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.
 
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
 
Zuletzt bearbeitet:
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
 
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
 
Zurück
Oben