# Was benötige ich um SPS-Achsen zu verfahren?



## MichaelHe (5 Juli 2010)

Hallo Forengemeinde,
ich muss eine Maschine mit TwinCat-PTP realisieren und erstmal die Achsbausteine schreiben. Anscheinend gibt es da ein paar Bausteine, die für diese Aufgabe sinnvoll und "notwendig" sind.
- MC_Power
- MC_Reset
- MC_Stop
- MC_MoveAbsolutOrRestart

Frage 1:
Das sehe ich doch so erst einmal richtig, oder?

Nur für gewisse Dinge möchte ich auch weitere Informationen haben, wie z.B. "aktuelle Geschwindigkeit" oder "aktuelle Position". Diese kann ich anscheinend einmal mit ADS-Read Befehle rauslesen oder direkt aus den Strukturen PLCTONCAXLESTRUCT und NCTOPLCAXLESTRUCT.
Frage 2:
Sehe ich das richtig?

Frage 3:
Was wäre schneller, ADS oder aus der Struktur?

Wenn das alles so stimmt, dann würde ich mir ja einen Baustein mit den o.g. Bausteinen programmieren und drum herum die zusätzlichen Informationen, die ich mir selbst herauslese. Ich finde das etwas durchwuschelt.

Wenn ich mir schon Dinge per Hand rausziehen muss, warum nicht alles?
Ich kann ja Vorschubfreigaben, Geschwindigkeiten und Positionen und alles Andere im Achinterface PLCTONCAXLESTRUCT und NCTOPLCAXLESTRUCT finden.
Dieses Interface wäre nun für mich etwas überladen. Doch ich kann mir doch meine eigene Struktur schreiben und dort nur die wichtigsten Dinge reinpacken, oder?

Frage 4:
Wie seht Ihr das?

Grüße,
Michael


----------



## PeterPan83 (6 Juli 2010)

Hallo,

also ich benutze für die einfache Achspositionierung die Bausteine
MC_MoveAbsolute
MC_Home (Fürs Referenzieren der Achse beim Neustart)
MC_Jog (Für Handfahrten)
MC_Power
MC_Reset


Die aktuelle Pos und Geschwindigkeit bekommst du aus der Struktur 
PLCTONCAXLESTRUCT und NCTOPLCAXLESTRUCT
einfach 
NCTOPLCAXLESTRUCT.fPosIst
NCTOPLCAXLESTRUCT.fVeloIst

Was schneller ist kann ich nicht sagen, habe mit ADS noch nichts gemacht.

Ich habe mir einen eigenen FB geschrieben, mit den wichtigsten Befehlen die ich brauche. Ist sehr hilfreich.

Ich hoffe ich konnte dir ein wenig weiter helfen 


MfG


----------



## MichaelHe (6 Juli 2010)

Hallo PeterPan,
danke für die Antwort. Wenn Du anstelle MC_MoveAbsolute den Baustein MC_MoveAbsoluteORRestart benutzt, kannst Du Zielposition und/oder Geschwindigkeit verändern, bevor das ursprüngliche Ziel erreicht ist.

Ich würde gerne noch von jemadem wissen, ob ich diese Bausteine theoretisch brauche:
Ich kann ja jeden Zustand aus der angesprochenen Struktur rauslesen.
Wenn ich sehe, dass die Achse Betriebsbereit ist usw. Dann kann ich sie doch über die Struktur so beschalten, dass sie verfährt?
Also z.B.:

PLCTONC_AXLESTRUCT.Enable=TRUE (*Reglerfreigabe*)
PLCTONC_AXLESTRUCT.FeedEnablePlus=TRUE (*Vorschubfreigabe Plus*)
PLCTONC_AXLESTRUCT.FeedEnablePlus=TRUE (*Vorschubfreigabe Minus*)

