Mit Schleife DB füllen

htw

Level-1
Beiträge
34
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich schreibe gerade meine Bachelorarbeit und dabei muss ich ein Portal konstruieren, dass in X-, Y- und Z- Richtung verfährt, verschied. Positionen anfährt, ect ... und mit SPS gesteuert wird.

Z.b. sollen man bestimmte Formen abfahren können mit unterschiedlicher Größe.

Dreieck und einfache Geometrien, die mit wenigen Punkten abgefahren werden können, sind kein Problem.

Anders sieht es mit einem Kreis aus. Hier habe ich mir anfangs gedacht, ich berechne z.b. 500 Koordinatenpunkte mit einem VBA Programm oder auch Taschenrechner und gebe diese manuell in einem DB ein. Je nach dem, wie groß oder an welche Stelle nun dieser Kreis "gemalt" werden soll, werde ich mit Hilfe eines Pointers die DB´s für die verschied. Koordinatenachse auslesen und ihn mit einem Faktor multiplizieren (um ihn zu vergrößern) oder addieren (um eine Verschiebung stattfinden zu lassen) und in neuen DB´s ablegen, die ich verarbeite.

Natürlich ist z.b. das Eingeben manuell von 500 Werten umständlich und meiner Meinung nach wenig professionell. Eleganter wäre es doch, die math. Formel zu Berechnung der Kreiskoordinatenpunkte zu Programmieren und die DB´s mit den Koordinaten zu füllen und anschließend wieder zu verarbeiten. Ich dachte beim Füllen der DB´s evenutell an eine Schleife.

Ist das möglich?

Hoffe ich habe mein Anliegen verständlich geschildert.

VIELEN DANK
 
Je nach dem, wie groß oder an welche Stelle nun dieser Kreis "gemalt" werden soll, werde ich mit Hilfe eines Pointers die DB´s für die verschied. Koordinatenachse auslesen und ihn mit einem Faktor multiplizieren (um ihn zu vergrößern) oder addieren (um eine Verschiebung stattfinden zu lassen) und in neuen DB´s ablegen, die ich verarbeite.

Natürlich ist z.b. das Eingeben manuell von 500 Werten umständlich und meiner Meinung nach wenig professionell. Eleganter wäre es doch, die math. Formel zu Berechnung der Kreiskoordinatenpunkte zu Programmieren und die DB´s mit den Koordinaten zu füllen und anschließend wieder zu verarbeiten. Ich dachte beim Füllen der DB´s evenutell an eine Schleife.

Ist das möglich?
Ja das geht auf jeden Fall.
Und wie Du selber schon erwähnst, sind die Stichwörter "Schleife" und "Indirekte Adressierung"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Würdet ihr die X- und Y-Koordinaten in einen DB tun?

DB x und y

0.0 x-Wert 1
2.0 y-Wert 1
4.0 x-Wert 2
6.0 y-Wert 2
8.0 .....


ODER 2 DB´s


DB x --- DB y

0.0 x-Wert 1 --- 0.0 y-Wert 1
2.0 x-Wert 2 --- 2.0 y-Wert 2
4.0 x-Wert 3 --- 4.0 y-Wert 3

Jedem X-Wert wird ein Y-Wert zugeordnet um eine Position anfahren zu können.

Wie gesagt, es geht um ne Bachelorarbeit und sollte möglichst praxisnah sein. Ich habe leider noch keine Erfahrung in der Industrie.

Vielen Dank nochmals!
 
Hallo,
du könntest dir ein Array in dem DB deklarieren - das geht auch 2dimensional.
Und wenn du es so richtig schön machen willst dann machst du das ganze nicht mit AWL sondern eher mit SCL. Das erspart dir dann auch eine ganze Reihe weiterer Problemchen, die bestimmt noch kommen ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Trotzdem, ich würde die Werte nicht mit einer Schleife im DB Ablegen und dann wieder mit einer Schleife aus dem DB holen.

Rechne doch die Sollkoordinaten direkt aus.
 
Meine Idee sah bis jetzt in etwa so aus:

Bsp. Kreis (da das die schwierigste Form ist):

- Ich rechne einen Kreis aus und befülle einen DB mit den x-Werten und einen mit den y-Werten manuell.
- Anschließend lese ich die Werte aus (Pointer) und multipliziere (bei Vergrößerung oder Verkleinerung des Radius) sie oder addiere und subtrahiere sie (Verschiebung).


Zu den Verbesserungen:

- Kreis Formel programmieren und DB (Array) mit den Werten füllen.
- 2 Dimensional


Meine Fragen:

@ Larry:
- kannst du mir erklären, wie ein 2D Array aussieht? kann mir noch nichts darunter vorstellen.
- SCL? Hab ich schon mal gehört, aber noch keine Praxiserfahrung bzw. überhaupt Erfahrung damit. Ist die Sprache ähnlich der von AWL?

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

Nochmals ein großes Dankeschön für eure immer kompetenten und hilfreichen Antworten. Als Student hat man einfach nie die Erfahrung, die ihr alten Hasen habt (Sagt jetzt bitte nicht, ihr seid 19 oder 20 Jahre alt :-D).
 
Um die Kreispositionen zu speichern brauchst Du kein zweidimensionales Array, Du musst nur zwei Positionen pro Stützpunkt speichern. Das kannst Du in zwei DBs oder auch eleganter als "Array of struct" machen, es bleibt aber dabei eindimensional.
Ich würde so vorgehen:
Definiere einen UDT, der einen Punkt über seine x,y und z Koordinaten definiert.
Um Bahnkurven zu speichern, definierst Du in einem DB ein Array dessen Elemente aus diesem UDT bestehen.
Das Vorbesetzen des Arrays und die Datenmanipulationen würde ich in SCL schreiben, dann sparst Du Dir das ganze Pointergerödel. Das wird besonders interessant dann, wenn Deine Kurven nicht in einer Ebene liegen und Du deshalb räumliche Transformationen durchführen musst.
z. B. eine Kreisbahn die räumlich "schräg" im Koordinatebsystem liegt, oder ist das in der Aufgabenstellung ausgeschlossen?

