S7 200 positive Flanke im Unterprogramm? Wie geht das?

plc_tippser

Level-1
Beiträge
2.500
Reaktionspunkte
308
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

wenn ich in einem Unterprogramm eine Flanke auswerten möchte, kann ich das mit der vorgesehenen tun? Ich meine, die hat ja keine Hilfsvariable und die Gültikeit von Variablen wird ja bei Unterprogrammen etwas schwieriger.

Muss ich die denn konventionell ausprogrammieren?

Mein Problem ist, ein Zähler im Unterprogramm rattert wie doof, trotz der vorgeschalteten Flanke.


pt
 
plc_tippser schrieb:
wenn ich in einem Unterprogramm eine Flanke auswerten möchte, kann ich das mit der vorgesehenen tun? Ich meine, die hat ja keine Hilfsvariable und die Gültikeit von Variablen wird ja bei Unterprogrammen etwas schwieriger.

Muss ich die denn konventionell ausprogrammieren?

Mein Problem ist, ein Zähler im Unterprogramm rattert wie doof, trotz der vorgeschalteten Flanke.
Ich habe alle meine Flanken konventionell ( U E1.0/UN M1.0/=M1.1/UE1.0/=M1.0) programmiert. Mach´ ich auch auf den 300/400. Es ist einfach so, daß ich dann nicht darüber nachdenken muß, welche Befehle die jeweilige CPU kann (habe auch andere als Siemens).
Der Code zur Erkennung kann natürlich nicht öfter als einmal im Zyklus aufgerufen werden. Wie ist das mit deinem Unterprogramm?
Ist es das Unterprogramm, das du aus einem Interrupt aufrufst?
 
@Zottel,

ich habe die Flanke wo ich ein Problem im Unterprogramm hatte auf konventionell geändert, jetzt klappts.

Das mit dem Interrupt hat nichts mit der Flanke zu tun. Im Interrupt wird mehrmals ein Unterprogramm aufgerufen. Das Unterprogramm besteht ausschließlich aus Lokaldaten. Die Werte für die Berechnungen sind IO-Parameter.

In dem Unterprogramm werden eine Division, 3 Additionen, ein Vergleich und eine Typumwandlung ausgeführt.

Bei den Additionen handelt es sich um eine Gesamtmenge, eine Tagesmenge und eine Menge für den laufenden Zyklus, die über den Vergleicher ein Abschaltsignal bildet.

Die Gesamtmenge ist DINT, die anderen beiden INT. Die Gesamtmenge wird als letztes NW addiert und funktioniert immer. Die anderen beiden im mittleren Teil und funktionieren nicht immer.

Die Addition ist nicht Flankenabhängig sondern immer TRUE (SM0.0)

Ich kann leider nichts posten, da das alles in IEC geschrieben ist und keine Umschaltung in AWL möglich ist.


@Bernd

die Bibliothek habe ich leider nicht

pt
 
Flanken funktionieren eigentich nur korrekt, wenn man dafür sorgt, daß sie niemals umsprungen bzw. immer abgearbeitet werden. Im Zweifelsfalle programmierst du die Flanken in einem Bereich, der immer durchlaufen wird. Wenn du zwei Flanken ineinander verschachtelt hast, wird die zweite Flanke wahrscheinlich nicht korrekt arbeiten. :roll:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Ralle,

die Flanke wurde zyklisch durchlaufen, aber halt in einem Unterprogramm. Ich weiß nicht, wie die Flanken gehandelt werden, da sie keine Hilfsvariable als Argument haben, wie bei der 300er. Im Lokaldatenstack währe es schlecht.

Ich habe in jedem Unterprogramm statische Daten mittels IO-Parameter erzeugt und die Flanke jetzt konventionell wie in S5 Zeiten ausprogrammiert. Nun klappts, scheinbar.

Mal schauen ´was die Zukunft sagt :wink:

pt
 
Hallo pt,
wir unterscheiden jetzt mal zwischen Flankenmerker und Impulsmerker. Der Flankenmerker muss unbedingt global sein, sonst ist der Zustand vom vorigen Zyklus nicht reproduzierbar, die Flankenauswertung ist (manchmal ganz zufällig) ganz einfach falsch oder auch richtig. Der Impulsmerker kann durchaus lokal sein, wenn er nur in diesem Baustein gültig sein soll. Wenn Du die S5-Konvention benutzt, funktioniert das, wie Du schon geschrieben hast, aus diesem Grunde einwandfrei.
Gruss
Question_mark
 
Hi Qm,

das mit dem Flankenmerker ist das Problem. Bei der 200er gibt man diesen nicht an, wie bei der 300/400.

Naja, ich werde noch alle abändern, die ich noch nicht wieder gefunden habe.

Bis denn pt
 
Zurück
Oben