Mit Schleife DB füllen

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo htw

Ich habe vor kurzem auch an einem Projekt gearbeitet, bei dem Bahnkurven berechnet werden müssen. Wir haben das dort mit Matlab realisiert. Wenn du willst, kann ich dir die m-Files zukommen lassen. Es ist wichtig, dass du beim Starten und Stoppen Beschleunigungsphasen einbaust. Die Geschwindigkeiten und Beschleunigungen kannst du mit Matlab auch problemlos berechnen.

Die offline berechneten Daten haben wir dann in folgende Form gebracht:

strecke[1,1]:=30.005;
strecke[1,2]:=0;
strecke[1,3]:=30.0035;
strecke[1,4]:=0;
strecke[2,1]:=30.09;
strecke[2,2]:=212.5;
strecke[2,3]:=30.0635;
strecke[2,4]:=150;

Dieser Code wurde dann in ein FC kopiert und beim Starten den Anlage einmalig ausgeführt.

Gruss
Simon
 
kannst du mir eine Zeile näher erläutern?

strecke[1,1]:=30.005

Strecke [Kor_x, Kor_y] := Was hat dieser Wert zu bedeuten? ... denk mal nen Beschleunigungsfaktor?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei dem Array Strecke handelt es sich um ein Array mit 4 Spalten und 400 Zeilen


1: Zeile x1 ax1 y1 ay1
2: Zeile x2 ax2 y2 ay2

strecke[1,1]:=x1;
strecke[1,2]:=ax1;
strecke[1,3]:=y1;
strecke[1,4]:=ay1;
strecke[2,1]:=x2;
strecke[2,2]:=ax2;
strecke[2,3]:=y2;
strecke[2,4]:=ay2;
...
...



in einer Zeile steht immer ein Punktepaar und die Beschleunigung bis zum nächsten Punkt (Vorsteuerung der Regelung).

Der Programmcode ist aus einer Beckhoffsteuerung aber auch in ST geschrieben. Ich denke der Syntax sollte dabei sehr ähnlich sein.

Gruss
Simon
 
Verstehe.

Die m-Files dazu habt ihr selber entwickelt, oder irgendwoher genommen (du erwähntest Beckhoff)?
 
Hallo,
ich muss mir hier noch einmal an den Beitrag von LargoD ranhängen ...
Ich stimme dem mit dem "Achsen verfahren" uneingeschränkt zu.
Wenn du in der SPS die Positionen quasi als Stützpunkte berechnest und sie "nach Bedarf" zum Servo-Regler überträgst dann wird es dir ggf. möglich sein ein Dreieck zufahren - niemals aber etwas, das einem Kreis auch nur ähnlich sieht - wahrscheinlich nicht einmal ein sinnvolles (symetrisches) Polygon.

Ihr solltet hier darüber nachdenken, die Berechnung in den Servo-Regler zu bringen. Z.B. kannst du bei Bosch-Rexroth (aber auch bei vielen Anderen) so ein Berechnungsprogramm in die Funktionalität einbauen (das wäre dann in ST - also so wie SCL) und du kannst hier auch mehrere Achsen koordinieren - also auch ´ggf. etwas, das einem Kreis nahe kommt, realisieren.

Nur mal so am Rande ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du meinst also, es ist gar nicht möglich einen Kreis nachzubilden?

Wenn aber die Geschwindigkeit nicht all zu groß wäre und ich eine sehr kleine Schrittweite nehmen würde, müsste es in die Richtung Kreis gehen (für das Auge sollte schon ein Kreis erkennbar sein)?


Berechnung der Schrittweite bei einer Motorwelle von 1 cm Radius auf der die Zahnkette sitzt:

U = 2 * pi * r = 6,28 * 1 cm = 6,28 cm

kleinste Schrittweite von meinem Beispielmotor von Festo: 1,8°

360 ° --> 62,8 mm
1,8° --> ( 62,8 mm / 360° ) * 1,8° = 0,3 mm
 
