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

Seite 8 von 10 ErsteErste ... 678910 LetzteLetzte
Ergebnis 71 bis 80 von 99

Thema: Mit Pointer in Ringregister schreiben

  1. #71
    Registriert seit
    23.07.2013
    Beiträge
    66
    Danke
    26
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Minico89 Beitrag anzeigen
    Jetzt möchte ich allerdings den "Zeiger_Ringpuffer" nicht in meinem FB105 laden, sondern in meinem DB3 "Register" auf der zweiten Stelle -> Anhang 21386 .
    Ich weiss nicht wie ich euch das erklären soll, aber ich hoffe ihr versteht was ich meine.
    Das hab ich hinbekommen naja, war ja auch net so schwer!


    Allerdings läuft alles gut bis ich Reset drücke, dann wird der erste Eintrag genullt und das wars. Drücke ich wieder auf meinen Taster um einen Eintrag zu schreiben, überschreibt es immer nur den ersten Eintrag wieder...

    Warum nur? Das soll nicht sein, ich will ja alle 5ms, vom ersten Eintrag an, Einträge löschen und wenn er bei Eintrag 2000 angekommen ist soll das Resetten stoppen bis es wieder betätigt wird...
    Geändert von Minico89 (05.08.2013 um 11:01 Uhr)

  2. #72
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    ohne das ich jetzt mal alles lese.
    wie sollte der puffer denn aussehen?
    du schreibst einen neuen datensatz und alle anderen sollen 1 nach unten geschoben werden?
    wenn dem so ist lad dir den baustein von meiner hp wie ich bereits im beitrag 2 geschrieben habe.Mit Pointer in Ringregister schreiben

    in dem paket ist ein fifo für datenblöcke der ganau das oben beschriebene macht.

    EDIT:
    habe den baustein mal als awl-quelle angehängt
    Angehängte Grafiken Angehängte Grafiken
    Angehängte Dateien Angehängte Dateien
    Geändert von volker (05.08.2013 um 11:14 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  3. #73
    Registriert seit
    23.07.2013
    Beiträge
    66
    Danke
    26
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke dir, aber das hilft mir leider nicht weiter. Ich bin absoluter SPS-neuling und fange so nach und nach erst an Zusammenhänge zu verstehen. Wenn da, wie in deinen Bausteinen, allgemeine Sachen stehen, kann ich diese noch nicht mit anderen Verknüpfen und weiss somit nicht was sie bedeuten... Tut mir leid. Ich brauche Eure Unterstützung wirklich genau für meinen Code, denn da weiss ich wenigstens halbwegs warum manche Sachen so geschrieben werden...

  4. #74
    Registriert seit
    23.07.2013
    Beiträge
    66
    Danke
    26
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Minico89 Beitrag anzeigen
    Allerdings läuft alles gut bis ich Reset drücke, dann wird der erste Eintrag genullt und das wars. Drücke ich wieder auf meinen Taster um einen Eintrag zu schreiben, überschreibt es immer nur den ersten Eintrag wieder...
    Warum nur? Das soll nicht sein, ich will ja alle 5ms, vom ersten Eintrag an, Einträge löschen und wenn er bei Eintrag 2000 angekommen ist soll das Resetten stoppen bis es wieder betätigt wird...
    Bitte zurück zu diesem Problem oder ich muss die CPU

  5. #75
    Registriert seit
    03.04.2008
    Beiträge
    6.205
    Danke
    237
    Erhielt 817 Danke für 691 Beiträge

    Standard

    Zitat Zitat von Minico89 Beitrag anzeigen
    Bitte zurück zu diesem Problem oder ich muss die CPU
    Das ist in deinem Fall wohl die einzige richtige Lösung.

    Hast du gelesen was dir Volker geantwortet hat?
    Er hat dir doch die Lösung hingeschrieben, ist es wirklich so schwer zu lesen UND verstehen?


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  6. #76
    Registriert seit
    23.07.2013
    Beiträge
    66
    Danke
    26
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja, es tut mir leid, aber SPS liegt mir anscheinend wirklich nicht... Und ich verstehe Volkers Lösung auch nicht. Er hat da als Beispiel doch einen FILO und ich brauche einen FiFo. Der Funktioniert ja auch ganz gut, bis auf die Reset-Funktion... Und die bekomme ich nicht gebacken, aufgrund dessen weil ich Anfänger bin!

  7. #77
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard

    Vielleicht wirst du einfach mal den Code Posten müssen oder wenigstens den stand
    bekanntgeben mit den du gerade arbeitest, ansonsten wird es schwer mit der Hilfe.

  8. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    Minico89 (05.08.2013)

  9. #78
    Registriert seit
    23.07.2013
    Beiträge
    66
    Danke
    26
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von rostiger Nagel Beitrag anzeigen
    Vielleicht wirst du einfach mal den Code Posten müssen oder wenigstens den stand
    bekanntgeben mit den du gerade arbeitest, ansonsten wird es schwer mit der Hilfe.
    Aber sicher doch...

    Code:
          U     #Speichern                  // IN: BOOL
          FP    #FM_Speichern               // STATIC: BOOL
          SPBN  Neu
    
    
          L     "Uhrzeit".Aktuell_Stunden
          T     #Temp_akt_h
    
          L     "Uhrzeit".Aktuell_Minuten
          T     #Temp_akt_m
    
          L     "Uhrzeit".Aktuell_Sekunden
          T     #Temp_akt_s
    
    
    
    
    
          AUF   #Register                   // IN: BLOCK_DB
    
    // Zeiger inkrementieren
          L     "Register".Zeiger_Ringpuffer    // Zeiger für Ringpuffer (STATIC: INT)
          +     1
          T     "Register".Zeiger_Ringpuffer    // Zeiger für Ringpuffer
    
    // Zeiger auf Überlauf prüfen
          L     #DS_Anzahl                  // maximale Anzahl an Datensätzen  (IN: INT,  Wert 10 über die Schnittstelle übergeben)
          L     "Register".Zeiger_Ringpuffer    // Zeiger für Ringpuffer
          <=I   
          SPBN  over
          L     0
    over: T     "Register".Zeiger_Ringpuffer    // Zeiger für Ringpuffer
    
    
    // Ereigniszähler inkrementiern
          L     #Ereigniszaehler            // Ereigniszähler  (STATIC: INT)
          +     1
          T     #Ereigniszaehler            // Ereigniszähler
    
    // AR1 sichern                            
          TAR1                              // AR1 in Akku1 laden
          T     #Sicherung_AR1              // und im Temp sichern (TEMP: DWORD )
    
    // Pointer erstellen
          L     "Register".Zeiger_Ringpuffer    // Zeiger für Ringpuffer
          L     #DS_Laenge                  // Datensatzlänge (IN: INT,  Wert 8 über die Schnittstelle übergeben)
          *I    
          L     #DS_Offset                  // Startadresse des Datenfeldes (IN: INT,  Wert 10 über die Schnittstelle übergeben)
          +I    
          SLD   3                           // berechneten Wert auf die Byteadresse schieben
          LAR1                              // und ins Adressregister 1 schreiben
    
    // Daten eintragen
          L     #Ereigniszaehler            // Ereigniszähler
          T     DBW [AR1,P#0.0]             // und wieder sichern
    
          L     #Temp_akt_h                 // Aktuelle Stunde 
          T     DBB [AR1,P#4.0]             // und in Ringpuffer sichern
    
          L     #Temp_akt_m                 // Aktuelle Minute 
          T     DBB [AR1,P#5.0]             // und in Ringpuffer sichern
    
          L     #Temp_akt_s                 // Aktuelle Sekunde 
          T     DBB [AR1,P#6.0]             // und in Ringpuffer sichern
    
    // AR1 wiederherstellen                            
          L     #Sicherung_AR1              // Gesicherten Wert laden
          LAR1                              // und ins AR1 zurückschreiben
    
    
    
    
    // Register ggf. resetten
    Neu:  U     #Reset                      // Öffner-Taster
          FN    #FM_Reset                   // deswegen negative Flanke
          S     #Reset_Aktiv                // Reset aktivieren
          S     #Next_DS
    
          U     #Next_DS                    // Nächsten Datensatz schreiben?
          SPBN  ende                        // Nein, dann zum Ende springen
    
          AUF   #Register                   // IN: BLOCK_DB
    
    // AR1 sichern                            
          TAR1                              // AR1 in Akku1 laden
          T     #Sicherung_AR1              // und im Temp sichern
    
    // Zeiger Ringpuffer initialisieren
          T     #Schleifenindex             // als Schleifenindex speichern
          T     "Register".Zeiger_Ringpuffer    // als Zeiger für Ringpuffer speichern
    
    // Pointer erstellen
          L     "Register".Zeiger_Ringpuffer    // Zeiger für Ringpuffer
          L     #DS_Laenge                  // Datensatzlänge
          *I    
          L     #DS_Offset                  // Startadresse des Datenfelde
          +I    
          SLD   3                           // berechneten Wert auf die Byteadresse schieben
          LAR1                              // und ins Adressregister 1 schreiben
    
    // Daten eintragen
          L     0                           // Wert 0
          T     DBD [AR1,P#0.0]             // ins 1. DWORD eintragen
    
          L     0                           // Wert 0
          T     DBD [AR1,P#4.0]             // ins 2. DWORD eintragen
    
    // Zeiger erhöhen
          L     #Schleifenindex             // Schleifenzähler laden,
          +     1                           // um 1 erhöhen
          T     #Schleifenindex             // und wieder speichern
          L     #DS_Anzahl                  // Max. Anzahl an Datensätzen laden
          >I                                // Wenn überschritten,
          SPBN  ARWH
          R     #Reset_Aktiv                // RESET deaktivieren
          L     0                           // Schleifenindex auf Null zurückstellen
          T     #Schleifenindex
    
    // AR1 wiederherstellen                            
    ARWH: L     #Sicherung_AR1              // Gesicherten Wert laden
          LAR1                              // und ins AR1 zurückschreiben
    
    ende: NOP   0
    
    // Startbedingungen Reset-Timer
          U     #Reset_Aktiv
          UN    #Next_DS                    // Nach nächstem Datensatz schreiben
          =     #Start_Reset_Timer          // Timer neu starten
    
    // RESET-Timer (Timer sollten möglichst nie übersprungen werden!)
          CALL  #Reset_Timer                // Timer aufrufen
           IN:=#Start_Reset_Timer
           PT:=#Reset_Zeit
           Q :=#Next_DS
           ET:=

  10. #79
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard

    Kann es sein das dein '#Reset_Aktiv' nicht korrekt zurückgesetzt wird?

  11. #80
    Registriert seit
    23.07.2013
    Beiträge
    66
    Danke
    26
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das scheint mir auch so... aber ich bin ja auch kein SPS-Genie so wie ihr...

Ähnliche Themen

  1. mit any pointer ein bit schreiben
    Von Limette im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 01.03.2012, 12:40
  2. Array in DB schreiben(any-pointer)
    Von Limette im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 28.10.2011, 22:17
  3. Störmledungsbaustein mit Pointer?!?
    Von CrazyMC im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 20.05.2010, 00:49
  4. Pointer als Out Variable Daten schreiben
    Von mkd im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 28.10.2009, 10:58
  5. Problem mit Pointer
    Von Mathias im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 06.02.2009, 10:03

Lesezeichen

Berechtigungen

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