S7/224XP PTO funktioniert nicht richtig

s3amdrer

Level-1
Beiträge
210
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen.

Ich möchte mit einer 224XP mittels PTO und den Onbord Ausgängen einen SM ansteuern. Mittels PTO Assistenten bekomme ich den SM bis ca.10U/s zum laufen.(höher geht nicht, da nur 24V Lastspannung vorhanden sind)
Mit dem PLS Baustein und Verwendung von SMW68 bekomme ich das Ganze auch zum laufen, aber leider nur bis 5U/s. (SMW68 steht bei 500µs)
Wenn ich nun die Zykluszeit verringere, dann erhöht sich die Drehzahl ab 500µs nicht mehr. (einstellbar ist die Drehzahl von 65000µs - 500µs)
Warum?

Hab ich was vergessen?
Handbuch und Step7 MicroWin hat mir nicht geholfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, das es so lang gedauert hat. Ich hatte keine Möglichkeit zu antworten.

Habe den Code mal angehängt. Mehr ist nicht drin im Programm.

Hat jemand eine Idee wiso der Motor nicht schneller drehen kann?
 

Anhänge

  • PTO.bmp
    484,3 KB · Aufrufe: 27
Ich denk mal, das Problem ist, das Du immer nur einen Impuls pro Aufruf mit PLS machen läßt.

500µs=0,5ms: Wenn drunter nichts geht, wird Deine Zykluszeit (SMW22-26) in diesem Bereich liegen (die sich bei mehr Programm auch noch erhöht), denn der PTO wird bei Dir momentan ja nur einmal pro Zyklus neu geladen. Deshalb wird der PTO normalerweise über einen Interrupt und nicht im normalen Programmablauf neu geladen, wenn die vorherige Impulsfolge ausgegeben wurde.

Lade mal zusätzlich den SMD72 mit Werten von 2 bis 4 (Impulsen), wenn Du kleiner als 500µs wirst, und schau, ob sich die Drehzahl erhöht.


Hab' mal den Beispielcode aus der Hilfe für Dich angepaßt, wie ich es versuchen würde:
Code:
[FONT=Courier New]ORGANIZATION_BLOCK MAIN:OB1[/FONT]
[FONT=Courier New]TITLE=PROGRAMMKOMMENTARE[/FONT]
[FONT=Courier New]BEGIN[/FONT]
[FONT=Courier New]Network 1 // Hauptprogramm für Impulsfolge im Einzel-Segment-Betrieb (PTO)[/FONT]
[FONT=Courier New]LD     V10.0                       // Bit zum Aktivieren/deaktivieren PTO[/FONT]
[FONT=Courier New]LPS[/FONT]
[FONT=Courier New]EU                                 // Bei Wechsel auf High[/FONT]
[FONT=Courier New]R      A0.0, 1                     // Ausgang A0.0 zurücksetzen[/FONT]
[FONT=Courier New]MOVB   16#85, SMB67                // Steuerbyte einrichten[/FONT]
[FONT=Courier New]                                   // - Funktion PTO wählen[/FONT]
[FONT=Courier New]                                   // - Einzel-Segment-Betrieb einstellen[/FONT]
[FONT=Courier New]                                   // - In µs inkrementieren[/FONT]
[FONT=Courier New]                                   // - Impulszählwert und Zykluszeitwert einstellen[/FONT]
[FONT=Courier New]                                   // - Funktion PTO freigeben[/FONT]
[FONT=Courier New]MOVW   VW0, SMW68                  // Zykluszeit von VW0 laden.[/FONT]
[FONT=Courier New]MOVD   +4, SMD72                   // Impulszählwert auf jeweils 4 Impulse setzen.[/FONT]
[FONT=Courier New]ATCH   INT0, 19                    // Interruptprogramm 0[/FONT]
[FONT=Courier New]                                   // für die Bearbeitung der Interrupts PTO beendet definieren[/FONT]
[FONT=Courier New]ENI                                // Alle Interrupts freigeben[/FONT]
[FONT=Courier New]PLS    0                           // Funktion PTO aufrufen, PLS0 => A0.0[/FONT]
[FONT=Courier New]LPP[/FONT]
[FONT=Courier New]ED                                 // Bei Wechsel auf Low[/FONT]
[FONT=Courier New]R      SM67.7, 1                   // PTO deaktivieren und[/FONT]
[FONT=Courier New]DTCH   19                          // Interrupts PTO deaktivieren und[/FONT]
[FONT=Courier New]DISI                               // alle Interrupts wieder sperren[/FONT]
[FONT=Courier New]END_ORGANIZATION_BLOCK[/FONT]
 
[FONT=Courier New]INTERRUPT_BLOCK INT_0:INT0[/FONT]
[FONT=Courier New]TITLE=INTERRUPTPROGRAMM-KOMMENTARE[/FONT]
[FONT=Courier New]BEGIN[/FONT]
[FONT=Courier New]Network 1 // Beginn Interrupt 0[/FONT]
[FONT=Courier New]LD     SM0.0                       // Bei jedem Interrupt[/FONT]
[FONT=Courier New]MOVW   VW0, SMW68                  // neue Zykluszeit von VW0 laden und[/FONT]
[FONT=Courier New]PLS    0                           // PTO neu starten[/FONT]
[FONT=Courier New]END_INTERRUPT_BLOCK[/FONT]
 

Anhänge

  • PTO.rar
    8,3 KB · Aufrufe: 8
Zuletzt bearbeitet:
Vielen Dank Hucki,

das du mir so ausführlich geholfen hast. Ich hab dein Programm noch nicht 100% verstanden.Das ist aber nicht schlimm, da ich mit den Interrupts noch nicht gearbeitet habe. Du hast mir den Weg gezeigt (PLS läuft nur mit Interrupts ordentlich), den Rest muss ich mir erarbeiten.

