S7 -200

musikmaker

Level-2
Beiträge
38
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Wer hat von euch eine gute Docu über diese SPS Baureihe. Die von Siemen shabe ich natürlich. Naja sagen wir mal ... sie hilft mir nicht wirklich weiter.

Ich habe da diverse Probleme mit meinem Programm. Unteranderem habe ich Probleme mit Zylinderabfragen, die scheinbar zu schnell sind und mit Unterprogrammen die sich stören !?

Ich arbeite mit "S7- 200 Microwin 4" und mit der CPU: 226 und 3 E/A Erweiterungen

Naja... wer mein Prog sehen will, dem werde ichs gerne zumailen. Vielleicht gibt es da auch noch wesentlich einfacherer Lösungen.

Thx im Vorraus @ All :D
 
Also ich habe die S7 - 226 schon eingesetzt und das Ding ist nicht langsam.

Versuche doch mal zu erklären, warum Du meinst, das die Zylinderabfragen nicht erkannt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok ...

also habe einen zylinder von festo.
die 2 endlagen kann ich nat. problemlos abfragen.
aber in der mitte des zylinders befindet sich noch eine abfrage. diese soll eine druckluftzufuhr abschalten.
naja eben dieser eingang e4.0 soll mir in einer schrittkette einen merker zurücksetzen.
macht er aber net.
aber: wenn ich den eingang auf ein rs glied setzte mit dem ziel nur einen ausgang zu setzten klappt das.
also mein problem ist. wenn dieser merker noch in einem anderen teil der kette verarbeitet werden soll klappt es nicht.
setzt er nur einen ausgang klappt es.....

WARUM ?!

THX
 
Das hört sich nach einem Zeitproblem an.

Das Setzen und Rücksetzten vom Ausgang hast Du wahrscheinlich ohne das restliche Programme gemacht. Da hast es geklappt.

Faustformel minimale Signalzeit = 2 x Zykluszeit.

Versuche es mal, wenn möglich mit einer längeren Schaltfahne.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Heinz schrieb:
Das hört sich nach einem Zeitproblem an.

Das Setzen und Rücksetzten vom Ausgang hast Du wahrscheinlich ohne das restliche Programme gemacht. Da hast es geklappt.

Nein, habe einfach den Eingang und den Ausgang ans Ende der Schrittkette gesetzt und die Weiterverarbeitung unterbrochen. Heisst: gleiche Zykluslänge.

Heinz schrieb:
Versuche es mal, wenn möglich mit einer längeren Schaltfahne.
Schaltfahne ? Die Abfragen sind von ipf und sitzten in den Nuten des Zylinders..... net an der Kolbenstange

Zottel schrieb:
Oder benutze einen Interrupt. Die S7-200 kann das mit mehreren der Eingänge, die sich an der CPU befinden.

Naja würde ich gerne machen ... aber wie :cry:

Thx .... und .... bitter weiterhelfen !!!
 
Zottel schrieb:
Oder benutze einen Interrupt. Die S7-200 kann das mit mehreren der Eingänge, die sich an der CPU befinden.
Naja würde ich gerne machen ... aber wie :cry:
Habe gerade nicht im Kopf ob der Assistent in Microwin alle Interrupts oder nur die für schnelle Zähler unterstüzt. Ich glaube, letzteres..
Die SPS hat für jedes Ereignis, das einen Interrupt auslösen kann, eine Ereignisnummer. Die findest du im Systemhandbuch (abhängig von Nummer des Eingangs und ob steigende oder fallende Flanke). Was beim Interrupt passieren soll, muß in einem eigenen Unterprogramm stehen.
Beim Anlauf des Programs weist du der Ereignisnummer das Unterprogramm mit dem Befehl ATCH (attach) zu. Schau dir mal die Hilfe an.
Wenn deine Schaltfahne den INI betätigt und also bei der steigenden Flanke was passieren soll, könnte dein Unterprogramm im einfachsten Fall so aussehen:

L SM0.0 //immer 1
S M0.0,1 // oder was für einen Merker du frei hast
RETI // Ende Interrupt-Programm