... so wie ich dich verstanden habe hast du (oder du planst) eine 2-Achsen X-Y-Steuerung im Grunde ähnlich einem alten Flachbett-Plotter. Ist es so ?
Wenn ja, dann fahren deine beiden Achsen ja nur vor-zurück und da auch nur einen Weg - klar bei Festo wird die Achse in Grad Motorumdrehungen dargestellt, die du sinnvollerweise aber in einen Fahrweg umrechnest.
Z.B. einen Kreis fährst du ja nun über die Sinus-Cosinus-Berechnung wo dann von Punkt zu Punkt manchmal beide Achsen den gleichen WEeg zurückzulegen haben und manchmal nur die eine Achse fährt und die andere gar nicht. Das passiert aber nicht hintereinander sondern sinnvollerweise gleichzeitig und synchron zueinander. Das kann natürlich über die SPS laufen - würde aber wenn es genau werden soll sehr langsam werden oder wenn es schnell (quasi on-the-fly) laufen soll sehr ungenau werden.

Gruß
Larry
 
kleinste Schrittweite von meinem Beispielmotor von Festo: 1,8°

360 ° --> 62,8 mm
1,8° --> ( 62,8 mm / 360° ) * 1,8° = 0,3 mm

Du hast ja sicher nach deinem Motor eine Linearachse (Spindel, Zahnstange oder änliches) und evtl auch noch ein Getriebe mit einer Untersetzung.

Wenn du eine Spindel mit 1mm Steigung direkt an deinen Schrittmotor anflanscht, kannst du viel genauer positionieren:

360° (eine Motorumdrehung) = 1mm linearer Weg
1,8° (Schrittweite) = 0,05mm linearer Weg

Mit Getriebe entsprechend genauer...

Bei deiner Berechung verstehe ich noch nicht wie du die rotatorische in eine lineare Bewegung umbiegst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau.

Natürlich sollen die Achsen synchron zueinander laufen. Je kleiner die Schritte, desto genauer - das ist mir bewusst.
Nun könnte man doch aber die Geschwindigkeit in Abhängigkeit des Abstandes berechnen, so dass beide Achsen gleichzeitig den Folgepunkt erreichen.
Sozusagen versuch ich meine Koordinaten linear zu interpolieren, also Geraden zwischen meinen Punkten reinzulegen ohne Ecken ect .... nuja, zumindest wäre das mein Wunsch =)
 
der Schrittmotor wird 90° versetzt zur Linearachse und somit treibt seine rotatorische Bewegung den Zahnriemen an.

Getriebe ist ne gute Idee, hatte auch schon darüber nachgedacht.
 
Gut OK ...
Es würde dann also so laufen :
Von einem Koordinatenpunkt "Start" aus berechnest du den nächsten Punkt X und Y. Über die Katheten des Dreiecks weißt du den Abstand und kannst entsprechend daraus die benötigten Geschwindigkeiten errechnen, damit beide etwa zeitgleich im Ziel ankommen. Nun startest du beide Achsen mit dem Weg-Wert und der Geschwindigkeit und der Beschleunigung. Nun mußt du warten, bis die Achsen ihr Ziel erreicht haben und kannst nun den nächsten Zielpunkt übergeben und wieder starten. Das wird dann so genau, wie du deine Auflösung hierbei wählst / wählen kannst. Das wird dann bei einem Kreis sicherlich auch ziemlich kreisförmig (warum auch nicht ?). Allerdings wird es auch dauern - wie lange wage ich jetzt nicht annähernd zu schätzen. Es wird hierbei allerdings die meißte Zeit mit dem Handshake SPS - Servo's verdaddelt. Aber nur um es zu testen - why not ...? Sollte es allerdings Leistung bringen sollen ... :rolleyes:

Gruß
Larry
 