Gruß
Erich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau, so wie du es sagst, hab ich mir das auch gedacht.
Schräg muss nichts "gemalt" werden. Aber ich SCL trotzdem mal im Hinterkopf behalten.
 
Genial, klappt!

sieht so aus:

DB

0.0 STRUCT
+0.0 zeitraster STRUCT
+0.0 werte ARRAY[0..600]
*6.0 "UDT_WERTE" <-- da X,Y,Z jedesmal also Merkerwort mit 2 Bytes abgelegt
=3606.0 END_STRUCT

Im UDT stehen dann X,Y,Z, die sich wiederholen, bis 600 Werte von jedem drinstehen. Auslesen über Pointer. Das funktioniert auch!

SUPER!!! :-D:-D:-D:-D:-D:-D



Nur beim Befüllen habe ich noch keine elegante Idee, wie man das mit scl oder wie auch immer machen könnte. Natürlich ist es kein Problem per Hand die Werte reinzuhacken.

Kann mir da jmd auf die Sprünge helfen?

Ganz kurz noch:
bei Programmen, die ihr mir eventuell im Forum mitteilt und aus denen ich in meiner Arbeit inhaltlich etwas entnehme, werdet ihr natürlich korrekt zitiert und als Quelle genannt.
 
Ob du es als 2D-Array ( myVar : Array [1..10 , 1..2] of Real ) oder in 2 DB's oder sonstwie machst ist eigentlich egal.
Ich persönlich würde (vor Allem in Verbindung mit SCL) den von mir vorgeschlagenen Weg bevorzugen (ist ja eigentlich auch logisch ;))

SCL ist eine Hochsprache in der Step7-Welt und im Wesentlichen an Pascal / Delphi angelehnt. Für Berechnungen, wie du sie vorhast eigentlich ein "need to have". Du sparst dir dann das Pointergedrösel (wie schon erwähnt) und du erhälst einen (je nach Können) durchaus übersichtlichen Programmcode.

Gruß
Larry
 
... Nur beim Befüllen habe ich noch keine elegante Idee, wie man das mit scl oder wie auch immer machen könnte. Natürlich ist es kein Problem per Hand die Werte reinzuhacken.

Kann mir da jmd auf die Sprünge helfen?

Jetzt mußt du mir nur vielleicht noch verraten ob es AWL oder SCL werden soll ...

Gruß
Larry
 
Mit SCL haben ich bis jetzt überhaupt noch keine Erfahrung.

Darum denke ich, das mit AWL wäre der sichere Weg.

Gibt es denn ein Buch oder online Tutorial indem man sich SCL aneignen könnte?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das du damit keine Erfahrung hast habe ich schon heraus gehört. Trotz alledem wäre (ein bißchen Engagement vorausgesetzt) der Weg mit SCL der "sichere Weg" - auch und vor Allem wegen der Berechnungen (z.b. Kreis).

Ich habe das autodidatisch erlernt - ich kann also zu der Qualität der vorhandenen Literatur keine Angaben machen.
Welche Kenntnisse im Hochsprachen-programmieren hast du denn so ?

Wenn du ein bißdhen Basic oder Delphi kannst bekommst du das sehr schnell auf die Reihe (Stichwort Engagement).

Gruß
Larry
 
Ach ja ... in AWL würdest du dir (trotz des Array's) auf jedes Element einen Pointer bilden müssen um damit zu arbeiten. Ich finde das nicht schick ... ;)
 
OK, das hab ich soweit verstanden.

Die Werte auslesen klappt ja schon mal perfekt (AWL mit Pointer).

Nur das Befüllen ... ne Kombi zwischen SCL und AWL ist nicht möglich? Wahrscheinlich auch nicht elegant zwischen Sprachen zu wechseln...?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:confused: ... das verstehe ich jetzt wiederum nicht.
Wenn du die Werte ausgelesen bekommst dann bekommst du sie in der gleichen Machart auch beschrieben.

Nochmal zu SCL:
SCL hat einen eigenen Editor. Es erzeugt zwar letztlich auch AWL-Code (allerdings Compiler-typisch ggf. ganz schön scheußlichen), aber es läuft erstmal für sich. Du kannst damit dann natürlich einen FB oder eine FC errzeugen, die du in AWL weiterverwenden kannst.

Wie auch immer. Ich verstehe das jetzt mal so, dass du dich für AWL entschieden hast. Wie geht es nun weiter ? Hast du dazu noch Fragen ?
 
was ich bis jetzt habe mal kurz zusammengefasst:

L TAKTGEBER
L 1
+I
T TAKTGEBER

Schleife um den Pointer hochzuzählen(natürlich ist noch n Blinker und andere Bedingungen integriert)

AUF DB [#DB_Kreis]
L #TAKTGEBER
L 6
*D
SLD 3
T #dbPointer
L DBW [#dbPointer] // X
T #_xKoordinate
L #dbPointer
L P#2.0
+D
T #dbPointer
L DBW [#dbPointer] //y
T #_yKoordinate
L #dbPointer
L P#2.0
+D
T #dbPointer
L DBW [#dbPointer] //z
T #_zKoordinate

damit geh ich in meinen DB rein:

0.0 xKoordinate
2.0 yKoordinate
4.0 zKoordinate

6.0 xKoordinate
...


so würde ich auslesen.
 
Zurück
Oben