Schrittmotor programmieren

Ich teste das Ansteuern der Schrittmotoren über eine Variablentabelle da gibt also nicht all zu viel was ich zeigen kann.
Ich habe aber irgendwie das Gefühl das man mir sowieso nicht glaubt das ich selbst auch rum teste!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube dir das du selber versuchst eine Lösung zu finden. Immerhin hast du das Ziel dein Projekt zu einem erfolgreichen Abschluss zu bringen.

Bekommst du denn über das StatusByte der Schrittmotorklemme einen Wert zurück? Zumindest das Idle-Bit (SB.4) sollte ja auf 1 sein wenn der Motor nicht läuft. Liegt SB.6 an, hat die Klemme einen Fehler und muss Resetet werden (pos Flanke von CB.6 0 -> 1)

Die Betriebsart der Klemme sollte entweder auf Geschwindigkeit mit Rampe oder Fahrauftrag eingestellt sein.

Wenn kein Fehler anliegt, dann kannst du auf DataOut einen Geschwindigkeitswert vorgeben (+- 16 bis 3276). ControlBit "Enable" CB.0 muss gesetzt sein. mit ControlBit "Start" CB.2 kannst du dann deinen Motor starten. (Alle anderen ControllBits sollten auf 0 stehen)

Die Verbindung zu KS2000 muss dafür getrennt sein denke ich mal, damit es keine Konflikte gibt.


Ist es in etwa das, was du auch schon versucht hast? Wenn das nicht läuft, dann poste doch bitte mal hier die Ein-und Ausgangsdaten einer Klemme....
 
Danke das ihr mir weiterhelft.

Wenn ich CB.0 auf 1 setze habe ich folgende Signale:
SB1-SB3 = 1
ein Fehler SB.6 habe ich nicht. SB.4 ist aber auch 0 und keine 1.
Das sind die Werte welche ich jetzt im Augenblick habe.

Ist das DataOut das Control-Wort oder liege ich hiermit falsch?
Ich glaube eines meiner Probleme ist, dass ich mir einfach nicht sicher bin wo was genau ist, und wie ich überhaupt den Fahrauftrag anwählen muss.

Ich bekomm langsam echt weiche Knie die Praktische-Arbeit welche wir letzten Freitag schreiben wollten ist wegen Krankheit des Lehrers auf nächste Woche verlegt worden bis
dahin muss ich das drauf haben. Es ist halt enttäuschend, dass ich so viel teste und mache und nichts geht!

Gruß

Stephan
 
SB1 bis SB3 zeigt den Lastwinkel des Motors an. Dürfte erstmal nicht so interessant sein.
Du hast wahrscheinlich die Betriebsart "Geschwindigtkeit mit Rampen" eingestellt ? (über KS2000)
Da braucht man keine Freigabe für Fahraufträge (mein Fehler). D.h. du schaltest den Motor mit CB0 ein. Wenn SB4 (Idle Bit) dann auf 0 wechselt, sollte das heißen das der Motor läuft. (ist SB4 1 wenn du CB0 wieder auf 0 setzt? )

Schreibe mal einen Wert zwischen +- 16 und 32767 auf DataOUT (DataOUT ist die Solldrehzahl zwischen +- 0 und dem von dir in KS2000 parametrierten Maximum). Wenn du dann CB0 auf 1 stellst, müsste dein Motor sich drehen.

Bei DataOUT könnte es aber noch ein Problem mit der Byte-Reihenfolge geben. Siemens CPUs speichern alles im Big Endian Format, die höherwertigen Bytes kommen zuerst.
(MW0 = MB0 MB1). Beckhoff arbeitet normalerweise im Little Endian Format, die Zählung fängt mit den niederwertigen Bytes an (MW0 = MB1 MB0). Daher kann es nötig sein, dass du die beiden Bytes von DataOUT vertauschen musst. Das merkst du z.B. daran, wenn du eine ganz kleine Sollgeschwindigkeit vorgibt und der Motor voll auf dreht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Über die Software KS2000 ist Fahrwegsteuerung eingestellt, und die max. Geschwindigkeit auf 1024, das ist doch die max. Drehzahl oder?

Meine erste KL2541 hat folgende Adressen: E 122.0-127.7 und A122.0-127.7.
Dann ist doch E122.0-122.7 mein Status-Byte und A122.0-A122.7 das Control-Byte.
Wo ist dann aber das DataOut und DataIn zufinden?
Ich war bis jetzt der Meinung das dann bei E125.0-126.7 mein Status-Wort ist und bei A125.0-126.7 mein Control-Wort, stimmt das oder ist das falsch?

