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

Seite 1 von 12 12311 ... LetzteLetzte
Ergebnis 1 bis 10 von 117

Thema: Programmierwettbewerb, 5. Aufgabe - Inkrementalgeber Korrektur

  1. #1
    Registriert seit
    19.01.2010
    Ort
    Graz / Austria
    Beiträge
    100
    Danke
    6
    Erhielt 10 Danke für 8 Beiträge

    Idee


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Liebe Leute,

    lange lange ist es her, seit unserem letzten Forumseintrag zum Thema Programmierwettbewerb.

    Ein Freund von mir welcher auch in der Automatisierungs Branche arbeitet, hat mir letztens von einem Problem erzählt das er bei einer seiner Anlagen hatte.
    Bei ihm ist ein Drehgeber direkt auf einem Motor montiert, nach welchem ein Getriebe geschaltet ist und dieses Getriebe hat eine kleine Ungenauigkeit in der Übersetzung.
    Das bedeutet z.B. das Getrieb hat nicht eine Übersetzung von 4:1 sondern von 4:1,001.
    Für die Applikation ist allerdings die Position nach dem Getriebe von Bedeutung und eine Referenzierung im laufendend Betrieb ist nicht möglich.

    Der Wert vom Drehgeber selbst kann nicht beeinflusst werden und dieser Wert wird in einem geschlossenen Baustein weiterverarbeitet, welchem diese kleine Ungenauigkeit nicht übergeben werden kann. Dh. der Baustein nimmt z.b. nur ganze Zahlen wie 4:1 an.
    Das bedeutet der Wert Drehgebebers (von 0-65535) muss z.B. alle 500 Einheiten um +/- 1 korrigiert werden, bevor er diesem Baustein übergeben wird, damit die Position nach dem Getriebe wieder stimmt.

    Mich hat es nach diesem Gespräch selbst interessiert, wie sich so etwas lösen lassen könnte und ich bin dann auch auf eine entsprechende Lösung gekommen.
    Nachdem allerdings die Progammierwettbewerbe hier inzwischen schon etwas eingeschlafen sind, dachte ich mir so etwas wäre eine ideale Aufgabe für unseren 5. Wettbewerb.

    Aufgabe des Bausteines:
    Ein Inkrementalgeberwert im Bereich von 0-65535 muss alle "x" Einheiten um + oder - "x" korrigiert werden.
    Der Überlauf des Eingangswertes muss berücksichtigt werden.
    Gesucht ist ein Funktionsbaustein, welcher den Inkrementalgeber Wert als Eingang annimmt und den korrigierten Wert als Ausgang ausgibt.
    Die Drehbewegung kann in beide Richtungen statt finden.
    Ein BOOL Eingang welcher den Inkrementalgeber Eingangs- und Ausgangswert dieses Bausteins im Falle einer Referenzierung gleichsetzen kann, ist gefordert.
    Andere benötigte Eingänge dieses Bausteines bleiben euch überlasssen.

    Mindestens geforderte Ein- und Ausgänge dieses Bausteins (Namen können bei Bedarf abweichen):
    Code:
    
    FUNCTION_BLOCK EncoderCorrection
        VAR_INPUT
            EncoderValue : UINT; (* Encoder value input *)
            Reset : BOOL; (* The reset adapts corrected value to the input value *)
        END_VAR
        VAR_OUTPUT
            CorrectedValue : UINT; (* Corrected value output *)
        END_VAR
    END_FUNCTION_BLOCK
    Es werden keine Anforderungen an eine spezielle Programmiersprache gestellt.
    Über den Gewinner entscheiden die Anzahl an Dankessagungen der Forumsleser auf den jeweiligen Beitrag welcher eine funktionierende Lösung enthält.

    Einsendeschluss: 15.12.2013 Ende des Tages.

    Lg & viel Spass bei der Lösungsfindung
    Michi
    Geändert von MichaelUray (28.11.2013 um 11:12 Uhr) Grund: Einsendeschluss hinzugefügt, Codeeinrückung
    Zitieren Zitieren Programmierwettbewerb, 5. Aufgabe - Inkrementalgeber Korrektur  

  2. #2
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard

    Soll noch intern ein Überlaufschutz rein? D.h. wenn ich intern eine UINT-Variable hochzähle und ich bin bei 65535 und ich addiere z.B. 2 hinzu zählt meine SPS wieder von Anfang hoch, also dann 1. Oder wenn ich 4 addiere geht sie auf 3.


    Und bis wann ist der Einsendeschluss?
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  3. #3
    Registriert seit
    19.01.2010
    Ort
    Graz / Austria
    Beiträge
    100
    Danke
    6
    Erhielt 10 Danke für 8 Beiträge

    Standard

    Hallo Mobi,

    Zitat Zitat von MichaelUray Beitrag anzeigen
    Der Überlauf des Eingangswertes muss berücksichtigt werden.
    Das bedeutet der Geber läuft im Vorwärtsbetrieb bis auf 65535 hoch und zählt dann wieder bei 0 weiter, oder er zählt im Rückwärtsbetrieb bis 0 und dann von 65535 weiter hinunter.
    Der korrigierte Ausgangswert muss dieses Verhalten dann natürlich genauso haben, nur dass er eben um x Einheiten pro x Einheiten korrigiert ist, das heißt dementsprechend dem echten Geber Wert vor- oder nachläuft.

    Als Einsendeschluss lege ich den 15.12.2013 bis Ende des Tages fest. Das sind von jetzt weg etwa 2,5 Wochen.
    Falls irgendjemand noch mit machen will und es bis dort hin aus irgend einem Grund nicht schaffen sollte, bitte um eine PM oder einen kurzen Post dazu, ich denke hier können wir auch etwas flexibel sein.

    lg.
    Michi
    Geändert von MichaelUray (28.11.2013 um 11:13 Uhr)

  4. #4
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard

    Das der Ausgang das Verhalten haben soll ist logisch. Ich meine nur manche Steuerungen gehen auf Error wenn ein Überlauf stattfindet, aber einige fangen einfach wieder bei 0 an. Z.B. bei Epson, wenn man dort auf 65535 was addiert, geht die Steuerung auf Error.
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  5. #5
    Registriert seit
    28.08.2006
    Ort
    Nordbayern, Mittelfranken
    Beiträge
    165
    Danke
    46
    Erhielt 63 Danke für 49 Beiträge

    Standard

    Servus Michael,

    ich halte Deine Vorgabe für die Aufgabe mit der Korrektur "Ein Inkrementalgeberwert im Bereich von 0-65535 muss alle "x" Einheiten um + oder - "x" korrigiert werden" für unsauber. Nach dem was Du schreibst: "Dh. der Baustein nimmt z.b. nur ganze Zahlen wie 4:1 an."
    Dann Schreib halt an den Baustein die Ganzen Zahlen 4000 und 1001 !

    Gruß, FA
    Alles wird gut!

  6. #6
    Registriert seit
    19.01.2010
    Ort
    Graz / Austria
    Beiträge
    100
    Danke
    6
    Erhielt 10 Danke für 8 Beiträge

    Standard

    Zitat Zitat von Mobi Beitrag anzeigen
    Ich meine nur manche Steuerungen gehen auf Error wenn ein Überlauf stattfindet, aber einige fangen einfach wieder bei 0 an. Z.B. bei Epson, wenn man dort auf 65535 was addiert, geht die Steuerung auf Error.
    Wusste ich gar nicht, dass es so etwas auch gibt. Ist so ein Verhalten eigentlich in der IEC 61131-3 irgendwie definert?
    Überlauf Stopps von Steuerungen die im Falle eines Überlaufes auf Error gehen, müssen nicht abgefangen werden.

    Zitat Zitat von Friedrich-Alexander Beitrag anzeigen
    Dann Schreib halt an den Baustein die Ganzen Zahlen 4000 und 1001 !
    Dies war nur als Beispiel gedacht um die Problemstellung zu verdeutlichen. Ich selbst habe das Programm nie gesehen, weiß aber nur, dass das Übersetzungsverhältnis nicht so genau (oder gar nicht) eingestellt werden kann.
    Dies kann jetzt daran liegen das der Baustein z.B. zu ungenaue Eingänge (Bsp: USINT) hat, oder aber auch daran das dieses Verhältnis fix in diesen geschlossenen Baustein programmiert ist.
    Wie und warum es sich nicht ändern lässt weiß ich nicht genau, aber spielt für die Aufgabenstellung dieses Programmierwettbewerbes eigentlich auch keine Rolle.
    Geändert von MichaelUray (28.11.2013 um 23:42 Uhr)

  7. #7
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Michi,

    wie weit soll denn maximal gezählt werden können, bzw. wie viele Umdrehungen sollen möglich sein?

    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  8. #8
    Registriert seit
    19.01.2010
    Ort
    Graz / Austria
    Beiträge
    100
    Danke
    6
    Erhielt 10 Danke für 8 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    wie weit soll denn maximal gezählt werden können, bzw. wie viele Umdrehungen sollen möglich sein?
    Die Maschine wird einmal referenziert und läuft dann "ewig" vorwärts. Das bedeutet der Zähler läuft im Betrieb immer über. Der geforderte Baustein muss den Überlauf im Vorwärts- als wie auch im Rückwärtsbetrieb bewältigen können.
    Es muss aber am Ende des Getriebes immer wieder wieder bei jeder Umdrehung an der selben Position irgend etwas gemacht werden, und diese Position verschiebt sich durch diese Ungenauigkeit je länger die Maschine läuft immer weiter. Wenn diese Abweichung zu groß wird, dann muss die Maschine gestoppt und wieder neu referenziert werden.
    Dieser Baustein soll eben genau diese Ungenauigkeit die hier entsteht korrigieren.

  9. #9
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard

    Zitat Zitat von MichaelUray Beitrag anzeigen
    Mich hat es nach diesem Gespräch selbst interessiert, wie sich so etwas lösen lassen könnte und ich bin dann auch auf eine entsprechende Lösung gekommen.
    Warum stellst Du denn Deine Lösung hier nicht mal als 1. Vorschlag ein, bevor noch mehr Vermutungen in Richtung kostenloser Lösungssuche aufkommen.


    Oder ist Deine Lösung schon das Nonplusultra, was keiner mehr toppen kann?


    PS: Was gibt's eigentlich zu gewinnen?
    Geändert von hucki (28.11.2013 um 23:00 Uhr)

  10. #10
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also ich kenne auch aus einem anderen Forum regelmäßige Programmierwettbewerbe. Dort wird auch kein Vorschlag am Anfang gegeben. Man muss ja nicht mitmachen, wenn man es für sinnlos hält. Ich mach es, weil mir programmieren Spaß macht und ich gerne Lösungen entwickle für besondere Aufgaben. Es ist halt Hobby und Beruf.
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

Ähnliche Themen

  1. Programmierwettbewerb, 4. Aufgabe
    Von Onkel Dagobert im Forum Stammtisch
    Antworten: 6
    Letzter Beitrag: 15.12.2011, 18:57
  2. Programmierwettbewerb, 3. Aufgabe
    Von Chräshe im Forum Stammtisch
    Antworten: 7
    Letzter Beitrag: 05.12.2011, 20:43
  3. Programmierwettbewerb, 2. Aufgabe
    Von LargoD im Forum Stammtisch
    Antworten: 14
    Letzter Beitrag: 02.08.2011, 22:27
  4. Bitte um korrektur
    Von Arnold999 im Forum Simatic
    Antworten: 34
    Letzter Beitrag: 15.06.2010, 21:21
  5. Mechanische Korrektur
    Von PG710 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 20.11.2008, 15:26

Stichworte

Lesezeichen

Berechtigungen

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