PS:
Mit deinem Programm läuft der Motor bis zu 35µs!

Gruß Rene
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
Mit deinem Programm ...
Zuviel der Ehre, steht ja fast so in der MicroWin-Hilfe


Noch mal zur Erklärung:

Du richtest den PTO mit einer Impulsfolge ein. Das war bei Dir die Festlegung der Impuls-Zykluszeit und ein Impuls.
Diese Impulsfolge wird mit jedem Aufruf von PLS gestartet.
Das war bei Dir einmal pro Programm-Zyklus. Der Programm-Zyklus hat aber eine bestimmte Dauer.
Da er ja am Anfang und Ende auch noch die Prozessabbilder machen muss, kamst Du nicht unter eine Programm-Zykluszeit von 500µs.

Programm-Zykluszeit=500µs * 1 Impuls machten bei Dir max. 5U/s.

Auch wenn Du die Impuls-Zykluszeit auf 250µs festgelegt hast, wurde ja PLS trotzdem nur einmal pro Programm-Zyklus aufgerufen. Du hattest zwar einen Impuls der nur 125µs dauerte aber eben nur alle 500µs den nächsten Impuls, also 2 je ms und nicht 4.

Wenn Du jetzt den Impulszähler auf 2 festlegst, dann gibt PLS 2 Impulse pro PLS-Aufruf/Programm-Zyklus aus. Das heißt, wenn die Impuls-Zykluszeit 250µs beträgt und PLS alle 500µs aufgerufen wird, dann hast Du auch wirklich alle 250µs einen neuen Impuls, also die gewünschten 4 je ms.



Bis jetzt hattest Du aber nur 3 Befehle in Deinem Programm. Wenn das Programm umfangreicher wird, erhöht sich natürlich auch die Zykluszeit.
Dann werden die 2 Impulse mit der Impuls-Zykluszeit von 250µs vlt. nur noch alle 5ms erzeugt. Also die ersten 0,5ms 2 Impulse, dann 4,5ms warten auf den nächsten Aufruf. Das entspräche einer effektiven Impuls-Zykluszeit von 2,5ms.

Deshalb benutzt man den Interrupt. Wenn der PTO die 2 Impuls-Zyklen ausgegeben hat, gibt's eine Rückmeldung, die den Interrupt 19 startet. Das Hauptprogramm wird unterbrochen, der PTO wird im Interrupt neu gestartet und das Hauptprogramm wird wieder an der Stelle fortgesetzt, wo unterbrochen wurde. So startest Du trotz längerem Hauptprogramm trotzdem alle 500µs 2 neue Impulse ('n paar µs Bearbeitungszeit für den Interupt kommen allerdings noch hinzu).

Diese Unterbrechung ist rein theoretisch nach jedem AWL-Befehl möglich.
Die Ausführungsdauer dieser Befehle schwankt allerdings stark zwischen einfachen Verknüpfungen mit 0,22µs und komplizierten Rechenoperation mit bis zu 1000µs oder sogar darüber. Dort sind also die Grenzen in der Impuls-Zykluszeit.
Deshalb ist es von Vorteil den PTO auch im Interrupt mit mehr als nur einem Impuls zu laden. Somit hat man trotz geringer Impuls-Zykluszeit mehr Zeit bis zum nächsten PLS-Aufruf und der damit verbundenen Unterbrechung des Hauptprogrammes. Denn je häufiger das Hauptprogramm unterbrochen wird, um so größer ist natürlich auch dessen Zykluszeit. Außerdem werden so eventuelle Wartezeiten des Interrupts auf die Beendigung eines Befehls minimiert.


Der Nachteil ist natürlich, das dann in obigen Programm mit jedem PLS-Aufruf auch immer 4 Impulse ausgegeben werden. Wenn Du also wieder langsamer wirst, solltest Du nicht nur die Impuls-Zykluszeit erhöhen, sondern auch die Anzahl der ausgegebenen Impulse wieder verringern, um den Motor wieder genauer steuern zu können.




PS: Ich hoffe, ich konnte es einigermaßen verständlich rüberbringen, bin ja kein Lehrer.;)
 
Zuletzt bearbeitet:
...läuft der Motor bis zu 35µs!
...
Versuch's mal mit noch mehr Impulsen also z.B. 8 anstatt 4 (oder noch mehr):
Code:
...
[FONT=Courier New]MOVD   +8, SMD72                   // Impulszählwert auf jeweils 8 Impulse setzen.[/FONT]
[FONT=Courier New]...[/FONT]
Vlt. kommst Du ja so noch weiter runter, denn auch die Interrupt-Aufrufe sind ja zeitlich nach unten begrenzt.

Es ist auf jeden Fall von Vorteil, bei Verringerung der Impuls-Zykluszeit die Impulsanzahl zu erhöhen und umgekehrt.


Davon mal abgesehen, welche Impuls-Mindestlänge braucht denn der SM, um die Impulse noch sicher als solche zu erkennen?
 
Die Endstufe kann 400KHz...
Macht minimal 2,5µs Impuls-Zykluszeit (1.000.000µs/400.000Hz), oder :?:

Dann kannst Du ja noch ein bißchen rumprobieren.:p

Wenn ich das mal überschlage: 35µs * 4 Impulse macht ca. alle 140µs ein Interrupt.
Bei 2,5µs könntest Du in der Zwischenzeit also min. ca. 56 Impulse erzeugen.

Ich würd' die Impulszahl bei diesen Impuls-Zykluszeiten dann ruhig mal auf 100 erhöhen. Oder noch höher.


Interessiert mich jetzt irgendwie, denn ich hab' mich bis dato auch nur theoretisch damit beschäftigt.
 
Zuletzt bearbeitet:
Zurück
Oben