usw.
aber wo beschreibe ich nun die Sollposition und Sollgeschwindigkeit?
Da steht nur etwas von externer Sollposition?
Heißt das dann die Achse bekommt gleich die ultimative Sollposition?
Hätte den Vorteil, dass der Rechner weniger belastet würde, oder? Denn der Regler würde nicht die ganze Zeit mit Zwischensollpositionen gefüttert werden(welche die nc ja berechnen muss), sondern mit dem letzten Sollwert. Dadurch muss der Servo halt selbst geregelt dorthin fahren (ich sag mal, das könnte BoschRexroth gut).
Entschuldigt, dass ich so viel frage, aber ich habe viele Vermutungen, wie das Ganze geht, aber bin mir nicht sicher und ich darf jetzt nicht 2 Wochen in die falsche Richtung programmieren. Die Maschine ist in 4 Wochen mechanisch fertig und ich habe ca. eine Woche Zeit für die Inbetriebnahme.
Außerdem möchte ich diese Bausteine so gut wie möglich und flexibel programmieren, da sie der Grundbaustein für nächste Projekte werden sollen.
Vielen Dank


----------



## trinitaucher (6 Juli 2010)

MichaelHe schrieb:


> Ich würde gerne noch von jemadem wissen, ob ich diese Bausteine theoretisch brauche:
> Ich kann ja jeden Zustand aus der angesprochenen Struktur rauslesen.
> Wenn ich sehe, dass die Achse Betriebsbereit ist usw. Dann kann ich sie doch über die Struktur so beschalten, dass sie verfährt?
> Also z.B.:
> ...


Fahrbefehle kannste nur über die Bausteine abschicken, da der Sollwertgenerator ja arbeiten muss. Istwerte bekommste über die Achsstrukturen.

Die ADS-Bausteine brauchste nicht unbeding. Für die Istwerte eigentlich gar nicht. Nur wenn du Parameter verändern willst.

Wenn du in das Thema neu einsteigst, kannst du auch gleich mal die neue Bibliothek MC2 anschauen (TcMc2.lib). Die Achsstrukturen sind ein wenig anders aufgebaut und es gibt keinen FB_MoveAbsoluteOrRestart mehr.


MichaelHe schrieb:


> Heißt das dann die Achse bekommt gleich die ultimative Sollposition?
> Hätte den Vorteil, dass der Rechner weniger belastet würde, oder? Denn der Regler würde nicht die ganze Zeit mit Zwischensollpositionen gefüttert werden(welche die nc ja berechnen muss), sondern mit dem letzten Sollwert. Dadurch muss der Servo halt selbst geregelt dorthin fahren (ich sag mal, das könnte BoschRexroth gut).


Meinst du das hier mit Externen Solwlerten?:
http://infosys.beckhoff.com/index.p.../tcncptp/html/tcncptpextsetvalue.htm&id=14721
Das macht nur Sinn, wenn du über die SPS ein vernüftiges Sollwertprofil berechnen kannst (unter Berücksichtigung von Geschwindigkeit, Beschleunigung, Ruck).
Ich denke das ist für deine Zwecke zu aufwendig.

Wenn du aber eh schon eine Achse hast, die ein Positionsinterface besitzt (Verarbeitung von Positionssollwerten, statt Geschwindigkeitssollwerten), dann brauchst du im einfachsten Fall nicht einmal die NC. Du würdest einfach Geschwind., Beschleun. und Ruck am Antrieb parametrieren und über die Prozessdaten stur einen Positionssollwert rausschicken. Der Antrieb rennt dann immer hinterher.



MichaelHe schrieb:


> Entschuldigt, dass ich so viel frage, aber ich habe viele Vermutungen, wie das Ganze geht, aber bin mir nicht sicher und ich darf jetzt nicht 2 Wochen in die falsche Richtung programmieren. Die Maschine ist in 4 Wochen mechanisch fertig und ich habe ca. eine Woche Zeit für die Inbetriebnahme.


Im Idealfall machst du erstmal eine NC-Schulung bei Beckhoff. Kann ich sehr empfehlen! 


MichaelHe schrieb:


> Außerdem möchte ich diese Bausteine so gut wie möglich und flexibel programmieren, da sie der Grundbaustein für nächste Projekte werden sollen.


Dann solltest du nach und nach alle Grundfunktionen implementieren:

Power
Reset
Home
MoveAbsolute (bzw. MoveAbsolutOrRestart bei MC1)
MoveVelocity
MoveModulo


