Bitte hilfe (S7 Lite) Inkrmente auslesen und vergleichen

maxi

Level-2
Beiträge
2.834
Reaktionspunkte
127
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
bräuchte dringend eure Hilfe.

Verwende nun gerade bei diesen PC Step 7 Lite und da alles so ungewöhnlich ist verhaue ich mich bei den einfachsten Sachen.
Stell mich gerade also bissel zu Dummi an.

1. Ich lese eien Inkremnt ein und Zähle mit einen Zähler rauf und runter.
Transferiere es in ein Datenword. (Das Funktioniert)

2. Ich will alle 300ms auswerten ob der Motor sich noch bewegt oder ob er steht.

Wie ich es machen wollte: Den Wert alle 300ms +20 (+I) nehmen und nach Ablauf der Zeit (Timer SE) auf <=I Vergleichen.
Irgendwie will es verflixt nochmal nicht funktionieren. Tue da echt schon eien Stunde rum und zweifel schon bissel an der einfachen Abfrage,







Währe toll wenn ihr schnell Hilfe hättet und ich es morgen früh hin bekomme.

Dicke Grüsse und einen schönen Abend euch wünsche.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      U     M     10.0
      UN    M     11.0
      L     DB1.DBW    0
      L     15
      +I    
      T     DB1.DBW    6
      S     M     12.0
      S     M     11.0
 
      U     M     10.0
      U     M     11.0
      L     S5T#300MS
      SE    "Timer_Rollo_Auf"
 
      U     M     10.0
      U     M     11.0
      U     "Timer_Rollo_Auf"
      SPB   M001
      SET   
      SPB   M002
M001: L     DB1.DBW    0
      L     DB1.DBW    6
      <=I   
      R     M     12.0
 
M002: U     M     10.0
      U     M     11.0
      U     "Timer_Rollo_Auf"
      R     M     11.0


Irgendwie bin ich da heute zu doofi für.
HAbe aber schon rumgetrickeselt hin und her dran.


M 10.0 ist der Startmerker
M 12.0 ist der MErker der den Ausgang Steuert
M 11.0 ist ein Hilfsmerker
 
Code:
      U     M     10.0
      UN    M     11.0
      =     L      0.0
      U     L      0.0
      SPBNB _002
      L     DB1.DBW    0
      L     15
      +I    
      T     DB1.DBW    6
_002: NOP   0
      U     L      0.0
      BLD   102
      S     M     11.0
      U     L      0.0
      BLD   102
      S     M     12.0


Ah schon einen Fehler gefunden :)
 
Zuletzt bearbeitet:
Und jetzt noch den Vergleich und die Rücksetzbedingungen dazu, dann könnte es funktionieren. Wer bzw. was hat die Codesequenz generiert? Denn

Code:
002: NOP   0
     U     L      0.0
     BLD   102
     S     M     11.0
     U     L      0.0
     BLD   102
     S     M     12.0
kann auch geschrieben werden:

Code:
002: U     L      0.0
     S     M     11.0
     S     M     12.0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, danke.
Die Rücksetzbedingungen sind wo anders schon eingebracht (1 Netzwerk weiter)

Das oben genannte entstand beim Umwandeln von FUP in AWL
Ich hatte vergessen das ich in AWL immer einen VKE 1 bei einen Lade Befehl habe. Also immer einen Sprung brauche.
Das BLD generiert er oft beim Umwandeln von FUP in AWL das ist nur für Visualisierungen etc. und kann an sich ignoriert werden.

Grüsse
 
Funktioniert immer noch ned.
Irgendwie läft der Timer nur 1 mal und wird auch nur ein mal der Wert + bzw - 50 in den db geschrieben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schon da dran rumgebastelt.
Es muss ein einfacher Fehler sein, aber irgendwie kapier ichs momentan nicht. Arbeite zum ersten mal mit Lite, hatte bisher mit 5.3.

