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

Ergebnis 1 bis 10 von 10

Thema: Impulsfolge auswerten

  1. #1
    Registriert seit
    02.02.2007
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo ich bin relativ neu auf dem gebiet der SPS Programmierung und habe folgendes Problem:

    An dem Eingang E0.0 kommt das Signal einer Kette (50 Impulse por min.) dieser Eingang soll die Zeit zwischen den Signalen erfassen und durch 4 teilen und als Impuls wieder ausgeben.

    Beispiel: Wenn der Impuls der durch die Kette gegeben ist z.B. 100ms beträgt soll am Ausgang alle 25 ms ein kurzer Impuls erscheinen.

    Gibt es in Step7 einen Impulsvergleicher oder ähnliches der dies bewerkstäligen kann?
    Zitieren Zitieren Impulsfolge auswerten  

  2. #2
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.336
    Danke
    27
    Erhielt 130 Danke für 117 Beiträge

    Standard

    Hallo aus der ferne

    denke einmal Lösungen gibt es viele.

    Vorschlag 1:
    einen Zähler mit mit 4 vorbesetzen und mit der Pulsfolge zurückzählen.
    Bei Zähler 0, impuls ausgeben und Zähler wieder setzen. Somit ergibt sich ein Divisor (der sogar variabel ist).

    Vorschlag 2:
    mit der Pulsfolge ein Bit im Byte rotieren lassen und entsprechend Bit 3 und 7 abfragen und ein Impuls daraus erzeugen.

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    @Boxy

    Bist du sicher? Wenn du mit Pulsfolge den Eingang E0.0 meinst, dann wird das so nichts.

    @SPS Andy

    Du kannst natürlich immer nur nachfolgend deine Imulse teilen und ausgeben, will sagen die SPS kann nicht wissen wann der nächste Impuls kommt, also ist die Zeit die von der letzten Messung.

    Es gibt natürlich, wie immer, mehrere Möglichkeiten.

    1. Du kannst die Zeit mit einem Timer messen, daraus einen Integerwert machen, diesen durch 4 Teilen, daraus dann einen Zeitwert machen und mit diesem Zeitwert einen Blinker 4x blinken lassen. Danach wieder "aufsynchronisieren", und mit dem neuen "letzten" Zeitwert von E0.0 das ganze Spiel von vorne.

    2. Du nimmst den OB35. Dieser wird alle 10 ms aufgerufen. Darin zählst du einen Integerwert (Zählwert) hoch. Wenn der E0.0 auf 1 geht, kopierst du den Integerwert in eine andere Variable (Impulszahl) und setzt den Integerwert wieder auf Null. Die Impulsfolge teilst du durch 4. Jetzt kannst du mit diesem Teiler im OB35 deinen Impuls setzen.

    Bsp. 100ms zwischen E0.0-Impulsen ergeben bei 10ms OB35 im Zählwert eine 10. Das durch 4 ergibt 2,5 (also gerundet INT 2). Das heißt, daß du jeden 2. Zählwert im OB25 einen Impuls ausgebem mußt. Das ist leider etwas ungenau, aber bei 10ms Raster geht das nicht anders.

    Du machst also 2 Dinge im OB35, einmal das Zählen der Aufrufe des OB 35 zwischen 2 positiven Flanken des E0.0 und dann bei jedem X-ten dieser Aufrufe (das X ergibt sich aus der Teilung des alten Wertes durch 4), die Ausgabe eines Impulses.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    Er meint ne Frequenzvervierfachung, was ihr beschreibt läuft auf nen Frequentteiler raus.

    Kann mit nur vorstellen, dass die Zeit gemessen wird, und vorrausgesetzt die Impulse sind konstant, jeweils ein Rect -generator wird damit parametriert.

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    @kistumpe

    Genau darauf läuft mein Vorschlag 2 ja hinaus, oder verstehen wir uns da falsch?
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    ...sorry, natürlich - hats nur nicht auf Anhieb verstanden

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    @kistumpe

    Kein Problem, ich hab nur auch gleich nochmal nachgesehen, erzähl ja nicht so gerne Mist , wer schon, gelle.

    @SPS-Andy

    Wenn im OB35 nicht allzuviel Code steht, kann man den vielleicht sogar mit 5 ms laufen lassen, dann wären die Intervalle genauer, das kann man dann später mal pobieren.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #8
    SPS Andi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.02.2007
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    erst einmal vielen dank an alle für die schnellen Antworten.

    @Ralle

    dein erster Vorschlag überfordert mich sicherlich schon genug, deshalb denke ich ist dieser ersteinmal die bessere Wahl. Kannst du mir bitte dazu noch weitere Tips geben. Ich habe schon verstanden wie du das meinst aber bei der Ausführung hapert es leider etwas. Im vorraus vielen Dank

  9. #9
    Registriert seit
    29.01.2007
    Ort
    Sandkrug
    Beiträge
    147
    Danke
    7
    Erhielt 36 Danke für 25 Beiträge

    Standard

    Hallo SPS Andi,
    kannst du deine Anfrage noch einmal genauer spezifizieren, weil sie für mich widersprüchlich ist.
    Zitat: ... dieser Eingang soll die Zeit zwischen den Signalen erfassen und durch 4 teilen und als Impuls wieder ausgeben...
    In deinem Beispiel gibst du aber vor, das Signal selbst durch 4 zu teilen.
    Wenn ich diese Aufgabe lösen sollte, wüsste ich nicht genau, wass gemeint ist. Vielleicht stellst du es noch einmal klar.

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @SPS-Andi

    Ich hab die mal ein Beispiel mit dem OB 35 programmiert.
    Allerdings mal ebend schnell. Wenn du das so verwenden willst, solltest du im OB 100 für MW 10,12,14 Startwerte vorgeben, damit am Anfang, bevor das 1. Mal der E0.0 betätigt wird, was sinnvolles herauskommt. Den Timer T1 habe ich mal auf 200ms Impuls gestellt, für den OB35 1000ms, damit man das mit dem Simulator beobachten kann. Diese Werte müssen dann kleiner gestellt werden. Auf Symbolik habe ich verzichtet, dafür alles beschriftet.

    Code:
    FUNCTION FC 35 : VOID
    TITLE =
    VERSION : 0.1
    AUTHOR : Ralle
    
    
    BEGIN
    NETWORK
    TITLE =M0.1 für OB35
    
          U     E      0.0;    //Max-Amplitude    
          FP    M      0.0; //HM Flanke
          S     M      0.1; //Startmerker setzen! Wird nach Bearbeitung im OB35 zurückgesetzt!
    NETWORK
    TITLE =
    
          U     M      0.2; //Impuls ausgeben
          L     S5T#200MS;  
          SV    T      1;   //Impulszeit, sonst sieht man beim Beobachten nichts
          U     T      1; 
          =     A      0.2; //Impuls-Ausgang
    
          U     M      0.2; //sofort wieder zurücksetzen
          R     M      0.2; 
    END_FUNCTION
    
    ORGANIZATION_BLOCK OB 35
    TITLE = "Cyclic Interrupt"
    VERSION : 0.1
    
    
    VAR_TEMP
      OB35_EV_CLASS : BYTE ;    //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB35_STRT_INF : BYTE ;    //16#36 (OB 35 has started)
      OB35_PRIORITY : BYTE ;    //Priority of OB Execution
      OB35_OB_NUMBR : BYTE ;    //35 (Organization block 35, OB35)
      OB35_RESERVED_1 : BYTE ;    //Reserved for system
      OB35_RESERVED_2 : BYTE ;    //Reserved for system
      OB35_PHASE_OFFSET : WORD ;    //Phase offset (msec)
      OB35_RESERVED_3 : INT ;    //Reserved for system
      OB35_EXC_FREQ : INT ;    //Frequency of execution (msec)
      OB35_DATE_TIME : DATE_AND_TIME ;    //Date and time OB35 started
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          U     M      0.1; //Startmerker Amplitide ist max
          SPB   NULL; //zum Null setzen von MW10 springen
    
          L     MW    10; //MW10 um 1 hochzählen
          L     1; 
          +I    ; 
          T     MW    10; 
          SPA   AMPT; //zum Test, ob ein Impuls ausgegeben werden soll
    
    NULL: NOP   0; 
          L     MW    10; //Impulszähler
          T     MW    12; //Impulse merken
    
          L     MW    12; 
          L     4; //Teiler 4
          /I    ; 
          T     MW    14; //alle X (Mw14) Zähler (OB35-Aufrufe) einen Impuls ausgeben
    
          L     0; 
          T     MW    10; //Impulszähler zurücksetzen
    
          SET   ; 
          R     M      0.1; //zurücksetzen des Startmerkers, da Aktion ausgeführt
    
    AMPT: NOP   0; 
    
    //mit dem Teiler nachsehen, ob Ausgagsimpuls gebracht werden soll
          L     MW    10; //Ist-Zählwert
          ITD   ; 
          L     MW    14; //geteilter Wert
          ITD   ; 
          MOD   ; //Divisionsrest Ganzzahlen (32 Bit)
          L     0; //ist Null, also kein Rest, also ganzer Teiler, also Impuls ausgeben
          ==D   ; 
          SPBN  END2; //wenn nicht, kein Impuls
    
          S     M      0.2; //Impuls ausgeben
    
    END2: NOP   0; 
    END_ORGANIZATION_BLOCK
    Geändert von Ralle (03.02.2007 um 15:24 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. A/B Drehgeber Auswerten
    Von Kuddel30 im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 26.06.2017, 13:30
  2. DB auswerten
    Von Rauchegger im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 27.10.2010, 22:45
  3. Temperaturmessung Min - Max Auswerten
    Von chefren_new im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 02.09.2009, 16:09
  4. ACK auswerten TP270 S7-300
    Von martin2day im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 28.06.2007, 12:00
  5. Impulsfolge speichern und verzögert ausgeben
    Von lefrog im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 31.01.2007, 23:05

Lesezeichen

Berechtigungen

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