----------



## MichaelHe (6 Juli 2010)

Hallo Trinittaucher,
jetzt wird mir einiges klarer, danke.
Ich werde es dann über Deine angesprochenen Bausteine machen.

Ich habe noch ein paar kleine Fragen:
1.
Benötige ich wirklich den Baustein MC_Stop oder reicht es, wenn ich die Reglerfreigabe vom Powerbaustein nehme?

2.
Wenn die Achse verfährt und ich nehme die Freigabe und gebe sie anschließend zurück, fährt die Achse dann weiter oder muss ich das "Execute" am "MoveAbsolute" Baustein erneut ausführen?

Vielen Dank!


----------



## trinitaucher (6 Juli 2010)

MichaelHe schrieb:


> 1.
> Benötige ich wirklich den Baustein MC_Stop oder reicht es, wenn ich die Reglerfreigabe vom Powerbaustein nehme?


Ja, brauchst du.
Ziehst du zum Bremsen etwa den Zündschlüssel bei deinem Auto? ;-)

Wenn du Reglerfreigaben während der Fahrt entziehst, gibt's wahrscheinlich nen Haufen Fehler.


MichaelHe schrieb:


> 2.
> Wenn die Achse verfährt und ich nehme die Freigabe und gebe sie anschließend zurück, fährt die Achse dann weiter oder muss ich das "Execute" am "MoveAbsolute" Baustein erneut ausführen?


Siehe oben.
Im Fehlerfall werden alle Fahraufträge gelöscht.

Die Achse (auch NC-seitig) sollte immer Enable bleiben. Die Kommandos dann über die Bausteine.
Nur im Fehlerfall oder bei Not-Halt sollte die Freigabe entzogen werden. Und natürlich zum "ausschalten" der Antriebe.


----------



## MichaelHe (10 Juli 2010)

Hallo Trinittaucher,
noch mal vielen Dank.
Ich habe den Baustein fast fertig.
Ich habe da noch eine Frage zum "Fahren auf Festanschlag". Ich bin nicht sicher, ob ich weiß, wie das funktioniert.
Meine Vermutung:
Ich muss erstmal den "Drehmoment/Kraft-Grenzwert bipolar" auf meine gewünschte Grenze setzen (S-0-0092). 
Dann gebe ich über das Signalsteuerwort (S-0-0145) an, dass ich nun "auf Festanschlag" fahren möchte.
Wenn ich dann diese Position erreicht habe, bekomme ich das mit, in dem ich Über S-0-0084 auswerte, dass der Drehmoment/Kraft-Istwert größer sein Grenzwert ist, richtig? 

Was muss ich dann tun? Der Fahrauftrag steht doch dann noch an? Muss ich dann "nur" das Execute beim MC_MoveAbsoluteOrRestart zurücksetzen? Oder braucht man das nicht?

Schon mal vielen Dank und schönes Wochenende,
Rafael


----------



## trinitaucher (10 Juli 2010)

Du hast also nen Sercos-Antrieb. Welcher Hersteller?

Wie du vom Antrieb die Meldung bekommt, weiß ich nicht.

Du musst bei Festanschlagfahrten aber auf die NC-Reaktion aufpassen.
Wenn der Antrieb bei Fahrt auf den Anschlag sein "Bereit" im Statuswort wegnimmt, wird die NC bestimmt nen Fehler bringen, da der Antrieb während der Fahrt sich nicht mehr als enable meldet.
Dafür gibt's bei der TwinCAT-NC ein Bit zu setzen, welches zulässt, dass der Antrieb während der Fahrt sein "Bereit" wegnimmt (Bit 8, "accept blocked drive"):
http://infosys.beckhoff.de/index.ph...tml/tcnccyclicinterfaceaxisplcnc.htm&id=14844
Dann wird die NC erst einen Fehler bringen, wenn die Schleppabstandsüberwachung zuschlägt. Der Sollwert wird weiter erhöht, der Antrieb kann aber nicht folgen.
Wenn du bspw. die Grenze bei 15mm setzt, der Schleppabstand aber 5mm übersteigt, weißt du, dass der Anschlag erreicht ist und stoppst die Achse mit MC_Stop (langsam fahren, sonst kommt die Überwachung zu schnell). Ein MC_Move... wird dann abgebrochen.
Bedenke, dass der Sollwert dann noch ansteht (wg. dem Schleppfehler)! Man könnte dann die Achse resetten, um den Schleppabstand auf null zu setzen. Oder du setzt Sollwert = Istwert.
Zusätzlich kannste den Anschlagpunkt als Software-Endlage setzen.


