Probleme mit FILO ....

Boxy

Level-3
Beiträge
1.440
Reaktionspunkte
138
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen,

bin gerade hier im Ausland und meine Kunde hat mal wieder so eine tolle Idee, bzw. die "Operator's" hier an der Maschine.

Wir haben hier ein Messgerät, welches 4 Messstellen (Real-Werte) ausliest und in einen DB abspeichert. Nun möchte dieser Kunde eine Anzeige mit den letzten 30 oder 50 Messungen. Also eine Messung in der Anziege soll immer MP1 ... MP4 sein.

Habe mir gedacht, machst das mit einem FILO und basta.

Leider habe ich da gerade ein kleines Problem und komme nicht weiter.
Die Messwerte werden nicht richtig weitergeschoben im Puffer.

Es sind also immer 4 DBD's die nach hinten geschoben werden sollen.


Code:
      U     "messen_fertig"
      FP    "m_res_420_0"
      SPBN  enwe
      L     "DI173_MESSWERTÜBER_MARP".MESSUNG[1].MESSWERT
      T     "DB273".Messung[1].MP1
      L     "DI173_MESSWERTÜBER_MARP".MESSUNG[2].MESSWERT
      T     "DB273".Messung[1].MP2
      L     "DI173_MESSWERTÜBER_MARP".MESSUNG[3].MESSWERT
      T     "DB273".Messung[1].MP3
      L     "DI173_MESSWERTÜBER_MARP".MESSUNG[4].MESSWERT
      T     "DB273".Messung[1].MP4
 
      AUF   "DB273"                     //Typ: Block_DB
      L     100                         //Typ: INT
      L     1
      -I    
      T     "DB273".index               //Typ: DINT