Dieses Teil wird für ne Art Showroom gebaut. Es soll Schülern und Studien-Interessierte locken.
Darum sollen auch mit dem Stift Figuren gezeichnet werden (Kreis, Dreieck, ect), um z.b. Spielchen damit zu machen, z.B. einen Kreis versuchen manuell zu fahren. Die Interessierten könnten somit die X und Y Achsen direkt steuern. Eventuell könnte man auch nen Wettbewerb aufziehen, wer den besten Kreis malt (die Aktualwerte vergleichen mit den ideellen die im DB hinterlegt sind und daraus die Abweichung berechnen) ....

Tut mir Leid, hätt ich vllt noch sagen müssen, wobei s an meinen Problemen ja nichts ändert.
 
Ich würde mich beim Programmieren mehr am Stand der Technik orientieren, auch wenn es mit Step7 realisiert wird. Wir haben 2011.

Mathematische Berechnungen, Interpolation, Arrayzugriffe manuell nach AWL zu kompilieren und das Ergebnis weiterzuentwickeln ist vor allem ein hoher Zeitaufwand und führt zum Risiko von schwer nachvollziehbaren Fehlern, weil ein Pointer sonstwohin zeigt.

Das ist gerechtfertigt, wenn die Anforderung "AWL oder Assembler" ist oder ausreichend Stunden geschoben werden müssen, damit die Arbeit anerkannt wird.

Andernfalls gilt: Die Formeln so aufschreiben, wie bereits gesehen, ein paar Semikolons hinzufügen, Variablen deklarieren mit "_" statt "-" im Namen und ansonsten die Fehlermeldungen des SCL-Compilers beachten. Ähnlich wie VBA. Das spart sehr viel.

Weiterer Hinweis: Wenn es eine "billige" SPS ist, sollte die Berechnung auch in Echtzeit gehen, die sind nämlich schnell genug. Teure SPSe eines renommierten Herstellers ;) sind vielleicht zu langsam, dann wird das Array als Zwischenschritt notwendig.

Step7 hat ein Feature "Externe Quelle". Damit lassen sich zB komplette DBs, die als Quellcode vorliegen (zB mit VBA erzeugt), einlesen. Wenn ein DB von außen vorbelegt werden soll, der mehr als ca. 10 Werte enthält, geht das um ein Vielfaches schneller. Mit "Quelle generieren" und "Quelle exportieren" kann man Beispiele erzeugen.

Beim Kreismalwettbewerb werden natürlich die real angefahrenen Positionen in DBs gespeichert und dann "in Ruhe" mit der Berechnung selbst verglichen.

Zur Kommunikation mit den Achsen: Ich weiß nicht, wie man das normalerweise macht, damit es so langsam und schwierig wird. Ich gebe immer einen Analogwert für die Geschwindigkeit vor und bekomme einen Inkrementalgeber-Wert für die Istposition. Damit klappt das Kreise fahren sehr gut, besonders wenn es nur fürs Auge ist, es erfordert aber noch eine Regelung in Software. Wenn immer Stützpunkte an den Regler zu übergeben sind, ist es schwierig, eine konstante Geschwindigkeit zu erreichen. Der Regler ist immer "schon fast da" und fährt variabel langsam an den Punkt heran. Da hilft es vielleicht, immer einen außerhalb des Kreises liegenden Punkt (auf der Tangente vom aktuellen Punkt aus) vorzugeben, damit die Servos sich durchgehend bewegen. Dann natürlich nicht warten, bis der Punkt erreicht ist, sondern sofort den nächsten vorgeben. Damit habe ich keine Erfahrung, ist nur so eine Idee.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke. Das ist ein völlig neuer Ansatz. Werde mir dann doch mal SCL anschaun.
Das Teil sollte am besten über ein Touchpanel gesteuert werden.
Mit SCL die Berechnungen durchzuführen scheint viel "edeler" als alle in AWL zu programmieren und mit verschied Variablen und Lokalvariabeln um sich zu werfen.