----------



## MichaelHe (17 Juli 2010)

Hallo Trinittaucher,
danke für die Antwort. Ich werde zunächst eine andere Variante versuchen. Wir benutzen Regler von BoschRexroth. Erschwerend kommt hinzu, dass es sich um Advancedregler handelt, also Regler mit besonderer Sicherheitstechnik (Regler dürfen am Netz bleiben, wenn Bediener ins Lichtgitter geht). Das Problem wird sein, dass ich das Drehmoment bei den Advancedreglern nicht beliebig runterschrauben darf. Wenn der Regler merkt, dass seine Drehmomenteinstellungen nicht ausreichen um in vorgegebener Zeit "sicher" zum Stillstand zu kommen, gibt es einen Fehler.
Deshalb versuche ich es mit dem Parameter S-0-0126 Drehmomentschwelle Mdx. Dies ist ein Drehmoment das man beliebig wählen kann. Wird es überschritten, dann passiert nichts weiter, als dass man dies über das Bit 3 in S-0-0013 auslesen kann.
Ich muss ein Brett spannen und weiß ziemlich genau wo es liegt. Ich gehe mit der Achse auf eine Vorposition ca. 4mm vor dem Ort, an dem der Bediener nun das Werkstück platziert. Ich fahre langsam weiter (ca. 8mm)und löse ein MC_Stop aus (und damit einen Abbruch des aktuellen Auftrags) sobald das Bit 3 von S-0-0013 gesetzt wird. Dieser Stop in dieser Konstellation, signalisiert mit, dass das Ziel erreicht wurde, da ich meinen NC-Baustein so geschrieben habe.

Das ist alles Theorie bis jetzt. Die Anlage ist noch im Aufbau und ich kann hoffentlich ab KW31 an die Anlage.
Ich werde dann bestimmt noch so einige Schwächen und Fehler in meinem NC-Baustein finden, aber ich hoffe, dass ich nach diesem Projekt einen guten Baustein geschaffen habe.
Bis hierher noch einmal viele Dank.
Gruß,
Michael


----------



## newcomer14 (10 März 2015)

hallo leute,

das theme ist paar Jährchen her, aber hoffe trotzdem, dass einer meine Frage beantworten kann.

Ist es möglich den Strom vom Schrittmotor AS1060 auslesen zu können? Also möchte gerne den Strom-Wert in der SPS integrieren,
so daß ich jeder Zeit den Strom von der VISU auslesen kann.


Danke im Voraus

Gruß


----------



## ostermann (12 März 2015)

Das Thema ist nicht nur ein paar Järchen her, Deine Frage hat auch überhaupt nichts mit dem Thema zu tun. Für neue Fragen sollte man auch ein neues Thema (Thread) aufmachen. Und wenn du uns in der neuen Frage dann auch noch verrätst, mit welcher Hardware du deinen Motor ansteuerst (vermutlich EL7041 oder EP7041), dann bekommst du auch eine Antwort. 

Mit freundlichen Grüßen
Thorsten Ostermann


----------



## newcomer14 (18 März 2015)

Hat sich erledigt


----------



## newcomer14 (20 März 2015)

Wie sieht es denn aus, wenn ich mehrere Achsen betreibe möchte. Benötige ich für jede Achse dann auch PLCTONCAXLESTRUCT und NCTOPLCAXLESTRUCT?


Gruß


----------



## ostermann (20 März 2015)

Kurz und knapp: Ja.

Mit freundlichen Grüßen
Thorsten Ostermann


----------



## newcomer14 (20 März 2015)

Alles klar. Länger muss die Antwort auch nicht sein.

Danke


gruß


----------

