S7 200 Unterprogramm für Rolladensteuerung

frankuc45

Level-2
Beiträge
35
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Experten,

ich bin am verzweifeln. Ich habe schon fast alle Beiträge zum Programmieren von Unterprogrammen gelesen und auch einiges in mein Programm übernommen. Aber es tut nicht.
Ich möchte eigentlich nur 5 Rolläden auf und zu bewegen.
Kurzes antippen Rolladen fährt bis die programmierte Zeit abgelaufen ist.
Taster halten für 3 sec Rolladen fährt bis der Taster losgelassen wird.

Mit einem Rolladen tut alles nur beim einbinden des zweiten tut nicht's mehr.
Hat noch jemand eine Idee ?

Hab das Programm mal angehängt

Vielen Dank im Voraus

Frankuc
 

Anhänge

  • Rolladen baustein test.zip
    6,8 KB · Aufrufe: 146
...Kurzes antippen Rolladen fährt bis die programmierte Zeit abgelaufen ist.
Taster halten für 3 sec Rolladen fährt bis der Taster losgelassen wird.
...
Sonst ist's immer andersrum.

Vlt. hift dir diese Threads ja erst mal:
1. S7-200 Rolladensteuerung mit Tip-Automatik
und die Fortsetzung:
2. S7-200 Zeiten und Timer in Unterprogrammen

Bis dahin seh' ich mir Dein Programm mal an.

PS: Fragen:
Beim Aufruf des 2. Rollladens hast du den Merker M0.4 am EN-Eingang der nirgends gesetzt wird. Versehen oder geforct?
Im Netzwerk 3 von Main als Erstes: Wenn NICHT IMMER_1 - also nie, wozu dann? Rolladen 1 unterdrückt?
Warum hast Du die Symbolik noch nicht verteilt (angefangen hast du die Tabelle ja)? Wär' dann einfacher zu lesen.

Wenn Du den "aktuellen Zählwert" als IN/OUT deklarierst, kannst Du Dir die ganzen Übergaben in die Accus mit der indirekten Addressierung sparen und direkt mit dem letzten Wert rechnen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Frankuc,

hab mir mal dein SPS Programm mit der Rolladensteuerung angeschaut. Mir erklärt es sich als ganz einfach, warum es beim zweiten mal nicht funktioniert. Du speichert zwar die Signale im Temp-Bereich, aber der Inhalt wird beim nächsten Bausteinaufruf (2. Rolladensteuerung) durch andere Werte überschrieben. Einfach gesagt, der Temp-Bereich ist nur so lange gültig wie der Baustein bearbeitet wird, danach sind die Daten nicht mehr gültig. Sie behalten ihren Zustand also nicht bis zum Nächsten Bausteinaufruf. Wenn du schon mit Pointern arbeitest und auch mit einem Offset für die Rolländen, würde ich am Unterprogrammanfang die Daten vom Offsetbereich in den Tempoären-Bereich schreiben. Danach kannst du mit den Daten arbeiten. Am Ende des Unterprogramm kopierst du die Daten vom Temp-Bereich wieder in den Offsetbereich zurück. Sowas in der Art.

Code:
Netzwerk 1
LD SM0.0
MOVD &VB96,AC2
MOVW Aufstragsnummer, AC2
MUL 4,AC2
MOVD AC2,AC3
+D AC2,AC3
BMB*AC3,LD12,4
Netzwerk 2

DEIN CODE


Netzwerk xy
LD SM0.0
BMB,LD12,*AC3,4
Hoffe das ist soweit erklärlich. Schau mir aber dein Programm nochmal genau an, was sonst nicht passt. Wenn du noch fragen hast meld dich einfach.
 
Hallo zusammen,

vielen Dank für Eure Hilfe jetzt funktionierts einwandfrei.
Ich habe alle "Merker" die ich im UP verwendet habe im ersten NW aus dem DB gelesen und im letzten NW wieder zurückgeschrieben.

Beim Test mit zehn Rolladen war alles IO

Jetzt kommt der Einbau ins Haus mit 32 Rolladen.
Mal sehen ob das die CPU 226 verkraftet.

Danke nochmal

Gruß Frank:p
 
Zurück
Oben