Währe sehr toll wenn du nachsiehst wo mein Fehler steckt. Helfe dir auch natürlich gerne mal. FU`s, Motoransteuerungen und Datenbanken in SPS ist mein Steckenpferd.

Grüsse
Code:
      UN    M     10.0
      FR    "Timer_Rollo_Zu"
      U     M     10.0
      UN    M     11.0
      UN    "Timer_Rollo_Zu"
      =     L      0.0
      U     L      0.0
      SPBNB _002
      L     DB1.DBW    0
      L     50
      -I    
      T     DB1.DBW    6
_002: NOP   0
      U     L      0.0
      BLD   102
      S     M     11.0
      U     L      0.0
      BLD   102
      S     M     12.0

      U     M     10.0
      U     M     11.0
      L     S5T#1S
      SE    "Timer_Rollo_Zu"
      U     "Timer_Rollo_Zu"
      =     M     14.0

      UN    M     11.0
      R     "Timer_Rollo_Zu"
      UN    "Timer_Rollo_Zu"
      SPB   M002
 
M001: SET   
      L     DB1.DBW    0
      L     DB1.DBW    6
      >=I   
      R     M     12.0
      R     M     11.0
      R     "Timer_Rollo_Zu"

M002: SET   
      U     "Timer_Rollo_Zu"
      O     M     14.0
      R     M     11.0
      R     "Timer_Rollo_Zu"
 
Habe jetzt mal eine Version geschrieben, die bei mir in etwas das tut, was gefordert ist. Überwacht wird die Bewegung in zwei Richtungen (Inkrmente hoch oder runter). Wenn das nicht erforderlich ist, einfach rauswerfen. Die Operanden einfach anpassen. In meinem Beispiel ist alles ok, wenn M 100.2 gesetzt ist, d.h. mindestens eine Richtung war erfolgreich.
Code:
// Vorbedingungen:
// in DW 0 steht der Wert mit den aktuellen Incrementen
// in DW 6 steht der Wert mit der zu prüfenden Obergrenze (auf)
// in DW 8 steht der Wert mit der zu prüfenden Untergrenze (zu)

      UN    T      3                    // Zeit läuft noch
      SPB   Ende                        // Dann ist im Augenblick nichts zu tun

// Grenzwert für auf prüfen
      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     DB2.DBW    6                // Aktuellen Sollwert (auf) laden
      <I                                // Istwert hat Mindestincs nicht erreicht
      =     M    100.0                  // Wir merken uns den Fehler

// Grenzwert für zu prüfen
      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     DB2.DBW    8                // Aktuellen Sollwert (zu) laden
      >I                                // Istwert hat Mindestincs nicht erreicht
      =     M    100.1                  // Wir merken uns den Fehler

// Neue Grenzwerte berechnen
      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     50                          // Anzahl Mindextinkremente
      +I                                // Neuen Sollwert (auf) ausrechen ...
      T     DB2.DBW    6                // ... und merken

      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     50                          // Anzahl Mindextinkremente
      -I                                // Neuen Sollwert (zu) ausrechen ...
      T     DB2.DBW    8                // ... und merken

// Timer auf jeden Fall neu starten, dies erfolgt mit Flankenwechsel am Eingang
      L     S5T#1S
      CLR   
      SE    T      3
      SET   
      SE    T      3

Ende: ON    M    100.0                  // Bewegung auf
      ON    M    100.1                  // Bewegung zu
      =     M    100.2                  // Alles ok
 
Ah tolol,
er übrprüft bei dir dann jede Sekunde die Inkremnte oder?

Ah ja,
du machst es von der anderen Seite aus. Du übrüfüfst ob er die Strecke auch gefahren hat. Das ist sehr gut.
Ich glaube das kann ich verwenden.
 
maxi schrieb:
Ah tolol,
er übrprüft bei dir dann jede Sekunde die Inkremnte oder?
Ja, ist aber einstellbar. Einfach die geladene Zeit verändern.

Ah ja,
du machst es von der anderen Seite aus. Du übrüfüfst ob er die Strecke auch gefahren hat. Das ist sehr gut.
Ich glaube das kann ich verwenden.
Freut mich wenn es hilft. Ich dachte halt, der Motor dreht sich sicher nicht nur in eine Richtung.
 
maxi schrieb:
Sehr super. Und auch tolle beschrieben.
Muss der Timer aber nicht irgendwo einmal angeschubst werden oder so?
Prima erkannt. Bei dieser Implementierungsart kann es sein, dass im ersten Durchlauf ein Fehler erscheint, da die OG und UG nicht berechnet sind. Grundsätzlich ging ich davon aus, dass der Timer nicht läuft, also gleich die Prüfung erfolgt (erstmaliger Fehler vorprogrammiert!!) und dann der Timer neu gestartet wird. Ab da ist dann alles in Butter.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Rainer Hönle schrieb:
Habe jetzt mal eine Version geschrieben, die bei mir in etwas das tut, was gefordert ist. Überwacht wird die Bewegung in zwei Richtungen (Inkrmente hoch oder runter). Wenn das nicht erforderlich ist, einfach rauswerfen. Die Operanden einfach anpassen. In meinem Beispiel ist alles ok, wenn M 100.2 gesetzt ist, d.h. mindestens eine Richtung war erfolgreich.
Code:
// Vorbedingungen:
// in DW 0 steht der Wert mit den aktuellen Incrementen
// in DW 6 steht der Wert mit der zu prüfenden Obergrenze (auf)
// in DW 8 steht der Wert mit der zu prüfenden Untergrenze (zu)
 
      UN    T      3                    // Zeit läuft noch
      SPB   Ende                        // Dann ist im Augenblick nichts zu tun
 
// Grenzwert für auf prüfen
      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     DB2.DBW    6                // Aktuellen Sollwert (auf) laden
      <I                                // Istwert hat Mindestincs nicht erreicht
      =     M    100.0                  // Wir merken uns den Fehler
 
// Grenzwert für zu prüfen
      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     DB2.DBW    8                // Aktuellen Sollwert (zu) laden
      >I                                // Istwert hat Mindestincs nicht erreicht
      =     M    100.1                  // Wir merken uns den Fehler
 
// Neue Grenzwerte berechnen
      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     50                          // Anzahl Mindextinkremente
      +I                                // Neuen Sollwert (auf) ausrechen ...
      T     DB2.DBW    6                // ... und merken
 
      L     DB2.DBW    0                // Aktuellen Istwert laden
      L     50                          // Anzahl Mindextinkremente
      -I                                // Neuen Sollwert (zu) ausrechen ...
      T     DB2.DBW    8                // ... und merken
 
// Timer auf jeden Fall neu starten, dies erfolgt mit Flankenwechsel am Eingang
      L     S5T#1S
      CLR   
      SE    T      3
      SET   
      SE    T      3
 
Ende: ON    M    100.0                  // Bewegung auf
      ON    M    100.1                  // Bewegung zu
      =     M    100.2                  // Alles ok

Aber den Zähler selbst überspring er nicht jedesmal oder?
Wel am Anfang ist er ja 0 und springt immer nach Ende:
Ich teste es nacher gleich aus, frage nur noch damit ich es auch kapiere.
 
maxi schrieb:
Aber den Zähler selbst überspring er nicht jedesmal oder?
Wel am Anfang ist er ja 0 und springt immer nach Ende:
Ich teste es nacher gleich aus, frage nur noch damit ich es auch kapiere.
Ich ging davon aus, dass der aktuelle Zählerwert korrekt im DW 0 steht. Die Zählerei funktionierte ja. Hier ist nur die Weiterverarbeitung dokumentiert.
 
Ah meine den Timer.

Die Zählerei funktioniert perfekt.
Da habe ich eien sehr guten Baustein für geschrieben. kann ich dir schicken.

Meinte weil der Timer am Anfang ja aus ist und wenn er immer auf UN T1 das SPB Ende macht.
Wird den der überhaupt dann angestossen?
 
Sorry, aber bei mir läuft das Ganze wie geschmiert und startet sich immer wieder. Wie sieht denn die momentane Lösung aus? Vielleicht Projekt per pn schicken.
 
Zurück
Oben