Hier muß die Schrittkette im Hauptprogramm den Merker auswerten und rücksetzen. Das Interruptprogramm verhindert nur, daß der Eingang wegen der Kürze des Impulses "übersehen" wird. Du könntest aber auch gleich die Luft abstellen. Aber Achtung, das muß dann so gehen, daß der Ausgang z.B. im Hauptprogramm speichernd gesetzt und im Interruptprogramm gelöscht würde. Wenn du im Hauptprogramm ein =Ax.y verwendest, gibt das Hauptprogramm ja wieder eine 1 aus. Bin jetzt nicht sicher, ob ein "R A0.0,1" im Interruptprogramm sofort wirksam wird oder erst am Zyklusende mit PAA Aktualisierung, wie bei den 300/400.
Schau mal den Befehlsvorrat an, ich meine es gab da eine Anweisung, um das sofort zu tun.

Wenn du auf beide Flanken reagieren willst, brauchst du 2 Unterprogramme.
 
ich habs mal probiert.....

also habe an der stelle im unterprogramm automatik, da wo der zulangsame eingang kam ok!?

also gestartet von e4.0 und sprung ins int_o als event die steigende flanke.

im interruptprog steht dann nur noch e4.0 -> reti

also... so hab ich das mit der hilfedatei verstanden...


thx... :D
 
musikmaker schrieb:
ich habs mal probiert.....

also habe an der stelle im unterprogramm automatik, da wo der zulangsame eingang kam ok!?
Was hast du an der Stelle?
[/quote]
also gestartet von e4.0 und sprung ins int_o als event die steigende flanke.
Ich denke nicht, daß es es mit E4.0 geht. Nur die Eingänge auf der CPU selbst sind interruptfähig. Und was soll hier "gestartet von"?
im interruptprog steht dann nur noch e4.0 -> reti
E4.0 brauchst du da nicht. Aber das Interrupt-Programm sollte schon was tun..

Ist dir 100% klar, was ein Interrupt ist?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok.
Deine SPS arbeitet ihr normales Programm ab, indem sie vorne beginnt, alle Anweisungen ausführt und dann vorne wieder anfängt.
Bei einem Interrupt-Ereignis unterbricht sie die Ausführung, arbeitet das Interrupt-Unterprogramm bis zum RETI ab und macht dann mit der Ausführung des (Haupt-)Programms da weiter, wo sie unterbrochen wurde.

Nehmen wir an, sie braucht 10ms für die Ausführung deines Programs. Die Anweisung wo dein INI an E4.0 etwas in der Schrittkette bewirkt, komme 4ms nach Programmstart. Kommt nun der E4.0 etwas später als 4ms nach Programmstart, wird er in diesem Zyklus nichts mehr bewirken. Die nächste Chance kommt nach 14ms. Ist er zu diesem Zeitpunkt schon wieder 0, passiert gar nichts.
Dies ist nicht die ganze ahrheit, da die SPS im Zyklus mit Zwischen den Zyklen gemachten "Schnappschüssen" der Eingänge arbeitet.

Interrupts geben dir nun die Möglichkeit auf externe Ereignisse sehr schnell zu reagieren: Wenn dein Eingang (nicht e4.0, sondern einer auf der CPU, z.B E0.0) seinen Zustand ändert, SOFORT in das Unterprogramm zu springen. Dafür ist spezielle Hardware in der CPU vorhanden, die den Programmablauf unterbricht und den Befehlszähler auf den Anfang des Unterprogramms setzt (und die Stelle der Unterbrechung des Hauptprogramms speichert).
Diese Hardware ist der Grund, warum es nicht mit Eingängen von Erweiterungsmodulen geht. Du mußt also umverdrahten.
Hast du nun dem Unterprogramm INT_0 das Ereignis "steigende Flanke an E0.0" zugeordnet, so beginnt die CPU innerhalb von einigen 10uS nach dem Ereignis mit der Ausführung des Unterprogramms INT_0. Dein Hauptprogramm und deine Schrittkette "merken" davon erstmal GAR NICHTS. Wenn im Unterprogramm INT_0 nur RETI steht, wird es eben sofort beendet.
Daher mein Vorschlag, daß du einen Merker setzt. Dieser speichert die Information, daß überhaupt das Ereignis aufgetreten ist. Im Hauptprogramm wertest du nun STATT des E4.0 oder E0.0 den Merker aus. Und du mußt ihn zurücksetzen, damit der Mechanismus erneut funktionieren kann.
 
Aha ... das ist doch mal eines fette und nette Aussage! Habs kapiert und gleich in die Tat umgesetzt! Gut, dass die CPU bis zu 4 Eingänge mit diesen Anforderungen steuern kann! Ich brauche nämlich auch 4 ^^!
Ich denke ich werde mich morgen dran ergötzten können!

THX für deine Schreibmühen
 
Zurück
Oben