Jetzt muss ich aber erstmal schauen, ob wir an der Hochschule überhaupt SCL verwenden. Die Frage ist, wenn nicht, was dann?
Bleibt mir ja nur der AWL Weg.
Außer ich lass meine Berechnungen in VBA stattfinden und Übertrag sie dann per libnodave (damit könnte die Übertragung stattfinden, hab ich gelesen, aber noch keine Erfahrung damit). Damit muss aber immer ein PC angeschlossen sein.
 
Wenn SCL nicht verfügbar ist, würde ich es immer noch für sinnvoll halten, geeignete Teile des Programms in einer Hochsprache (zB SCL) zu schreiben und dann schlimmstenfalls manuell nach AWL zu kompilieren. Zumindest ist es dann "in lesbar" vorhanden.

Vielleicht kann der Fachbereich Informatik - Compilerbau eine Semesterarbeit anbieten, Thema "SCL nach AWL Compiler". Oder besser "C nach AWL" ;)

Außer ich lass meine Berechnungen in VBA stattfinden und Übertrag sie dann per libnodave (damit könnte die Übertragung stattfinden, hab ich gelesen, aber noch keine Erfahrung damit). Damit muss aber immer ein PC angeschlossen sein.

DAS ist mal eine gute Idee. Einerseits kann man in einigen Bedienoberflächen-Erstell-Tools (wie WinCCflex) auch Basic-Funktionen erstellen und mit der SPS kommunizieren.

Aber wenn eine Übertragung mit libnodave zur Laufzeit klappt, sind die Einsatzmöglichkeiten endlos...

Das Touchpanel ist wahrscheinlich ohnehin ein PC. Und wenn der nicht mehr da ist, fährt die Maschine ihre letzte Bewegung fertig, wie wenn es keine neue Eingabe gibt.
 
So ... nach einer lange Zeit hat sich so einiges getan ...

Durch die vielen Beiträge ist mir klar geworden, dass meine ersten Gedanken zu diesem Thema einfach zu naiv waren.
Des Weiteren gibt es schon Baugruppen die interpolieren können. So habe ich dann eine Mail an Siemens geschrieben mit der Bitte um Unterstützung. Es kam prompt eine positive Rückmeldung und einer Einladung direkt zu Siemens.

Der Status Quo sieht nun wie folgt aus:

Siemens sponsert mir eine D435 Simotion und die nötigen Antriebe (Sinamics).
Derzeit programmiere ich nun an einem Trainings- und Simulationskoffer von Siemens bis die nötigen Komponenten bestellt und die ganze Bürokratie von Tisch ist.

Probleme bestimmte Positionen anzufahren gibts es natürlich nicht mehr, da es schon fertige Bausteine gibt, die alle Rechenarbeit erledigen.

Ich programmiere auch nun in ST. Habe mich jetzt 1,5 Wochen reingefitzt und es läuft ganz gut, doch es ergeben sich hin und wieder Fragen, die ihr mir eventuell beantworten könnt!

Hoffe das passt überhaupt noch in den Threat (von Thema her).


-Wie kann ich in ST eine Flankenabfrage realisieren?

mit R_TRIG ? leider steht in der Hilfe kein konkretes Beispiel, an welchem ich mich orientieren könnte.


VIELEN DANK an euch!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich in ST eine Flankenabfrage realisieren?

mit R_TRIG ? leider steht in der Hilfe kein konkretes Beispiel, an welchem ich mich orientieren könnte.

Hallo,
das würde ich so machen :
Code:
if myAction and not myAction_OK then
 
... tue, was zu tun ist ...
 
end_if ;
myAction_OK := myAction ;
... hierbei wäre myAction_OK dann ein BOOL und im Bereich der VAR-Deklaration (also Statisch) angeordnet.
Dieses Bit könnte nun auch sehr schön die Bestätigung darstellen, dass der Befehl ausgeführt worden ist (möglicherweise als Feedback an das aufrufende Programmteil).

Gruß
Larry
 
ok ... habs =)

Da sucht man ewig und plötzlich gehts ... und es ist einem "clear as crystal".
 
Zurück
Oben