Flankenauswertung in Codesys

dean10w

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich weiß dass die steigende und fallende Flanken in Codesys mit R_Trig und F_Trig gesteuert werden. Einige Beispiele in z.B. Fup oder ST habe ich gesehen. Ich bin mir nur nicht sicher wie das ganze in AwL für Codesys aussehen soll.

Braucht man unbedingt eine Flanke oder ist es auch möglich ohne ein FP (in Step7 würde ich so machen zu arbeiten)

Zurzeit habe ich das hier


[ LD GVL.schalter_on
JMPCN A2

A1:
LD GVL.anlage_on
JMPCN B2

B1:
LD 1
S GVL.reset
LD 1
R GVL.anlage_on
LD 1
R GVL.schalter_on
RET

B2:

LD schalter_on
ST GVL.time_count.IN

CAL GVL.time_count (
PT:=T#1S)

LD GVL.time_count.Q
S GVL.lights
RET

A2:
RET. ]


Sieht sowas ungefähr richtig aus oder soll braucht man unbedingt ein R_Trig dafür. Das Ziel ist, wenn Schalter_on betätigt wurde und der Anlage an ist muss es zurückgesetzt werden. Wenn der Anlage nicht an ist, setzen wir eine Einschaltsverzögerung von 1 Sekunde und schalten LEDs an nach eine Sekunde.


Wenn ihr das anschauen könnte und weiterhelfen oder Hinweise geben könnte, würde ich mich freuen.
 
Braucht man unbedingt eine Flanke oder ist es auch möglich ohne ein FP (in Step7 würde ich so machen zu arbeiten)

Das Ziel ist, wenn Schalter_on betätigt wurde und der Anlage an ist muss es zurückgesetzt werden.
Flanken braucht man selten wirklich, ausserdem kann man sie sich ja selber bauen.

Was ist denn "es"?? Ist tatsächlich ein Schalter od ein Taster verbaut?


Ach ja - ich denke die gezeigte Logik macht nichts Sinnvolles. Zum Einschalten müsste schalter_on exakt zwischen Anfang und B2 aktiv werden - eher unwahrscheinlich; d. h. bei der Masse der Steuerungen sogar architektonisch unmöglich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Flanken braucht man selten wirklich, ausserdem kann man sie sich ja selber bauen.

Was ist denn "es"?? Ist tatsächlich ein Schalter od ein Taster verbaut?


Ach ja - ich denke die gezeigte Logik macht nichts Sinnvolles. Zum Einschalten müsste schalter_on exakt zwischen Anfang und B2 aktiv werden - eher unwahrscheinlich; d. h. bei der Masse der Steuerungen sogar architektonisch unmöglich.
Es wird anhand eine Visualisierung dargestellt und dient zur Einschalten bzw. Ausschalter eines Fließbandes von Fischertechnik.


Können sie vielleicht einen Beispiel geben?
 
Zuletzt bearbeitet:
Sieht sowas ungefähr richtig aus oder soll braucht man unbedingt ein R_Trig dafür. Das Ziel ist, wenn Schalter_on betätigt wurde und der Anlage an ist muss es zurückgesetzt werden. Wenn der Anlage nicht an ist, setzen wir eine Einschaltsverzögerung von 1 Sekunde und schalten LEDs an nach eine Sekunde.
Prinzipiell ist das IMHO einfach ein Stromstoßschalter gefolgt von einer Einschaltverzögerung.

Den einfachen Aufbau einer Stromstoßschaltung findest Du in dieser FAQ und den Selbstbau von Flanken (wie sie für den Stromstoßschalter benutzt wird) in dieser FAQ.
Da beides nur logische Verknüpfungen sind, sollten sie auch auf Codesys-AWL übertragbar sein.
 
Sieht das vielleicht besser aus.. Der Zustand von Schalter wird zuerst in flanken_check hinzugefügt und danach entsprechend gesteuert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Prinzipiell ist das IMHO einfach ein Stromstoßschalter gefolgt von einer Einschaltverzögerung.

Den einfachen Aufbau einer Stromstoßschaltung findest Du in dieser FAQ und den Selbstbau von Flanken (wie sie für den Stromstoßschalter benutzt wird) in dieser FAQ.
Da beides nur logische Verknüpfungen sind, sollten sie auch auf Codesys-AWL übertragbar sein.
Vielen Dank. Das schaue ich mir gleich an.
 
Prinzipiell ist das IMHO einfach ein Stromstoßschalter gefolgt von einer Einschaltverzögerung.

Den einfachen Aufbau einer Stromstoßschaltung findest Du in dieser FAQ und den Selbstbau von Flanken (wie sie für den Stromstoßschalter benutzt wird) in dieser FAQ.
Da beides nur logische Verknüpfungen sind, sollten sie auch auf Codesys-AWL übertragbar sein.
Ich bin gerade dabei eine Lösung mit XOR zu finden, aber denken Sie, dass man das Ziel auch so erreichen kann? Der Programm wird direkt zu A springen wenn, flanken_check (in diesem Fall, nur als ein place holder variable gesehen) und danach wird überprüft, ob der Anlage_on True oder False war.

Da ich zurzeit nicht in Labor bin, kann ich nicht testen.. aber Codesys gibts keine Warning dafür.
 

Anhänge

  • WhatsApp Image 2023-01-13 at 20.34.04.jpeg
    WhatsApp Image 2023-01-13 at 20.34.04.jpeg
    152,8 KB · Aufrufe: 19
In S7-Classic-AWL würden die FAQs zusammen dann ungefähr so aussehen:
Code:
// Stromstoßschaltung
U  #E       // Eingang Taster
UN #FM      // Zustandsmerker,    (muss statisch sein!)
X  #SS      // Stromstoßschalter, (muss statisch sein!)
=  #SS

// Zustand Eingang für nächsten Zyklus merken
U  #E
=  #FM

// Einschaltverzögerung
U  #SS
L  S5T#10s  // Timer
SE T1

// Ausgang
U  T1
=  #A       // Ausgang LED
Der Vorteil -> keine Rumspringerei und damit später deutlich wartbarer!
;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In S7-Classic-AWL würden die FAQs zusammen dann ungefähr so aussehen:
Code:
// Stromstoßschaltung
U  #E       // Eingang Taster
UN #FM      // Zustandsmerker,    (muss statisch sein!)
X  #SS      // Stromstoßschalter, (muss statisch sein!)
=  #SS

// Zustand Eingang für nächsten Zyklus merken
U  #E
=  #FM

// Einschaltverzögerung
U  #SS
L  S5T#10s  // Timer
SE T1

// Ausgang
U  T1
=  #A       // Ausgang LED
Der Vorteil -> keine Rumspringerei und damit später deutlich wartbarer!
;)
Haha Ja, das sieht viel besser als was ich habe aus. Vielen Dank!!

