Problem mit pos.Flanke im FC

tuppes38

Level-1
Beiträge
66
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen ins Forum,
habe mir für ein anstehendes Projekt einen Motorbaustein (FC1) erzeugt, mit
dem ich einen (in der Anlage werden es dann ca.30 sein) Motor mit einem Taster
(KlöMö RMQ Titan) Ein/Ausschalten möchte.
Habe den Baustein mit PLCsim probiert und dabei fiel mir auf, dass beim deaktivieren
des Eingangs #Sicherheit , der Ausgang #Motor ausgeht, aber sofort wieder angeht wenn
der Eingang #Sicherheit wieder 1 wird.
Den logischen Fehler sehe ich darin, dass die pos.Flanke #PFL_Start (Eingang #Start) nicht
richtig abgearbeitet wird bzw. immer konstant 1 ist wenn der Eingang #Start 1 ist.
Wieso wird dort kein Flankensignal gebildet? Hat vielleicht jemand von euch die Zeit da mal
drüber zu schauen? - und mir ggf. Denkanstöße bzw. Alternativen aufzeigen.
Im Anhang das gezippte Projekt.
Danke
 

Anhänge

  • Testfc.zip
    266,8 KB · Aufrufe: 15
du benutzt für die flanke eine in-variable, das kann so natürlich nicht funktionieren ... wie soll denn der zustand gespeichert werden? also nutze eine INOUT-variable bei FCs oder eine STAT-variable bei FBs (wobei bei FB auch INOUT funktionieren würde) und dann hängst du beim aufruf keine lokale variable des aufrufenden FCs, sondern eine globale variable dran...

[nachtrag]das selbe gilt übrigens für negative flankenauswertungen [/nachtrag]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Funktioniert, Vielen Dank.
Hänge das neue Projekt nochmal dran.

Was mir noch nicht klar ist, warum darf ich für die Flankenauswertungen keine lok.Varaibl. nutzen? Ich brauch das VKE doch nur in diesem Baustein, und wenn ich FBs mit stat.Variabl. nutzen würde, müsste ich dann für jeden Antrieb einen eigenen Instanz DB generieren?
 

Anhänge

  • Testfc_1.zip
    268 KB · Aufrufe: 10
Was mir noch nicht klar ist, warum darf ich für die Flankenauswertungen keine lok.Varaibl. nutzen? Ich brauch das VKE doch nur in diesem Baustein, ...

ja, du brauchst den zustand nur in dem einen FC ABER: temporäre lokaldaten einer funktion sind anders als die statischen daten eines funktionsbausteins nur einen zyklus lang gültig! eine flankenauswertung arbeitet aber mit dem zustand im vorhergehenden zyklus ... vielleicht macht es die S5-flankenauswertung deutlicher:

positive flanke:

Code:
*
      U     E      1.0
      UN    M      1.0
      =     A      2.0
      U     E      1.0
      =     M      1.0

negative flanke

Code:
*
      UN    E      1.0
      U     M      1.0
      =     A      2.0
      U     E      1.0
      =     M      1.0


und wenn ich FBs mit stat.Variabl. nutzen würde, müsste ich dann für jeden Antrieb einen eigenen Instanz DB generieren?

entweder je einen instanz-db, ja, oder eben als multiinstanz ... einfach mal die forensuche dazu anwerfen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was mir noch nicht klar ist, warum darf ich für die Flankenauswertungen keine lok.Varaibl. nutzen?
............
Weil der Hilfsmerker für die Flankenbildung einen ganzen Zyklus seinen Zustand behalten muss. Die Temp-Var. ist ja nach verlassen des Bausteins nicht mehr gültig und wird unter Umständen von anderen Bausteinen überschrieben.
Code:
U   #In_var
FP #stat_Var //muss eine statische Variable sein (Merker oder STAT)
=   #temp_Var //kann auch eine temporäre Variable sein
 
Zurück
Oben