Animation erstellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Wenn ich mir Dein Programm anschaue fällt mir folgendes auf:
Der Mittlepunkt des Schwingenkreises (der kleine Punkt) sollte bei 0° und bei 180° das Zentrum des mittleren Lagers des Voreilhebels treffen wenn die Voreilung 0 beträgt. Sonst stimmt die Geometrie nicht.
Wichtig dabei ist auch der Neigungswinkel der Schwinge (ergibt sich aus der Differenz der Positionen von Schwingenlager und Anlenkpunkt (mittleres Lager Voreilhebel).
Bei mir ist da auch noch ein kleiner Fehler drin.
Schau mal, zum Vergleich, in mein Programm . Einfach bei den Eingaben "Voreilung" 0 eingeben.
Das habe ich gesehen, bei dir hat es noch einen kleine Fehler, aber beim Wals_OUT würde dies stimmen.


Ich habe meine Masse von dieser Zeichnung genommen: http://dingler.culture.hu-berlin.de/din ... 40184b.png (ca. Seitenmitte).

Ich habe jetzt trotzdem die Masse in meiner Animation korrigiert, das sieht dann so aus: http://mathias1000.bplaced.net/OpenGL_Rad/project1.exe

Manchmal denke ich, dass ich mein Vorhaben wohl etwas zu blauäugig begonnen habe.
Da hast recht, die Animation sieht auf den ersten Blick recht einfach aus, hat aber sehr viele Tücken.
Die Southern-Steuerung wäre um einiges einfacher , als die Heusinger.
Dort sind alle Punkte vorgegeben.
Ich schau jetzt mal ob ich ein Update auf FPC 3.1.1 fertig bekomme.
Das ist leider nicht so einfach, da man leider keine fertigen Pakete dafür findet.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

da man leider keine fertigen Pakete dafür findet.
Das ist mir auch schon aufgefallen.

Komisch, die Maße aus der Zeichnung sollten eigentlich schlüssige Ergebnisse liefern.

Ich bin jetzt dabei meinen Code etwas zu überarbeiten und Fehler zu beseitigen.

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Komisch, die Maße aus der Zeichnung sollten eigentlich schlüssige Ergebnisse liefern.
Wie sollte dies gehen ?
So wie es momentan gezeichnet ist, ja.
Aber wen man das Treibrad um 180° dreht, dann zieht die Schwingenstange ein wenig an der Schwinge, da die Stange nicht mehr waagrecht ist.
Somit geht der Mittelpunkt des Schwingenkreises ein bisschen hoch.

Oder verstehe ich etwas falsch ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Ich habe mein fpc 3.1.1- Verzeichnis von Lazarus kopiert und komprimiert.
Wen du Lazarus 2.6 Win32 verwendest müsste es damit gehen.

http://mathias1000.bplaced.net/3.1.1.zip

Die Dateien neben den Ordner c:\lazarus\fpc\3.0.0 kopieren.
Dann sollten dort 2 Ordner sein, einmal 3.0.0 und der neue 3.1.1 .

Anschliessend Lazarus starten und bei Werkzeuge/Einstellungen/Compilerdateiname/ im Pfad 3.0.0 austauschen gegen 3.1.1 .
Dann sollte es deine Animation anschliessend mit fpc 3.1.1 kompilieren.

Wen dies nicht geht, kannst du jederzeit wieder auf 3.0.0 zurückstellen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Es ist nicht einfach darauf zu antworten:
Aber wen man das Treibrad um 180° dreht, dann zieht die Schwingenstange ein wenig an der Schwinge, da die Stange nicht mehr waagrecht ist.
Welche Stellung hat das Treibrad vor der (180°) Drehung? Welche Stange meinst Du?
Um einen gleichmäßigen Ausschlag der Schwinge zu erhalten gibt es das "Backset". Das bestimmt einen Versatz des Anlenkpunktes der Schwinge (Verbindung Exenterstange von der Gegenkurbel zur Schwinge) in der X-Achse. Daraus ergibt sich der "Backsetwinkel" der beim Schwingenwinkel zu berücksichtigen ist.
Ebenso relevant ist der "Neigungswinkel".
Ich suche Dir gern die Berechnungen dazu heraus wenn Du das möchtest.

Unsere Tipperei hat sich gerade überschnitten.
Ich werde das 3.1.1. bgern ausprobieren. Danke!

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Welche Stellung hat das Treibrad vor der (180°) Drehung? Welche Stange meinst Du?
Die Schwingenstange, auf der Zeichnung ist das die welche mit l=1937,9 gekennzeichnet ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Diese Stange ist bei mir die Exenterstange! Die Schwingenstange verbindet den Schwingenstein mit dem Voreilhebel.

Ich habe mal die Maße aus der Zeichnung in mein Programm eingegeben und erhalte folgende, berechnete, Abmessungen:

Schieberweg: 260, Schwingenstange: 1210,47, Voreilhebel Länge gesamt: 990, Lenkerstange: 700,215, Kreuzkopfarm: 364,645, Backset: 38,183,
Exenterstange: 1.886,410, Gegenkurbel vorlaufend: 323,621, Gegenkurbel nachlaufend: 352,028,

Die Animation sieht damit "vernünftig" aus. Vielleicht hilft Dir das weiter?

P.S. Meine Bezeichnungen kommen von der Übersetzung aus dem Englischen: Eccentric rod = Exenterstange. Vielleicht werde ich das noch ändern.

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Diese Stange ist bei mir die Exenterstange! Die Schwingenstange verbindet den Schwingenstein mit dem Voreilhebel.
Die Bezeichnung hab ich von dort: http://dlok.dgeg.de/115.htm
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Ich habe mir die Zeichnung nochmals genauer angeguckt, dass Mass l=1937.9, müsste auch 1890 sein, das das ganze in einen rechten Winkel kommt.
Ich habe es jetzt mit deinen 1'886.410 ersetzt, jetzt sieht das Ganze einiges besser aus.

Wie kam dies zu Stande, das deine berechneten Masse ganz anders aussehen als die auf der Zeichnung ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
bitte entschuldige die späte Antwort. Ich hatte ein stressiges Wochenende.
Wie kam dies zu Stande, das deine berechneten Masse ganz anders aussehen als die auf der Zeichnung ?
Auf der Zeichnung sind keine Angaben über die "innere Steuerung" (Voreilung, Überlappung, max. Öffnung der Einlasskanäle).
Daher habe ich einfach diese Maße, bei der Eingabe, angenommen. Da diese Abmessungen Einfluß auf die Länge der Schwingenstange (Exenterstange) haben
kommt es zwangsläufig zu den Abweichungen.

Gruß
Hannes

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,

jetzt habe ich, endlich, eine Möglichkeit gefunden um den Voreilhebel richtig darzustellen. Es funktioniert, "nur" mit Trigonometrie, einwandfrei.
Zwischenzeitlich hatte ich schon große Bedenken überhaupt weiter zu kommen aber jetzt macht es wieder richtig Spaß die, noch anstehenden, Aufgaben zu lösen .
Dabei geht es, vor Allem, um das Aussehen meiner Eingabebilder und einiger Unstimmigkeiten bei der Berechnung.

Es gibt zwar noch "einige" andere Dinge zu erledigen aber die größten Probleme glaube ich lösen zu können.
Ohne Deine Hilfe wäre ich nie soweit gekommen. Daher möchte ich mich nochmals herzlich bedanken!

Falls Du noch Interesse an dem aktuellen Stand hast kann ich Dir gern einen Link schicken.

Freundliche Grüße

Hannes

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Falls Du noch Interesse an dem aktuellen Stand hast kann ich Dir gern einen Link schicken.
Hätte ich schon. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6923
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Ich habe deine Animation von deiner PN angeguckt.

Dein Voreilgestänge sieht schon recht gut aus.

Durch was wird dein Schieberstange-Kreuzkopf berechnet ?
Irgendwie macht dieser eine Längs-Bewegung.

Verändert sich bei dir die Länger der Schieberschubstange, oder ist die s eine Täuschung ?
Wen du diese Stange mit dem SchwingenStein verbindest, sollte das Ganze schon einiges realistischer aussehen.

Das Problem der hüpfende Schieber hatte ich auch, aus diesem Grund habe ich retour gerechnet.
Das ist in meinem Programm das rote Voreilgestänge.
Beim grauen Gestänge, welches ich virtuell genannt habe, habe die Hüpfer auch bei dem Schieber.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Danke für das Kompliment.
Den Voreilhebel habe ich unabhängig von der Schwinge und deren Einflüssen gebastelt.
Wenn ich die Position des Schieberkreuzkopfes festlege (in x) oder manuell verändere dann funktioniert das prima.
Allerdings ist die Korrektur in der Y-Achse noch nicht eingebaut. Das sollte aber leicht gehen.
Die richtige Position des Schieberkreuzkopfes durch die Schwingenbewegung macht noch Probleme. Daher auch die
"Längenänderung" der Schubstange und die falsche Schieberbewegung. Das ist leider keine optische Täuschung.
Ich schicke gleich noch ein wenig Code dazu. Muss ich nur vorher etwas aufräumen.

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Das ist der Code zum Voreilhebel:
(hab noch ein paar Kommentare eingefügt)

Code: Alles auswählen

procedure TSteuerung.Voreilhebel;
var
  va, vb, vc, wa, wc: double;
  va1, vb1, vc1, wa1, wb1, wc1: double;
  wl, wv: double;
begin
  if IST then
  begin
    va := IAD + MG + IAF;  //IAD=Abstand Zylindermittellinie-Schiebermittellinie
  end                      //MG=Länge Kreuzkopfarm (Drop Link)
  else                     //IAF=Abstand obere Lager v. Voreilhebel
  begin
    va := IAD + MG - IAF;
  end;
  //  vc:=IAA-IAE-P;      //IAB=Abstand Schwingenlager zum Treibachszentrum horizontal
  vc := IAB + SS - P;     //SS=Schieberkreuzkopf (x), P=Position Kreuzkopf (x)
  vb := SQRT(SQR(va) + SQR(vc));
  wa := RadToDeg(arccos((sqr(va) - sqr(vb) - sqr(vc)) / (-2 * vb * vc)));
  wc := RadToDeg(arccos((sqr(vc) - sqr(va) - sqr(vb)) / (-2 * va * vb)));
  va1 := MF;
  if IST then
  begin
    vb1 := ME;
  end
  else
  begin
    vb1 := ME - IAF;
  end;
  vc1 := vb;
  wa1 := RadToDeg(arccos((sqr(va1) - sqr(vb1) - sqr(vc1)) / (-2 * vb1 * vc1)));
  wb1 := RadToDeg(arccos((sqr(vb1) - sqr(vc1) - sqr(va1)) / (-2 * vc1 * va1)));
  wc1 := RadToDeg(arccos((sqr(vc1) - sqr(va1) - sqr(vb1)) / (-2 * va1 * vb1)));
  wl := 90 - wb1 - wc;       // Winkel Lenkerstange
  wv := 180 + wa + wa1;      // Winkel Voreilhebel
  // Lenkerstange
  glPushMatrix;
  glTranslatef(p, -MG, 0);
  glRotatef(wl, 0, 0, 1);
  Stange(0, MF, 1, False);
  glTranslatef(MF, 0, 0);
  Lager(5);
  glPopMatrix;
  // Voreilhebel
  glPushMatrix;
  // innere Einströmung
  if IST then
  begin
    glTranslatef(IAB + SS, IAD + IAF, 0);
    glRotatef(wv, 0, 0, 1);
    Stange(0, ME, 1, False);
    glTranslatef(IAF, 0, 0);
    Lager(5);
    glRotatef(-wv, 0, 0, 1);
    Stange(0, IAE, 1, False);
    glTranslatef(IAE, 0, 0);
    Schieber;
    // äußere Einströmung
  end
  else
  begin
    glTranslatef(IAB + SS, IAD - IAF, 0);
    glRotatef(wv, 0, 0, 1);
    Stange(0, ME - IAF, 1, False);
    glTranslatef(-IAF, 0, 0);
    Lager(5);
    glRotatef(-wv, 0, 0, 1);
    Stange(0, IAE, 1, False);
    glTranslatef(IAE, 0, 0);
    Schieber;
    glPopMatrix;
    glPushMatrix;
    glTranslatef(IAB + SS, IAD - IAF, 0);
    glRotatef(wa + wa1, 0, 0, 1);
    Stange(0, IAF, 1, False);
  end;
  glPopMatrix;
end;                                                    

Antworten