Ich bin mir eben auch deshalb nicht sicher wie und wo ich jetzt den Wert für die Drehzahl schreiben muss.
Muss ich hierfür was bestimmtes machen wie irgendwelche Bytes zusammen nehmen? Wenn ja welche sind das dann und wie muss ich das machen?
Ich bin leider noch Anfänger und kenne mich da nicht all zu gut aus!
 
Hallo zusammen,

also wo was bei welcher Adresse liegt weiss ich jetzt sicher und auch die IstPostion wird mir jetzt angezeigt.
Was mir jetzt noch Problemn macht, ist eine Sollposition vorzugeben. Wenn ich in die DataOut einen Wert schreibe, und den Motor starten will zuckt dieser nur kurz
und dann wird mir das Bit SW.13 Vom Status-Wort gesetzt sollange bis ich CB.2 wieder auf Null setze :?.
Was mach ich hier noch falsch mit der Sollpositionsvorgabe?

Gruß

Stephan
 
SW.13 heißt Überstrom an Brücke B. Über die Ursache könnte ich hier nur herumraten. (Vieleicht hast du auch die Spulenstromreduzierung aktiviert? Keine Ahnung ob das den Fehler verursachen kann). Dein Motor ist im Leerlauf?

Um eine Zielposition vorzugeben mußt du die Registerkommunikation aktivieren (CB.7 auf 1).
Der Positionswert ist ein Doppelwort und setzt sich aus den beiden Registern R2 (LowWord) und R3 (HighWord) zusammen.
Wie die Register zu beschreiben sind steht in der Doku.
Danach die Registerkommunikation abwählen (CB.7 auf 0) damit du wieder Fahraufträge über das Controlbyte auslösen kannst.
Wenn du CB.2 auf 0 lässt, sollte der Motor im Drehzahlmodus laufen. Kannst du über DataOut eine Solldrehzahl vorgeben? Reagiert der Antrieb darauf?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Motor ist im Leerlauf, ich habve noch keine Spuindel oder anderes dran!

CB.1 habe ich auf 1 gesetzt und CB.6 auch auf 1 für den Schreibzugriff, über DataOut habe ich versucht eine Sollposition vorzugeben, worauf die Meldung kam ,,Variable nicht gesteuert´´.

Ich habe in der Doku nachgelesen wie man die Register beschalten bzw. beschreiben soll, was ich aber leider nicht so recht verstanden habe! Ich muss doch hierfür die Register anwählen, sprich CB.7 und CB.6
beide auf 1. Danach CB.1 und CB.2 auf 1 für Register 2 und 3. Das ergibt doch einmal 2 für Register 2 und einmal 3 für Register 3.
Oder ist das mein Fehler, das man nicht beide auf einmal anwählen darf? Aber wie soll man das den sonst machen?
 
Du kannst die Register nicht gleichzeitig beschreiben. CB.7 und CB.6 auf 1 für Registerschreibzugriff ist soweit OK. Danach musst du beide Register einzeln schreiben.

Für Register 2 lautet das Controlbyte also 1100 0010. Dann sollte der Wert von DataOut als Low Word für die Sollposition in den Ram der Klemme geschrieben werden.
Ist der Schreibvorgang beendet sollte im Statusbyte 1000 0010 stehen, also das Controlbyte mit invertiertem CB.6.
Danach kannst du mit CB 1100 0011 das Positions-High-Word in R3 schreiben. SB sollte mit 1000 0011 bestätigen.
 
Das habe ich getestet, und alles so gesehen im Statusbyte wie beschrieben.

Die Sollposition macht mir jetzt noch ein wenig Kopfschmerzen. Ich habe einen DB erstellt in den ich über die Variablentabelle die Sollposition in das AW schreiben will,
das geht aber nicht wirklich, der Wert wird zwar in das AW geschrieben, der Motor verfährt aber nicht.
Ich wähle Register 2 an, schreib dann eben über meinen DB z.B. 256 in das AW. Dann Wähle ich das Register 3 an und schreib ebenfalls über den DB z.B.13.
Wenn ich dann CB.2 auf 1 setze, passiert nichts, der Motor verfährt nicht!

Muss ich das doch anders machen?
 
Ja das habe ich und CB.6 auch.
Muss ich für die zwei Wörter (Low und High) extra Variablem anlgen im DB, ich denke doch schon. Wenn das Dataout Wort in Low und High geteilt ist, dann ist doch Low 8Bit sprich 1Byte und High ein Byte.

