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

Ergebnis 1 bis 5 von 5

Thema: Programmierung Kreis mit Codesys in FUP

  1. #1
    Registriert seit
    01.06.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    Wie das Thema schon sagt, versuche ich in der Funktionsbausteinsprache einen Kreis zu programmieren, was mir einfach nicht gelingen will.
    Kann mir vllt jemand mal ein Beispielprogramm schicken? Es muss einfach ein simpler Kreis gezeichnet werden, wo zu Beginn (vor Programmstart) der Radius per Hand vorgegeben wird.
    Mein Problem ist, dass ich die beiden Motoren einfach nicht aufeinander abgestimmt bekomme.
    Zitieren Zitieren Programmierung Kreis mit Codesys in FUP  

  2. #2
    Registriert seit
    21.09.2011
    Beiträge
    13
    Danke
    2
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo,

    die Kreisfunktion lautet ja:
    Kreis mit dem Mittelpunkt (xm|ym)
    (x - xm)² + (y - ym)² = r

    Kreis mit dem Mittelpunkt (0|0)
    x² + y² = r

    Wenn ich davon ausgehe das die beiden Motoren jeweils für x und y Koordinate sind und du Inkrementalrückmeldung über die Position hast, musst du nun nur noch diese Funktion in einen Algorithmus implementieren.

    Bewegungsmuster für Motor x - Achse in Abhängigkeit zum Motor y - Achse wäre dann (Ausgehend vom Kreis in (0|0)):
    x = Wurzel(r - y²)

    Nun lässt du den y - Motor fahren. Der x - Motor wird über die obere Formel an diesen Motor gekoppelt.

    Ich hoffe das hilft dir schon deiner Lösung näher zu kommen.

    Gruß Stefan

  3. #3
    Registriert seit
    23.10.2009
    Beiträge
    391
    Danke
    58
    Erhielt 113 Danke für 87 Beiträge

    Standard

    Sieh Dir mal den Bresenham-Algorithmus an, damit kannst Du Kreise zeichnen oder Kreisbahnen fahren ohne Wurzelziehen und ohne Winkelfunktionen.

    Gruß
    Erich

  4. Folgender Benutzer sagt Danke zu LargoD für den nützlichen Beitrag:

    Chris__ (13.06.2014)

  5. #4
    Chris__ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.06.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi,

    ich habe vergessen zu erwähnen, dass ich keine Wegaufnehmer etc habe. Die Motoren können lediglich über einen Impuls "TRUE" angesteuert werden. Sollen diese die Drehrichtung wechseln, so muss zusätzlich der Eingang "DIR" bestromt werden.

    Ich werde mir den Bresenham-Algorithmus mal anschauen. Denke für mein Problem ist das die einzige Möglichkeit.

    Vielen Dank

  6. #5
    Chris__ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.06.2014
    Beiträge
    5
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich bräuchte nochmal eure Hilfe.
    Und zwar habe ich versucht, den Bresenham-Algorithmus für den Strukturierten Text zu übersetzen, allerdings habe ich mit den Arrays Probleme und mit der Spiegelung des Achtelkreises... Könntet ihr mal über den Code drüber schauen und mir die Fehler nennen? Wäre dafür sehr dankbar...




    VAR
    Radius: REAL;
    d: LREAL;
    x_kreis: REAL;
    y_kreis: REAL;
    err: REAL;
    sm: ARRAY [-1..456,-1..456] OF INT;
    sm_end: INT;
    dy: REAL;
    dx: LREAL;
    i: INT;
    length: INT;
    temp_sm: ARRAY [-1..456,-1..456] OF INT;
    END_VAR



    (* Kreisdaten *)
    Radius := 50; (* Kreisradius *)
    d := 0.63; (* Schrittweite 0,63mm / Puls *)


    (* Kreispunkte berechnen *)


    (* 1. Oktant mit Bresenham - Algorithmus (wikipedia) *)
    x_kreis := Radius;
    y_kreis := 0;
    err := Radius;


    WHILE y_kreis < x_kreis DO
    dy := 2*y_kreis+d;
    y_kreis := y_kreis+d;
    err := err-dy;
    IF err<=0 THEN
    (* dx und dy Schritt *)
    dx := d-2*x_kreis;
    x_kreis := x_kreis-d;
    err := err-dx;
    sm_end := sm[-1,1];
    ELSE
    (* nur dy schritt *)
    sm_end := sm[0,1];
    END_IF
    END_WHILE


    (* (* add 2. Oktant durch Spiegel an 45° Achse *)
    temp_sm := sm;
    temp_sm := fliplr(temp_sm);
    temp_sm=flipud(temp_sm);
    temp_sm=temp_sm*-1;


    sm=[sm;temp_sm];


    (* add 3. und 4. Oktant durch spiegeln um y Achse *)
    temp_sm=sm;
    temp_sm=flipud(temp_sm);
    temp_sm(:,2)=temp_sm(:,2)*-1;


    sm=[sm;temp_sm];


    (* add 5. bis 8. Oktant durch speiegeln um x Achse *)
    temp_sm=sm;
    temp_sm=flipud(temp_sm);
    temp_sm(:,1)=temp_sm(:,1)*-1;


    sm=[sm;temp_sm]; *)


    (* Schrittmotorbewegungen *)


    x_kreis := Radius;
    y_kreis := 0;
    FOR i := 1 TO SIZEOF(sm[456,456]) DO
    x_kreis := x_kreis+d*sm[i,1];
    y_kreis := y_kreis+d*sm[i,2];

    IF sm

    END_FOR

Ähnliche Themen

  1. CoDeSys Impulsgeber mit Impuls = 1 SPS-Zyklus in FUP
    Von SPS_Bananen im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 16.03.2014, 19:04
  2. Programmierung von Puls-Weiten-Modulation mit CoDeSyS 2.3
    Von Kroster im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 06.11.2012, 12:06
  3. Codefehler bei KOP und FUP Programmierung
    Von Atlas im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 03.12.2009, 20:40
  4. Programmierung einer S7-200 CPU 214 in FUP?
    Von Eggerd im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 17.07.2007, 12:08
  5. Antworten: 5
    Letzter Beitrag: 17.02.2005, 10:09

Stichworte

Lesezeichen

Berechtigungen

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