S7 200: SBR (CALL) mit Parameterübergabe

Willu

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum!

Seit einigen Stunden versuche ich, ein Unterprogramm von meinem Hauptprogramm aufzurufen, komme leider aber nicht weiter:

Für meine Rollosteuerung mit einer S7 200 (214), Microwin, muß ich viele Taster abfragen und Ausgänge setzen. Der Ablauf ist für jeden Antrieb gleich, nur die beiden Eingangsbits und die beiden Ausgangsbit ändern sich von Antrieb zu Antrieb. Copy&Paste im Hauptprogramm ist nicht optimal, ich komme dann mit dem Programmspeicher nicht klar.

Wie kann ich dem Unterprogramm Ein- und Ausgänge übergeben? Mein Projekt habe ich als Datei angehängt. Ein Export als AWL (*.txt) ist nicht möglich, das Programm ist nicht fehlerfrei :-/

Über ein wenig Hilfe würde ich mich sehr freuen...

Einen schönen Sonntag!
 

Anhänge

  • Rollo.zip
    2,3 KB · Aufrufe: 29
Hallo Willu.

Habe mir dein Programm etwas angeschaut. Mal vorab. Bei einer CPU214 funktioniert das noch nicht wie bei den neueren CPU22x bei denen man bis zu 16 Parameter an eine Unterprogramm übergeben kann. Außerdem würde ich es nicht empfehlen in einen Unterprogramm Flankenauswertung mit "EU" oder "ED" zu verwenden, den wenn du das Unterprogramm mehrfach aufruft besteht die Gefahr, dass z.B. in beiden Unterprogrammteilen eine Positive Flanke z.B. von einem Endschalter ausgewertet wird obwohl es nur beim ersten aufruf eine Positive Flanke gegeben hat. Diese Aussage sammt nicht von mir sondern von Siemens. Ich habe mir dann die Flankenauswertung selber geschrieben. Des weiteren ist mir noch aufgefallen, dass du in den Unterprogrammen Pointeraufrufe über Bit machst, dass funktioniert bei der S7-200 im allgemeinen nicht nur bei S7-300 und S7-400. Soweit ich dein Programm verstanden habe, hast du pro Rollo einen Taster für auf und einen für ab einen Ausgang für die Motorversorgung und einen für die Richtungsvorgabe das Rollos. Der Richtungausgang wird bei Ab gesetzt und bei Auf zurückgesetzt. Fährt das Rollo in eine Richtung so wird ein Timer gestartet der nach eine Zeit x die Rolloansteuerung stoppt, da ja im Programm eine Endschalter aufgenommen sind. Habe ich denn ablauf deiner Rollosteuerung soweit verstanden oder nicht? Wenn nicht das Bitte ich um eine genauere Beschreibung, dann kann ich dir bei deinem Problem noch besser helfen.
Nun zu Prarameterübergebe bein einer S7-214. Du muss dir eine Unterprogramm schaffen, in dem du intern mit Schmiermerkern arbeitest. Es hängt ein Beispielprogramm für 2 Pumpe an. Für weitere fragen stehr ich dir gerne zur Verfügung.
 

Anhänge

  • Porgramm für eine CPU214.zip
    2,2 KB · Aufrufe: 37
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
schreib doch in einen Variablenbereich vor Aufruf des Unterprogramms Dein Eingangsparameter, welche du dann im Unterprogramm Verarbeitest und auf einen anderen Variablenbereich deine ergebnise schreibst welche du dann nach Rückkehr ins Hauptprogramm auf die ausgänge überträgst. Ich hab mir das Prog. noch nicht angeschaut da ich auf diesem Rechner kein Microwin habe aber folgendes müsste gehen:

Hauptprogramm
EB0 -> VB100
Unterprogramm
VB120 -> AB0
EB1 -> VB100
Unterprogramm
VB120 -> AB1
.
.
.
EB n -> VB100
Unterprogramm
VB120 -> AB n
HAUPTPROGRAMM ende
Unterprogramm
Brechnungen und Verknüpfungen mit VB100
Ergebnisse auf VB120
Unterprogramm Ende


Grüße Thomas
ps mit den schmiermerkern war gerade hubert schneller.
 
Zuletzt bearbeitet:
Hallo Herbert, hallo Thomass5!

Besten Dank für Eure Antworten. Die Beschreibung des Programmablaufs ist richtig. Mit jedem Motorlauf wird der globale Timer zurückgesetzt. Erst wenn der letzte Antrieb eine gewisse Zeit (5sec für Testzwecke) lief, werden alle Antriebe abgeschaltet. Die Rolloantriebe haben eigene Endschalter und stoppen automatisch. Die Abschaltung per S7 dient nur zum Stromsparen bzw. Spannungsfreischaltung.

Ich war jetzt so langsam auch soweit über globale Variablen zu arbeiten. Die Parameterübergabe frisst dann (fast) den Vorteil des Unterprogramms auf. Das die Speichern von Eingängen mit "=" so einfach ist, habe ich nicht erwartet. In der Hilfe habe ich schon nach irgendwelchen mov*-Befehlen gesucht.

Kann ich bei der Verwendung mit Schmiervariablen mit der Flankenerkennung arbeiten oder ist diese dann auch kritisch?

Nochmals Danke!

Andreas (Willu)
 
Zurück
Oben