Mit Schleife DB füllen

Zuviel Werbung?
-> Hier kostenlos registrieren
@ Aventinus:
- Du meinst also, ich sollte die Werte gar nicht in DB´s ablegen?
- Wie kann ich dann verschied. Positionen zeit diskret anfahren?

Du hast ja sicher eine Vorstellung davon wie lange du dir für deine Kreisform Zeit nehmen willst...

Wenn du das Ding in 10s durch haben möchtest kannst du eine Zeit laufen lassen und dir aus dem Zeitwert mit Sinus bzw. Kosinus usw. die aktuellen Positionen der beiden Achsen errechnen.

Hab aber leider gerade nicht die Zeit, dir das genauer aufzubereiten... evtl. am WE.
 
habe auch verscuht, das flexibel aufzubaun ...


was hältst n davon?

kann man sicherlich so machen.
Eine andere Variante wäre :
Code:
AUF DB [#DB_Kreis]
L #TAKTGEBER
L 6
*D
SLD 3
LAR1

L DBW [AR1,p#0.0] // X
T #_xKoordinate
L DBW [AR1,p#2.0] //y
T #_yKoordinate
L DBW [AR1,p#4.0] //z
T #_zKoordinate
... spart ein paar Anweisungen ... ;)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Aventinus:

die math. Formeln sind mir klar. Die Schwierigkeiten liegen darin, dass zu Programmieren und die Daten abzulegen. Aber ich werde es einmal so versuchen, wie ich auslese.
 
naja ... das ginge dann so :
Code:
AUF DB [#DB_Kreis]
L #Index
L 6
*D
SLD 3
LAR1

L #_xKoordinate
T DBW [AR1,p#0.0] // X
L #_yKoordinate
T DBW [AR1,p#2.0] //y
L #_zKoordinate
T DBW [AR1,p#4.0] //z
... wobei du dir vielleicht überlegen solltest, ob es nicht besser wäre mit REAL zu arbeiten ...

Gruß
Larry
 
stimmt, wäre wohl besser. Voraussichtlich werden viele Zahlen mit Nachkommastellen auftauchen.

Ich werde deine Tipps beherzigen und mal schaun, obs klappt. Ich werd dir dann ne Rückmeldung geben.
 
Ist mir klar. Ich weiss noch nicht, was für ein Wegmesssystem verwendet wird bzw was für Rückmeldungen über die Posi ich bekommen tu.
Falls die Rückmeldung über einem Inkrementalzähler erfolgt, reichen die vorhanden 2 Byte.

Kurz mal eine grundsätzliche Frage:

Sollte ich die Werte überhaupt in deinem DB ablegen?
Oder in jedem Zyklus den jeweiligen Wert berechnen und direkt verarbeiten? Somit würde ich mir den DB ersparen, dann müsste nicht:
ich meine Werte berechnen - in einem DB ablegen - und die gleichen Werte wieder rauslesen.
...sondern nur berechnen...

Vor- bzw Nachteile? Zu was würdet ihr tendieren?
 
Zur Beantwortung dieser Frage hole ich einfach noch einmal den folgenden Beitrag hervor :
Dann kannst Du aber auch gleich in Echtzeit die Kreisbahn berechnen. Ich sehe aber das Problem bei der Synchronisatoin der Achsen... Präzise Geometrieen sind so nicht möglich.
... ich hatte das Ganze aber ohnehin mehr als eine theoretische Geschichte angesehen.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist mir nun möglich die Werte zu berechnen - abzulegen - und wieder auszulesen.

Um die Werte ein- bzw auszulesen verwende ich, wie gesagt, einen Pointer:

AUF DB 1

L #taktgeber
L 8
*D
SLD 3
LAR1

L #Kor_x
T DBD [AR1,P#0.0]

L #Kor_y
T DBD [AR1,P#4.0]


Ich habe nun ein Problem mit meinem Taktgeber. Die Schleife, die ich zum Berechnen meiner Werte benötige, muss als Real deklariert sein um die Punkte berechnen zu können, da diese ebenso also Real deklariert sind.

Aber für den Pointer benötige ich Int oder Word. Ich muss letztendlich mit 2 Schleifen arbeiten, die gleichzeitig hochzählen jedoch einmal die Varibale als Real und einmal als Word.

Gibt es nicht eine Möglichkeit, eine Real in eine Word oder eine Word in eine Real umzuwandeln. Ich weiss, dass die beiden unterschiedlich groß sind, aber gibt es nicht dennoch eine Möglichkeit.
 
Ich verstehe jetzt gerade den Hintergrund nicht ... aber :

ITD : Integer -> DINT
DTR : DINT -> REAL

RND : REAL -> DINT
und um aus einem DINT einen INT zu machen einfach in eine solche variable transferieren (immer vorausgesetzt die Zahlen passen).

Gruß
Larry
 
der Hintergrund ist wie folgt:


meine Formel für die Kreiskoordinaten:

KREIS

i = i + 1 <-- Schleife, wie folgt programmiert:

L #i (Schleifenvariable)
L 1.0
+R
T #i

winkel = 2*PI/punktanzahl
x-Koordinate = cos(i*winkel)*radius
y-Koordinate = sin(i*winkel)*radius

Hier taucht die Schleife im Argument des cos bzw sin auf.
--> Schleifenvariable muss somit als Real vorliegen.


Des weiteren muss ebenfalls mit einer Schleife mein Pointer im DB verschoben werden. Da beide beides zur gleichen Zeit erfolgen soll, dachte ich natürlich daran, alles mit einer Schleife zu machen, was anscheinend nicht möglich ist.

L #Schleifenvariable j
L 8
*D
SLD 3
LAR1
...

Hierbei kann ich ja nicht die oben benutzte Schleifenvariable "i" wählen, da diese als Real deklariert wurde, sondern eine komplett neue Schleife "j".

Mein Programm funktioniert - ist ja schonmal nicht schlecht. :)

Kann man das vll eleganter gestalten nur mit einer Schleife?
 
KREIS

i = i + 1 <-- Schleife, wie folgt programmiert:

L #i (Schleifenvariable)
L 1.0
+R
T #i

winkel = 2*PI/punktanzahl
x-Koordinate = cos(i*winkel)*radius
y-Koordinate = sin(i*winkel)*radius
Ich muss Dich da mal auf einige prinzipielle Probleme hinweisen.
Mein Eindruck ist, dass Du eine Bahnsteuerung realisieren willst. Dazu gehört auch eine definierte Bahngeschwindigkeit. Bei Deiner Methode ergibt sich eine Bahngeschwindigkeit, die proportional mit dem Radius wächst, da wirst Du bei großen Radien Probleme mit der Mechanik gekommen.
Außerdem hast Du noch nichts über die Antriebe gesagt. Können die Achsen selbständig ihre Bahn korrelieren oder musst Du das per Software machen? Im zweiten Fall musst Du Deine Stützpunkte viel feiner legen, im ersten Fall musst Du eine Funktion einbauen, die wartet bis die Achsen ihren Fahrauftrag abgearbeitet haben.
Sag doch mal was zu den Antrieben.
Gruß
Erich
 
Bis jetzt kann ich noch keine Aussagen über die Hardware machen. Mein Professor ist gerade daran einige Sponsoren und Geld aufzutreiben. Zusagen hat er schon, aber nichts näheres.

Mein Wunsch wären Servo- oder Schrittmotoren von Festo. Da wären dann auch die Linearantriebe ect dabei ...

Das hört sich jetzt vllt alles n bisschen einfältig an, Software versuchen zu programmieren, wenn noch keine Hardware zu Verfügung steht, aber was soll ich tun außer zu simulieren und mir mal n paar grundlegenden Dinge mir zu erarbeiten. (viel mit euer Hilfe und euren Anregungen ---> Danke)

Warum soll es Probleme mit der Geschwindigkeit geben? Es geht bis jetzt nur um die Position, die bis jetzt noch nichts mit der Geschwindigkeit zu tun hat.
Edel wäre natürlich noch, n bissel Regelungstechnik mit reinzubringen, indem die Geschwindigkeit der Achsen in Abhängigkeit dem Abstand der Koordinaten gesetzt wird und somit x und y Wert gleichzeitig erreicht werden, auch unterschiedlichem Verfahrweg. Aber das ist noch Zukunftsmusik ...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das hört sich jetzt vllt alles n bisschen einfältig an, Software versuchen zu programmieren, wenn noch keine Hardware zu Verfügung steht, aber was soll ich tun außer zu simulieren und mir mal n paar grundlegenden Dinge mir zu erarbeiten.
Deshalb weise ich Dich ja darauf hin, damit Du nicht viel Arbeit in einen falschen Weg investierst.
Warum soll es Probleme mit der Geschwindigkeit geben? Es geht bis jetzt nur um die Position, die bis jetzt noch nichts mit der Geschwindigkeit zu tun hat.
Du willst einen Kreis fahren. In Deinem Kode-Ausschnitt taktest Du den Winkel in konstanten Inkrementen vor, dann ist sowohl die sich ergebende Bahngeschwindigkeit als auch die Beschleunigung in Achsrichtung von Radius des Kreises abhängig. Da Dein Antrieb nur bestimmte Geschwindigkeiten und Beschleunigungen erlauben wird, kannst Du vielleicht nur kleine Kreise fahren, wenn Du das nicht beachtest.
Edel wäre natürlich noch, n bissel Regelungstechnik mit reinzubringen, indem die Geschwindigkeit der Achsen in Abhängigkeit dem Abstand der Koordinaten gesetzt wird und somit x und y Wert gleichzeitig erreicht werden, auch unterschiedlichem Verfahrweg. Aber das ist noch Zukunftsmusik ...
Wenn Du es nicht schaffst dass der x- und der y-Endwert gleichzeitig erreicht werden, kannst Du nur Geraden in Achs-Richtung und unter 45 Grad fahren, alle anderen werden einen Knick haben. Ist das so geplant?
 
zum deinem letzten Punkt: -Ja, unter 45° wird verfahren, bis eine Koordinate erreicht ist - danach nur noch in x oder y Richtung.

ist natürlich die Frage, ob man das sieht, wenn die Schritte klein gewählt werden!?


Sind meine Ideen verwirklichbar?

Bin ja leider kein Applikateur, der Erfahrung hat (wie Ihr sicher schon bemerkt habt), sondern n Student der kaum praktische erfahrung hat.
 
Du schriebst in Deinem ersten Post
Dreieck und einfache Geometrien, die mit wenigen Punkten abgefahren werden können, sind kein Problem.
Bestehen diese Geometrien auch nur aus 45 Grad und 90 Grad Bewegungen?
Sonst hast Du da auch das Problem mit dem Knick, oder Du zerlegst diese Bewegungen auch in sehr kleine Schritte.
 
Der Aufwand liegt weniger in der Regelung, sondern in der Erzeugung der Sollpositionen.
Allein um eine Gerade abzufahren musst Du ein Interpolationsverfahren einsetzen, das zusätzlich zur Geometrie auch noch Beschleunigungs- und Verzögerungsrampen und die gewünschte Bahngeschwindigkeit berücksichtigt.
Mein Tip: Kümmer Dich im Moment noch nicht so sehr um die programmtechnische Realisierung sondern um die mathematischen Verfahren und berechne außerdem aus den gewünschten Genauigkeiten, Geschwindigkeiten, Massen, Übersetzungen, Spindelsteigungen etc die erforderlichen Daten für Deinen Antrieb. Dann suchst Du die Antriebe aus und bis die Maschine gebaut ist, hast Du das Programm geschrieben.
Die ganze Mathematik brauchst Du doch für Deine Bachelorarbeit sowieso oder?
Gruß
Erich
 
das math. Zeugs ist kein Problem...die Rechnungen stehen.

Problematischer wirds da schon die in AWL zu programmieren, wobei das bei der Kreisinterpolation eig kein Problem war (etwas umständlich aber). Wie gesagt, meine SCL Erfahrungen sind gleich 0, sonst denk ich, dass SCL hier ideal wäre.
 
Zurück
Oben