anf:  NOP   0                           //Schleifenanfang
      L     "DB273".index
      SLD   3                           //pointer erzeugen
      LAR1                              //in das Adressregister laden
      L     DBB [AR1,P#0.0] 
      T     DBB [AR1,P#4.0]
      L     DBB [AR1,P#1.0]
      T     DBB [AR1,P#5.0]
      L     DBB [AR1,P#2.0]
      T     DBB [AR1,P#6.0]
      L     DBB [AR1,P#3.0]
      T     DBB [AR1,P#7.0]

      L     "DB273".index
      L     1
      -I                                //Index um 1 verringern
      T     "DB273".index
      L     1
      +I    
      L     0                           //Typ: INT
      <=I                               //prüfen ob fertig
      SPB   enwe                        //wenn ja ende
      SPA   anf                         //sonst schleife wiederholen
enwe: NOP   0


Beim Pointer habe ich es auch mit

L DBD [AR1,P#0.0]
T DBD [AR1,P#4.0]

versucht umd komme nicht weiter gerade. So habe ich es mit der Byt-Adresse versucht, aber auch ohne erfolg.


Hoffe mir kann einer schnell helfen :confused:

THX
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lifo

Hi,
ohne zu wissen, wie der DB aussieht, ist es schwer zu sagen
wie das Ding läuft. Fängst Du mit Index 99 im AR1 und gehst zurück ???
Komisch irgendwie.
-es gibt auch die Schleifenanweisung "LOOP"
-es gibt eine schöne Funktion im TI Library, FC84 , ATT
"Die Funktion Wert in Tabelle eintragen (ATT) ergänzt den Parameter DATA als nächsten Eintrag in einer Tabelle und erhöht die Anzahl der Einträge um einen Eintrag. Die Tabelle besteht aus Wörtern. Mit der Funktion ATT können Sie Tabelleneinträge erstellen, die von den Funktionen FIFO und LIFO verwendet werden."
-BlckMove ist auch gut, wie der Kollege "oben" schon sagte

Gruss: Vladi

P.S. Kann es sein, das die Messwerte zuerst gespeichert werden, und dann geschoben wird?
Das wäre nicht gut...
 
Zuletzt bearbeitet:
Ohne den Code gelesen zu haben.

Es geht ganz einfach mit dem SFC20, BlckMove.

pt


Das man das ganze von Hand ausprogrammieren kann ist mir schon klar.
Aber ich möchte nicht 30 oder 50 mal den SFC20 hintereinander aufrufen.

Es soll im Prinzip ja ein Schiebespeicher werden wo der älteste Bereich mit den 4 ältesten Messwerte rausfällt.

@Valdi,

der Gedanke war,

von hinten die her die Datenworte umzukopieren.

Also


Tabellenplatz 29 --> fällt raus (wird überschrieben)
Tabellenplatz 28 --> Tabellenplatz 29
Tabellenplatz 27 --> Tabellenplatz 28
Tabellenplatz 26 --> Tabellenplatz 27
Tabellenplatz 25 --> Tabellenplatz 26
...
Tabellenplatz 04 --> Tabellenplatz 05
Tabellenplatz 03 --> Tabellenplatz 04
Tabellenplatz 02 --> Tabellenplatz 03
Tabellenplatz 01 --> Tabellenplatz 02

4 neue Messwerte in Tabellenplatz 1 einspeichern.
(Jeder Messwert ist ein DBD also Real Wert)

Der Tabellenplatz sieht folgend aus:

[MP1-Real][MP2-Real][MP3-Real][MP4-Real]

Also 4 Real-Werte oder 4 DBD's

fertig ...

Dann bei Ende der nächsten Messung alles wieder von vorne.

Habe mir auch einmal den genannten FC84 angeschaut. Ist aber nicht die Funktion die ich benötige und ist nur für Wörter ausgelegt.
 
Sfc20

Wer programmiert hier etwas von Hand aus?

- Neue Werte
- SFC20 verschiebe Daten um x Byte nach unten
- speichere neue Daten am Anfang der Tabelle
- Ende

Gruß pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ohne das ich mir das jetzt genau ansehe.

auf der homepage von volker findest du unter sps/s7-bausteine einen filo (fifo_blk.zip) für datenblöcke. alles frei einstellbar (grösse des blocks, anzahl der blöcke).

der funktioniert.

EDIT:
doch kurz drübergeschaut. ;)
die erhöhung des schleifenindex ist nicht korrekt.
 
Zuletzt bearbeitet:
Daten schieben

Hi,

SFC 20 :Überlappung von Bereiche nicht zulässig.

aber so vielleicht(mit der Flanke der Messung):
-zuerst Daten in einem zweiten DB speichern
-diese wieder in den ersten speichern, nur um 4 DWORD verschoben
-ganz oben die neuen Werte platzieren

Code:
CALL  "BLKMOV"
       SRCBLK :=P#DB100.DBX 0.0 REAL 50
       RET_VAL:=MW10
       DSTBLK :=P#DB101.DBX 0.0 REAL 50

CALL  "BLKMOV"
       SRCBLK :=P#DB101.DBX 0.0 REAL 50
       RET_VAL:=MW10
       DSTBLK :=P#DB100.DBX 16.0 REAL 50
 
hier die neuen Werte abspeichern...

Mit der Länge der Bausteine aufpassen! :)

Gruss: Vladi
 
FILO heißt First In Last Out, das würde bedeuten die neuesten Ergebnisse fallen zuerst raus, Du möchtest aber daß die ältesten rausfallen, also brauchst Du ein FIFO (First In First Out).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FILO heißt First In Last Out, das würde bedeuten die neuesten Ergebnisse fallen zuerst raus

falsch! englisch sprache, schwere sprache

First=zuerst
in=rein
Last=zuletzt (nicht zuerst)
out=raus

also FILO ist in dieser Anwendung schon richtig, kein FIFO

gruss, o.s.t.
 
Zuletzt bearbeitet:
Filo, Lifo, Fifo, Papa, Mama, Oma

Hi,
sind wir hier in Deutsch/Englisch Unterricht, oder was? :ROFLMAO:

Eigentlich ist das vom @Boxy keins davon, er möchte einfach ein
Umlaufspeicher mit Fixlänge für x Werte.

Gruss an alle Teacher:
Vladi
 
Ringspeicher und Stack

Hallo,

da kann man schon mal durcheinanderkommen, mit diesen Denglischen Fachausdrücken aus der DIN-Norm!
Aber es bleibt dabei:
Der Ringspeicher (vorn rein, hinten raus, oft mit fester Länge) heißt FIFO, und der Stack (Stapel mit variabler Länge, oben drauf, oben runter) heißt FILO.
 
Aber jetzt

Hi,

und dann heisst es auch: der Kollege mit seiner Abfrage(@Boxy)
macht ein Ring(od.Umlauf) Speicher, wo die älteste Daten rausfallen,
also prinzipiell ein FIFO, bei welchem zuerst X mal aufgefüllt wird, und "rausgeholt" wird dann, wenn er voll ist!
Gruss an alle FILOs...:ROFLMAO:

Vladi
 
Hilfe lesen

Hi,
Und der SFC 20 kann auch überlappen, nur die Hilfe richtig lesen, ich habe schon die dollsten Schieberegister usw. mit dem realisiert.
Und er will einen FIFO das ist auch mal klar.
pt

Auszug aus Online-Hilfe:
"Hinweis:Quell- und Zielfeld dürfen sich nicht überlappen. Ist das angegebene Zielfeld größer als das Quellfeld, dann werden auch nur so viele Daten in das Zielfeld kopiert, wie im Quellfeld stehen.Ist das angegebene Zielfeld kleiner als das Quellfeld, dann werden nur so viele Daten kopiert, wie das Zielfeld aufnehmen kann...... "

Wenn es doch geht, ist super, werde ich mir merken.

Gruss: Vladi
 
Der SFC20 ist ja nichts anderes als das was oben als Code steht.

Ich glaube, wenn ich die Tabelle um z.B. 4 Byte nach unten kopiere, dann gibt es keine Datenkollision, da der SFC an der untersten Adresse anfängt zu kopieren. Habe hier leider kein S7 am Platz.

Gruß, pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
dazu möchte ich auch noch mal auf diesen beitrag verweisen. :)
http://www.sps-forum.de/showthread.php?t=8887

hier mal der fifo für datenblöcke.
für die die zu faul sind das runterzuladen.:ROFLMAO:
Code:
FUNCTION FC 98 : INT
TITLE =FIFO für Datenblöcke V1.1 von V.Lischnewski (siehe Kommentar)
//FIFO für Datenblöcke
//
//(c) by [URL="http://www.Lischis-Home.de"]www.Lischis-Home.de[/URL]
//Sie dürfen diesen Baustein frei nutzen.
//Wenn sie diesen Code nutzen fände ich es korrekt, wenn sie diesen 
//Kommentar/Coppyrightvermerk nicht löschen.
//
//Beispiel: Blöcke=4; Länge pro Block=2 byte
//
//ziel            __\ byte1 \________________
//               |  / byte2 /                |
//               |    byte3 \_________    /__|3.
//               |    byte4 /         |   \
//               |    byte5 \__    /__|2.
//               |    byte6 /  |   \
//               |    byte7 /__|1.
//               |    byte8 \
//               |
//               |
//quelle       4.|__/ byte1
//                  \ byte2
//
//Ablauf: 
//1. zielbyte 5/6 wird nach zielbyte 7/8 kopiert
//2. zielbyte 3/4 wird nach zielbyte 5/6 kopiert
//3. zielbyte 1/2 wird nach zielbyte 3/4 kopiert
//4. quellbyte 1/2 wird nach zielbyte 1/2 kopiert
AUTHOR : Lischnew
FAMILY : ARCHIV
NAME : FIFO_Blk
VERSION : 1.1
 
VAR_INPUT
  Quelle_DB : INT ; //Quelle Datenbaustein
  Quelle_Anfang : INT ; //Quelle Anfangsadresse
  Blockgroesse : INT ; //Anzahl Bytes pro Datenblock
  Anzahl_Bloecke : INT ; //Anzahl der Datenblöcke
  Ziel_DB : INT ; //Ziel Datenbaustein
  Ziel_Anfang : INT ; //Ziel Anfangsadresse
END_VAR
VAR_TEMP
  QANY : ANY ; //ANY-Zeiger Quelle
  ZANY : ANY ; //ANY-Zeiger Ziel
  QAnfang_schleife : INT ; 
  ZAnfang_schleife : INT ; 
  schleifenindex : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =vorbelegen
      NOP   0; 
      L     #Anzahl_Bloecke; 
      T     #schleifenindex; 
sanf: NOP   0; 
// quelle
      L     #schleifenindex; 
      L     2; 
      -I    ; 
      L     #Blockgroesse; 
      *I    ; 
      L     #Ziel_Anfang; 
      +I    ; 
      T     #QAnfang_schleife; 
// ziel
      L     #schleifenindex; 
      L     1; 
      -I    ; 
      L     #Blockgroesse; 
      *I    ; 
      L     #Ziel_Anfang; 
      +I    ; 
      T     #ZAnfang_schleife; 
NETWORK
TITLE =Verschieben; Zusammenstellung des Quellzeigers
      L     W#16#1002; 
      T     LW     0; 
      L     #Blockgroesse; 
      T     LW     2; 
      L     #Ziel_DB; 
      T     LW     4; 
      L     #QAnfang_schleife; 
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD     6; 
NETWORK
TITLE =Verschieben; Zusammenstellung des Zielzeigers
      L     W#16#1002; 
      T     LW    10; 
      L     #Blockgroesse; 
      T     LW    12; 
      L     #Ziel_DB; 
      T     LW    14; 
      L     #ZAnfang_schleife; 
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD    16; 
NETWORK
TITLE =Verschieben; Datenbereich kopieren
      CALL SFC   20 (
           SRCBLK                   := #QANY,
           RET_VAL                  := #RET_VAL,
           DSTBLK                   := #ZANY);
NETWORK
TITLE = Schleifenende
      NOP   0; 
      L     #schleifenindex; 
      L     1; 
      -I    ; 
      T     #schleifenindex; 
      L     0; 
      <=I   ; 
      SPB   ndat; 
      SPA   sanf; 
NETWORK
TITLE =Neue Daten; Zusammenstellung des Quellzeigers
ndat: NOP   0; 
      L     W#16#1002; 
      T     LW     0; 
      L     #Blockgroesse; 
      T     LW     2; 
      L     #Quelle_DB; 
      T     LW     4; 
      L     #Quelle_Anfang; 
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD     6; 
NETWORK
TITLE =Neue Daten;  Zusammenstellung des Zielzeigers
      L     W#16#1002; 
      T     LW    10; 
      L     #Blockgroesse; 
      T     LW    12; 
      L     #Ziel_DB; 
      T     LW    14; 
      L     #Ziel_Anfang; 
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD    16; 
NETWORK
TITLE =Neue Daten;  Datenbereich kopieren
      CALL SFC   20 (
           SRCBLK                   := #QANY,
           RET_VAL                  := #RET_VAL,
           DSTBLK                   := #ZANY);
END_FUNCTION
ORGANIZATION_BLOCK OB 1
TITLE =
VERSION : 0.0
 
VAR_TEMP
  OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE ; //1 (Priority of 1 is lowest)
  OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE ; //Reserved for system
  OB1_RESERVED_2 : BYTE ; //Reserved for system
  OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
  positive_Flanke : BOOL ; 
END_VAR
BEGIN
NETWORK
TITLE =
      U     E      0.0; //daten eintragen
      FP    M     99.0; //flanke
      =     M     99.1; 
NETWORK
TITLE =fifo für blöcke
      U     M     99.1; 
      SPBNB _001; 
      CALL FC    98 (
           Quelle_DB                := 10,
           Quelle_Anfang            := 1,
           Blockgroesse             := 2,
           Anzahl_Bloecke           := 3,
           Ziel_DB                  := 11,
           Ziel_Anfang              := 1,
           RET_VAL                  := MW   100);
_001: NOP   0; 
NETWORK
TITLE =fifo für byte
      U     #positive_Flanke; 
      SPBNB _002; 
      CALL FC    95 (
           Datenbaustein            := DB    11,
           Datenanfang              := 2,
           Datenende                := 4,
           Eintrag                  := MB     3);
_002: NOP   0; 
NETWORK
TITLE =fifo für doppelwort
      U     #positive_Flanke; 
      SPBNB _003; 
      CALL FC    96 (
           Datenbaustein            := DB    11,
           Datenanfang              := 6,
           Datenende                := 8,
           Eintrag                  := MW     4);
_003: NOP   0; 
NETWORK
TITLE =fifo für wort
      CALL FC    97 (
           Datenbaustein            := DB    11,
           Datenanfang              := 8,
           Datenende                := 16,
           Eintrag                  := MD     8);
      NOP   0; 
END_ORGANIZATION_BLOCK
 
Danke Kollegen ...

Also ich melde mich jetzt wieder zu Wort, nachdem ich mal das Problem gelöst habe.

Ob FILO oder FIFO oder LIFO ist doch egal. Aber jedenfalls danke das Ihr euch meines Problems angenommen habt und ich nicht so alleine in der weiten Welt bin :)

Also mit dem SFC20 kann man es vergessen, so wie ich es mir vorgestellt habe. Ich möchte einfach nicht viele DB's verwenden, da die Asiaten hier nacher mehr Probleme damit haben könnten es zu verstehen. Daher sollte es eigentlich einfch sein. Es reicht schon wenn sie nicht einmal Simatic schreiben können und wenn es Probleme gibt, immer gleich einen Ghost auf die PCU spielen wollen. Dabei hat halt die PCU nichts mit der PLC zu tun :ROFLMAO:

Aber ich habe es nun folgend gelöst:

Code:
      U     "m_e3_daten_gültig"
      FP    "m_res_420_0"
      SPBN  enwe
 
 
      AUF   "DB273"
      LAR1  P#DBX 10.0                  //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP1:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP1
//-----
      LAR1  P#DBX 50.0                  //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP2:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP2

//-----
      LAR1  P#DBX 90.0                  //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP3:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP3
//-----
      LAR1  P#DBX 130.0                 //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP4:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP4

      L     "DI73_MESSWERTÜBER".MESSUNG[1].MESSWERT
      T     "DB273".MP1_Messung[1].MP1
      L     "DI73_MESSWERTÜBER".MESSUNG[2].MESSWERT
      T     "DB273".MP2_Messung[1].MP2
      L     "DI73_MESSWERTÜBER".MESSUNG[3].MESSWERT
      T     "DB273".MP3_Messung[1].MP3
      L     "DI73_MESSWERTÜBER".MESSUNG[4].MESSWERT
      T     "DB273".MP4_Messung[1].MP4

enwe: NOP   0

Dabei habe ich den Speicher nun wegen Anzeige auf HMI RT etwas aufgeteilt. Es sind nun nicht alle Messwerte hintereinander, sondern jeder hat seinen Bereich.
 
Danke ....

Also ich melde mich jetzt wieder zu Wort, nachdem ich mal das Problem gelöst habe.

Ob FILO oder FIFO oder LIFO ist doch egal. Aber jedenfalls danke das Ihr euch meines Problems angenommen habt und ich nicht so alleine in der weiten Welt bin :)

Also mit dem SFC20 kann man es vergessen, so wie ich es mir vorgestellt habe. Ich möchte einfach nicht viele DB's verwenden, da die Asiaten hier nacher mehr Probleme damit haben könnten es zu verstehen. Daher sollte es eigentlich einfch sein. Es reicht schon wenn sie nicht einmal Simatic schreiben können und wenn es Probleme gibt, immer gleich einen Ghost auf die PCU spielen wollen. Dabei hat halt die PCU nichts mit der PLC zu tun :ROFLMAO:

Aber ich habe es nun folgend gelöst:

Code:
      U     "m_e3_daten_gültig"
      FP    "m_res_420_0"
      SPBN  enwe
 
 
      AUF   "DB273"
      LAR1  P#DBX 10.0                  //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP1:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP1
//-----
      LAR1  P#DBX 50.0                  //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP2:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP2

//-----
      LAR1  P#DBX 90.0                  //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP3:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP3
//-----
      LAR1  P#DBX 130.0                 //Startwert wo Daten beginnen
      L     DBD [AR1,P#0.0]             // Startwert eintragen
      T     #vt_mpw
      L     9                           // 1+9 weitere = 10 Messwerte
MP4:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
      L     #vt_mpw
      L     DBD [AR1,P#4.0]
      T     #vt_mpw                     // Zwischenspeichern
      TAK   
      T     DBD [AR1,P#4.0]             // Umspeichern
      +AR1  P#4.0                       // um 1 DBD erhöhen
      L     #vt_schleifenzaehl
      LOOP  MP4

      L     "DI73_MESSWERTÜBER".MESSUNG[1].MESSWERT
      T     "DB273".MP1_Messung[1].MP1
      L     "DI73_MESSWERTÜBER".MESSUNG[2].MESSWERT
      T     "DB273".MP2_Messung[1].MP2
      L     "DI73_MESSWERTÜBER".MESSUNG[3].MESSWERT
      T     "DB273".MP3_Messung[1].MP3
      L     "DI73_MESSWERTÜBER".MESSUNG[4].MESSWERT
      T     "DB273".MP4_Messung[1].MP4

enwe: NOP   0

Dabei habe ich den Speicher nun wegen Anzeige auf HMI RT etwas aufgeteilt. Es sind nun nicht alle Messwerte hintereinander, sondern jeder hat seinen Bereich.
 
Zurück
Oben