Oder muss ich ganz anders programmieren und die Werte übergeben? Müssen es Hez-Werte sein oder andere?

L B#16#C2
T #byPAB_1 //Output Byte 1 to Stepper Terminal

L #DB_Number
T #DB_No

Auf DB [#DB_No]
L DBB 42
T #byPAB_2 //Output Byte 2 to Stepper Terminal


L DBB 43
T #byPAB_3 //Output Byte 3 to Stepper Terminal


L #byPEB_1
L B#16#82 //Input Byte 1 from Stepper Terminal

==I
SPB I_SC
BE

so muss wohl der Wert übergeben werden können, was mich hier ein wenig nachdenklich macht ist warum da immer Byte an die Schrittmotorklemme übergeben werden?
Wenn es so gehen würde, wie muss ich dann hier die Adressierung vornehemen?
Anstatt AWL muss ich eben Move nehmen in FUP.

PS. Das ist nicht mein Programm! Soll nur meine Frage verdeutlichen wegen den Bytes?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry das ich nicht geanwortet habe, aber momentan habe ich selber recht viel um die Ohren ......

Das hier immer Bytes übergeben werden, liegt wohl dran das der Ersteller des Programms das so einfacher gefunden hat.
In deinem Code-Ausschnitt wird ja genau das gemacht was ich dir schon geschrieben hatte. Registerkommunikation im schreibzugriff für Register 2 aktiviert.
Dann das Low-Word der Sollposition byteweise in das Register geschrieben und am Ende noch bestätigt ob die richtige Antwort im Statusbyte anliegt.....

Soweit ich das noch in Erinnerung habe, kann man in AWL einzelne Bytes nur mit B#16# HEX-Wert beschreiben. Da möge mich ein Step7 Guru aber auch gerne korrigieren. Beim hin und herrechnen zw. Bitmuster und Hex-Wert hilft der Windows -Taschenrechner.


Kann ich davon ausgehen das das Programm aus dem der Ausschnitt stammt funktioniert?

Der Positionswert ist dort in einem Datenbaustein gespeichert. Wahrscheinlich als WORD (DBW 42). Wenn die Positionen nicht größer als 65535 sind reicht ein Wort aus. Anonsten brauchst du ein Doppelwort (z.B. DBD 42... DBB42 - DBB45). Jetzt müssen die ersten beiden Bytes in Register 2 und die letzten beiden Bytes in Register 3 geschrieben werden....


Ich weiss jetzt nicht wie ich dir noch mehr Helfen kann. Ich habe weder die Hardware um selber zu testen, noch ist mir immernoch nicht 100%ig klar wo genau es bei dir hängt.
Wenn du ein Programm geschrieben hast, kannst du mir gern das Archiv schicken und ich schau da mal rein wenn ich etwas Luft habe (Hab aber nur Step7, kein TIA)

PS. evtl kannst du dein Problem ja nochmal hier im Siemens- Unterforum vortragen. Vieleicht findet sich da ja doch noch der ein oder Andere der Ahnung hat, aber selten hier ins CodeSys/Beckhoff Forum guckt.
 
Zuletzt bearbeitet:
Dann werde ich es jetzt die nächsten Tage nochmal versuchen, und dir dann mal das Archiv zukommen lassen.
Ich denke so ende der Woche, weil ich noch andere Sachen erledigen muss.
Danke für die Hilfe
 
Hallo,

im Anhang ist jetzt mal mein SPS Programm, vielleicht kann es sich mal jemand anschauen #und mir evtl. sagen was noch falsch ist
und verbessert werden muss.
Konnte es leider noch nicht testen, da ich gerade keinen Zugang zu der Hardware habe

Hier ist das Programm

Anhang anzeigen Testbe_1_20130705.zip
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kann das Projekt leider nicht richtig öffnen. Ich bekomme die Meldung das ein Haufen Softwarepakete bei mir nicht vorhanden sind ...... Evtl. ist meine Step7 Version doch zu alt?

Jedenfalls bekomme ich nur eine verstümmelte Hardwarekonfig zu Gesicht, aber keinen einzigen Programmbaustein. Kannst du aus deinen Funktionsbausteinen Quellen erzeugen, diese exportieren und als zip gepackt hochladen? Alternativ würde es sicher auch ausreichen wenn du deine Bausteine als PDF ausdruckst und hier reinstellst.
 
Guten Morgen,

hier das Programm als PDF

E/A Adressen beginne jeweils bei 122 bis 127
 

Anhänge

  • FC2.pdf
    33,4 KB · Aufrufe: 36
Zurück
Oben