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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: Probleme mit FILO ....

  1. #1
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.346
    Danke
    28
    Erhielt 131 Danke für 118 Beiträge

    Standard


    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

    THX
    Zitieren Zitieren Probleme mit FILO ....  

  2. #2
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard

    Ohne den Code gelesen zu haben.

    Es geht ganz einfach mit dem SFC20, BlckMove.

    pt
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

  3. #3
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Rotes Gesicht

    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...
    Geändert von vladi (29.11.2006 um 10:25 Uhr) Grund: Ergänzung
    ______________________________________
    relax, take it easy
    Zitieren Zitieren Lifo  

  4. #4
    Boxy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.346
    Danke
    28
    Erhielt 131 Danke für 118 Beiträge

    Standard

    Zitat Zitat von plc_tippser Beitrag anzeigen
    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.

  5. #5
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard

    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
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.
    Zitieren Zitieren Sfc20  

  6. #6
    Registriert seit
    18.09.2006
    Beiträge
    231
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    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.
    Geändert von KalEl (30.11.2006 um 09:05 Uhr)
    .
    mfg KALEL

    Wer über gewisse Dinge nicht den Verstand verliert, der hat keinen zu verlieren.
    Gottfried Ephraim Lessing

  7. #7
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Idee

    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
    ______________________________________
    relax, take it easy
    Zitieren Zitieren Daten schieben  

  8. #8
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    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).

  9. #9
    Registriert seit
    27.11.2006
    Ort
    Ostschweiz
    Beiträge
    528
    Danke
    43
    Erhielt 86 Danke für 77 Beiträge

    Standard

    Zitat Zitat von Oberchefe Beitrag anzeigen
    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.
    Geändert von o.s.t. (30.11.2006 um 09:47 Uhr)

  10. #10
    Registriert seit
    28.06.2006
    Ort
    Königreich Neuseeland
    Beiträge
    2.027
    Danke
    133
    Erhielt 96 Danke für 76 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von o.s.t. Beitrag anzeigen
    falsch! englisch sprache, schwere sprache
    RICHTIG !
    Deutsche Sprache schwere Sprache!

    FILO = First In Last Out.

Ähnliche Themen

  1. Probleme AWL
    Von Geminon im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 14.07.2010, 09:53
  2. Probleme mit dem SFB 52
    Von Nicobius im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 06.02.2009, 03:08
  3. Probleme über Probleme!
    Von tom_2802 im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 12.06.2008, 22:19
  4. FI-Probleme
    Von mectron im Forum Schaltschrankbau
    Antworten: 15
    Letzter Beitrag: 11.02.2007, 13:29
  5. Probleme mit CPU 102 S5
    Von lorenz2512 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 27.01.2006, 04:44

Lesezeichen

Berechtigungen

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