Ich wollte zuerst ein Code entwerfen, der wenigstens funktioniert und was sinnvolles macht und Sprünge/If-Else statements sind unkompliziert für jemand der aus C/C++ Programmierung kommt.

Deswegen habe ich mit Rumspringerei angefangen.. hoffentlich funktioniert es und dann kann ich weiter optimieren. 🙃
 
Nur Spass
;)

Funktion steht natürlich immer erst mal ganz oben in der Prio-Liste.
Haha, ja.. irgendwann höre ich auch mit blöde Verzweigungen auf… hoffentlich! :)

Denken Sie, dass es so mit Sprungerei auch funktioniert? Dann kann ich direkt mit Optimierungen anfangen.

habe es mehrmals durchgelesen finde keine Fehler. Codesys zeigt auch keine Warnungen.
 
Hab' mich interessehalber hier mal ein wenig belesen.

Das Siemens-Beispiel würde dann in Codesys mit Deinen Variablen wohl z.B. so aussehen:
Code:
LD      GVL.schalter_on
ANDN    GVL.Flankenmerker
XOR     GVL.Anlage_on
ST      GVL.Anlage_on

LD      GVL.schalter_on
ST      GVL.Flankenmerker

CAL     GVL.time_count(
  IN := GVL.Anlage_on
  PT := T#1S
  Q  => GVL.lights)

RET

PS:
Vorausgesetzt, das GVL.schalter_on ein Taster und kein Schalter ist. 🙃
 
Ich bin gerade dabei eine Lösung mit XOR zu finden, aber denken Sie, dass man das Ziel auch so erreichen kann? Der Programm wird direkt zu A springen wenn, flanken_check (in diesem Fall, nur als ein place holder variable gesehen) und danach wird überprüft, ob der Anlage_on True oder False war.

Da ich zurzeit nicht in Labor bin, kann ich nicht testen.. aber Codesys gibts keine Warning dafür.

Sorry, aber das ist immer noch völliger Quark. Kommentare wären gut, dann wird vllt. schneller klar, dass der Code bei #8 nicht nur besser aussieht, sondern auch funktional....

Wenn's denn unbedingt AWL sein muss, dann wäre es klug und schnell die Mnemonik der Siemens-Logik rauszusuchen und auf Codesys anwenden. Wie klingt das?

----

Da hat der Klügere wohl ... ;-)
Pädagogisch unklug :sneaky:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Pädagogisch unklug :sneaky:
Hochsprachenprogrammierer sind da meiner Erfahrung nach oft sehr hartnäckig mit ihrer Springerei.
Der nächste an der Anlage muss das dann ausbaden.

Da ist es mir persönlich dann doch lieber, ich bring ihn durch Vorsagen auf den richtigen Weg, anstatt den (Zitat) "völligen Quark" auf die Menschheit loszulassen.



:unsure:
Der "Quark"-Code erinnert mich ein wenig an einen gewissen 00Alex?!
:ROFLMAO:


PS:
Da musste ich jetzt aber doch mal nach diesem Thread suchen (war aus diesem hervorgegangen/abgesplittet).
Und der feiert demnächst doch schon 10jähriges...
 
Zuletzt bearbeitet:
Hab' mich interessehalber hier mal ein wenig belesen.

Das Siemens-Beispiel würde dann in Codesys mit Deinen Variablen wohl z.B. so aussehen:
Code:
LD      GVL.schalter_on
ANDN    GVL.Flankenmerker
XOR     GVL.Anlage_on
ST      GVL.Anlage_on

LD      GVL.schalter_on
ST      GVL.Flankenmerker

CAL     GVL.time_count(
  IN := GVL.Anlage_on
  PT := T#1S
  Q  => GVL.lights)

RET

PS:
Vorausgesetzt, das GVL.schalter_on ein Taster und kein Schalter ist. 🙃

CAL soll nur ausgeführt werden, wenn die Anlage_on nicht auf true gesetzt ist. Dafür muss man davor nur

Code:
LD    1
ANDN GVL.Anlage_on
CAL  GVL.time_count(
  IN := GVL.Schalter_on,
  PT := T#1S
  Q  => GVL.lights)
RET

hinzufügen, oder? In Siemens wäre es einfach UN GVL.Anlage_on.
 
Zurück
Oben