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

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

Thema: Geschwindigkeitsmessung

  1. #1
    Registriert seit
    22.06.2015
    Beiträge
    34
    Danke
    23
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,
    ich möchte für mein bestehendes Projekt eine Geschwindigkeitsmessung anhand von Inkrementalwerten durchführen. Ein Inkremental-Drehgeber gibt mir die Werte aus und diese rechne ich in meine Strecke um. Ich programmiere mit Codesys v3.5.5 und finde keine Lösung wie ich Weg/Zeit=Geschwindigkeit programmtechnisch realisieren kann.
    Außerdem soll sich die Geschwindigkeit selbst regeln.
    Heißt so viel wie: es gibt eine bestimmte Anzahl von Lampen. Fallen nun welche aus, soll die Geschwindigkeit, autom. in Relation zu der Anzahl der Lampen, geregelt werden.
    Bsp.: 8 Lampen und 16 cm/min --> Ausfall 2 Lampen= 6 Lampen und 12 cm/min.
    Kann mir hierbei jemand weiterhelfen?
    Im übrigen programmiere ich mit FUP und bei miener Steuerung handelt es sich um eine XV 102 von EATON.
    Zitieren Zitieren Geschwindigkeitsmessung  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Die Zeit-Komponente (dt) erhältst Du, indem Du in (regelmäßigen) bekannten Zeitabständen den Zählerstand des Drehgebers abtastest, die Weg-Komponente (ds) erhältst Du aus der Differenz des neuen Zählerstands zum vorherigen.

    Zu Deiner Regelung: sehr wahrscheinlich gibt es fertige Regelbausteine für Codesys 3.x, eine Internet-Recherche danach sollte nicht schwer sein. Den Sollwert kannst Du anscheinend einfach aus der Anzahl nicht ausgefallener Lampen berechnen. Die Stellgröße aus dem Regelbaustein wirst Du noch irgendwie zur Ansteuerung Deines Motors skalieren müssen. Näheres ergeben die Datenblätter Deiner Komponenten.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Messi90 (13.07.2015)

  4. #3
    Registriert seit
    22.06.2015
    Beiträge
    34
    Danke
    23
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke schon mal Harald. Das hilft definitiv schon.
    Also wie du das meinst verstehe ich, nur weiß ich leider im Moment noch nicht wie du das mit "abtasten" meinst. Kannst du mir das genauer erklären? Vor allem wie ich das ganze in Zeitabständen lösen kann.
    Der Inkrementalzähler gibt 4096 Werte pro Umdrehung bis max 2^24 Werte aus.
    Am besten/einfachsten wäre natürlich ein passender Baustein dafür, allerdings bezweifle ich, dass ich da einen finden werde. Bzw habe ich bisher noch nichts derartiges gefunden.
    Geändert von Messi90 (13.07.2015 um 16:08 Uhr)

  5. #4
    Registriert seit
    20.08.2007
    Beiträge
    112
    Danke
    13
    Erhielt 10 Danke für 8 Beiträge

    Standard

    Hi Messi,

    Deine Task läuft ja in einen bestimmten Zyklus. Z. B. 10ms, oder 100ms etc. Du kannst deinen neuenWert immer einlesen und ihn von deinen alten Wert abziehen. Die Differenz teilst du dann durch deine Zykluszeit. Leider hab ich gerade kein FUP hier, deshalb schreib ich dir das ganze mal in Pseudo-Code.

    Code:
    newIncrementValue : UINT;
    oldIncrementValue : UINT;
    TimeDiff :  REAL := 10.0; //Zeitdifferenz in ms
    speed : REAL; // geschwindigkeit Einheit Inkremente/ms wenn du eine andrer Einheit brauchst musst du noch umnormieren
    __________________________________________________
    
    InkremntalgebausAusgang --------------- newIncrementValue
    
     
     newIncrementValue---|Sub|-------------------------|DIV|-------speed
    oldIncrementValue ---|   |          TimeDiff  -----|   |
    
    
    newIncrementValue --------------- oldIncrementValue
    Ich hoffe das hilft dir weiter. Anschließend musst du das ganze eventuell noch auf eine andere Einheit umnormieren. Beim Geschwindigkeits"regler" machst du das am besten mit einem SEL. Im Beispiel zeig ich dir das mit zwei Lampen. Du kannst das dann sicher mit mehreren Lampen nachbilden:

    Code:
    setPointSpeed: REAL;
    lamps : ARRAY[1..2] OF BOOL;
    _____________________________________________
    
    0--------------------setPointSpeed
    
                         lamps[1]---|   |---setPointSpeed
                    setPointSpeed---|SEL|
                setPointSpeed +2 ---|   |
    
    
    
                         lamps[2]---|   |---setPointSpeed
                    setPointSpeed---|SEL|
                setPointSpeed +2 ---|   |
    So das wars. Ich hoffe das hilft dir.

    Gruß wonderfulworld
    Geändert von wonderfulworld (13.07.2015 um 21:34 Uhr)
    Solls was Rechtes sein, oder darfs auch was von Siemens sein?

  6. Folgender Benutzer sagt Danke zu wonderfulworld für den nützlichen Beitrag:

    Messi90 (14.07.2015)

  7. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Warum meinst Du, daß Du die Geschwindigkeit regeln musst? Reicht es nicht, die Geschwindigkeit nur zu steuern, d.h. einfach nur einen Geschwindigkeits-Sollwert an Deinen Antrieb auszugeben und der macht das dann schon? Dann bräuchtest Du keinen Regler-Baustein. Wobei es anscheinend in Codesys einen fertigen PID-Regler gibt, "schlimmstenfalls" schaue Dich mal bei OSCAT um, falls Dir die vielen Fundstellen einer Google-Suche nach "codesys regler" nicht zusagen. (ich kenne Codesys nicht genug).

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #6
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard

    Hallo,

    wenn das noch immer der CAN Encoder (RM9000) von letzter Woche ist (Inkremental-Drehgeber), hast Du keinen Inkremental- sondern einen Absolutgeber. Der gibt Dir jerweils Werte zwischen 0 und 4095 raus. Nach einer vollen Umdrehung hast Du wieder den gleichen Wert.

    Wenn ich es richtig gesehen haben kann der Dir auch schon die Geschwindigkeit rausgeben, Du mußt nur das PDO richtig konfigurieren (Index 6030 nach 1A00 oder 1A01).

    Sonst mußt Du Dir einen Zähler bauen mit dem Du arbeitest. Am besten besten die Unter-/Überläufe registrieren und zählen. Diesen Wert dann mit den max. Schritten mal und den aktuellen Wert dazuaddieren. Dann hast Du Deinen Zählwert. Da mußt Du dann aber auch auf den Über -/Unterlauf aufpassen und daß der Zähler groß genug ist.

    Dazu kommt dann noch, daß Du einen Filter zur Glättung benötigst.

    Gruß

  9. Folgender Benutzer sagt Danke zu Thruser für den nützlichen Beitrag:

    Messi90 (14.07.2015)

  10. #7
    Registriert seit
    22.06.2015
    Beiträge
    34
    Danke
    23
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zuerst zu Thruser, da es wahrscheinlich die einfachste Lösung wäre...
    Ja, es handelt sich hierbei immernoch um den RM9000.
    Ich habe es bereits mit dem Speed PDO versucht, nur leider zeigt es mir lediglich Werte von 0 bis 255 an und ich weiß nicht wie ich diese für eine Geschwindigkeit nutzen kann, da die Werte genauso ansteigen wie die vom Positionsvalue. Nur halt nicht bis 2^24 sondern bis 2^8. Bei erreichen der 255 startet es wieder bei 0. Im Anhang ist meine Konfig dargestellt. Mit dem Subindex 1h werden mir keine Werte angezeigt.
    Angehängte Grafiken Angehängte Grafiken

  11. #8
    Registriert seit
    22.06.2015
    Beiträge
    34
    Danke
    23
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zu Haralds Post:

    Die Geschwindigkeit soll/muss sich automatisch regeln sobald eine oder mehrere Lampen ausfallen. Es geht hierbei um einen Vorgang bei dem es zwingend notwendig ist, dass sich die Anlage im Fehlerfall der Lampen selber reguliert. Also wenn weniger Lampen aktiv --> langsamere Geschwindigkeit. Wie der Antrieb dann die Geschwindigkeit regeln kann, weiß ich im Moment noch nicht aber theoretisch sollte er es können. Für den Moment will ich erstmal über meinen Drehgeber die Geschwindigkeit und Weg aufnehmen können.

  12. #9
    Registriert seit
    22.06.2015
    Beiträge
    34
    Danke
    23
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zu wonderfulworld:
    Erst mal danke ich dir für deine Mühe! Hoffe nur ich hab deinen "Pseudo-Code" richtig interpetriert
    Im Anhang habe ich mal meinen FUP hochgeladen.
    Problem nun ist nur, dass es mir in negativer Drehrichtung (gegen Uhrzeigersinn) 2^32 als Wert anzeigt.
    Desweiteren verstehe ich den zweiten Teil deines Codes nicht. Kannst du mir das etwas genauer erklären? Was genau soll der Selektor bewirken?

  13. #10
    Registriert seit
    20.01.2012
    Beiträge
    98
    Danke
    0
    Erhielt 36 Danke für 34 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Messi90,

    nimm mal Index 6030, Subindex 1, nicht 0. Sieh Dir auch mal Index 3010 bzw. 3011 an.

    Gruß

  14. Folgender Benutzer sagt Danke zu Thruser für den nützlichen Beitrag:

    Messi90 (14.07.2015)

Ähnliche Themen

  1. Antworten: 33
    Letzter Beitrag: 23.08.2013, 21:08
  2. Geschwindigkeitsmessung im OB35
    Von Nordischerjung im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 09.03.2011, 14:37
  3. Geschwindigkeitsmessung
    Von Kr0ete im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.01.2010, 07:16
  4. Geschwindigkeitsmessung
    Von mark_ im Forum Programmierstrategien
    Antworten: 32
    Letzter Beitrag: 20.09.2006, 00:00

Lesezeichen

Berechtigungen

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