Step 7 Mehrfachbelegung von Tastern

blacky001

Level-1
Beiträge
10
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich muss mich wahrscheinlich entschuldigen für meine frage aber ich bin in der sps programmierung meiner s7 extrem limittiert. ich setzte das ding in meinem haus ein und möchte nun taster mehrfach belegen. mein wunsch wäre es den tast kurz zu drücken und einen ausgang zu schalten, ist der taster länger als 3 sek gedrückt soll ein anderer ausgang geschaltet werden:

E1.0 (kurz) = A1.0
E1.0 (>3sec) = A1.1

ich habe wirklich versucht mich im forum einzulesen um nicht eine unnötige frage zu stellen...leider ohne erfolg

hat hier jemand eine idee? mir wäre echt geholfen.
 
Ist doch eigentlich relativ einfach (meine ich).
Einschaltverzögerung einfügen und damit Ausgang A1.1 setzen, eventuell noch eine positive Flankenauswertung dazwischen. Für den Ausgang 1.0 eine Negative Flankenauswertung des Taster zusammen mit dem invertierten Ausgang der Einschaltverzögerung. Wichtig ist nur, dass Du erst die Abfrage für A1.0 ausführst und dann den Baustein für die Einschaltverzögerung, sonst geht Ausgang A1.0 immer mit an, egal wie lange Du den Taster drückst. Dann wäre noch die Frage, wie Du das ganze ausschalten möchtest.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
erstmal danke für die schnelle antwort.
das ausschalten habe ich vergessen. ich dachte, dass ich mit einem kurzen Drücken beide ausschalte...macht aber irgendwie keinen sinn. besser wäre es wie oben nur rückwärts, also langes drücken (wenn an) dann A1.1 ausschalten bei kurzem drücken (wenn an) dann A1.0 ausschalten
 
Fang am besten mal erst mit der Logik für A1.1 an Den Taster-Eingang auf eine Einschaltverzögerung, den Ausgang davon auf eine Flankenauswertung (positive Flanke) und dann auf den Ausgang (speichernd).
 
ich war gerade offline (tochter hat auch zeit für sich beansprucht:)).
die oscat "click_mode" habe ich im netz gefunden, allerdings weiss ich zum ersten nicht wie ich die einbinde und zum anderen habe ich gehört da treten immer wieder fehler auf mit der oscat bibliothek (wie gesagt, habe ich aber nur gehört und keine erfahrung damit).
ausserdem würde ich es gerne verstehen was ich mache, ist ja auch interessant.
ich setz mich jetzt mal ran.
danke nochmals für die antworten, ich bin echt froh dass ich hier jemanden zum nachfragen habe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
zum anderen habe ich gehört da treten immer wieder fehler auf mit der oscat bibliothek (wie gesagt, habe ich aber nur gehört und keine erfahrung damit).

zur opensource-diskussion hier entlang: http://www.sps-forum.de/stammtisch/73519-neuentwicklung-automatisierungsplattform-9.html

man stelle sich mal vor: wir lassen gerade unsere Heizungsanlage überarbeiten, es wird eine Wärmepumpe zur Wärmerückgewinnung der Produktionsmaschinen eingebunden UND: es darf die OSCAT Building verwendet werden - verrückt!

und wo der spaß bleibt? in der gewonnen zeit z.b. mit der tochter?!
 
Natürlich, ich bin leider nur am Wochenende zu Hause und mache dann auch lieber was mit der Familie als an der SPS zu sitzen, aber manchmal tüftele ich auch gerne und vielleicht ist es bei dem TE auch so.
 
Zuletzt bearbeitet:
hilft das?

U "S90.2+S91.2"
L S5T#2S
SE T 2
NOP 0
NOP 0
NOP 0
U T 2
= L 20.0
U L 20.0
FP M 9.0
S M 9.1
U "S90.1+S91.1"
R M 9.1
U M 9.1
= "L45+L46"
UN L 20.0
U(
U "S90.2+S91.2"
FP M 9.2
S M 9.3
U(
U "S90.2+S91.2"
FN M 9.4
S M 9.5
NOP 0
U M 9.5
)
U "L44"
R M 9.3
U M 9.3
)
= "L44"
 
mir ist bewußt wo der fehler liegt, stehe nur auf der leitung, brauch ein gatter das nur bei eingang 1 und 1 auch 1 ausgiebt, rest sollte 0 sein
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      U     E      1.0                  //EIN/AUS
      SPBN  nex1
      U     M      2.5                  //TAKT 1HZ
      FP    M     10.0
      SPBN  nex1
      L     MW    12                    //TIMER Integer
      +     1
      T     MW    12


      L     3
      ==I   
      =     M     10.1


      TAK   
      L     2
      >=I   
      =     M     10.2


nex1: NOP   0


      U     M     10.1
      FP    M     10.3
      X     A      1.1
      =     A      1.1


      U     E      1.0
      FN    M     10.4
      SPBN  nex2
      L     0
      T     MW    12


nex2: U     M     10.2
      SPB   end


      U     E      1.0
      FN    M     10.6
      X     A      1.0
      =     A      1.0


end:  NOP   0
 
Zuletzt bearbeitet:
ich hab das mal so reinkopiert (ohne dass ich verstehe um was es geht). Leider funktioniert es nicht. kann ich da was falsch machen?
evtl. habe ich schon merker anderweitig verwendet?
kann das probleme machen?
vielleicht sollte ich doch oscat einbinden. habe aber keine ahnung wo ich die lib downloaden kann und wie ich einbinde
 
Ich würde mir hierfür einen kleinen und leicht verständlichen FB erstellen.

Code:
FUNCTION_BLOCK FB 8
TITLE =
VERSION : 0.1

VAR_INPUT
  X : BOOL ; 
  RESET : BOOL ; 
END_VAR
VAR_IN_OUT
  Y1 : BOOL ; 
  Y2 : BOOL ; 
END_VAR
VAR
  X_FLM : BOOL ; 
  Y1_FLM : BOOL ; 
  Y2_FLM : BOOL ; 
  X_LONG : BOOL ; 
  X_TON : "TON"; 
END_VAR
VAR_TEMP
  X_NIMP : BOOL ; 
END_VAR

BEGIN

NETWORK
TITLE =
      NOP   0; 

//*** Flankenauswertung negativ
      U     #X; 
      FN    #X_FLM; 
      =     #X_NIMP; 

//*** Y1 - X kurz betätigt
      U     #X_NIMP; 
      UN    #X_LONG; 
      FP    #Y1_FLM; 
      X     #Y1; 
      UN    #RESET; 
      =     #Y1; 

//*** Y2 - X länger betätigt
      U     #X_LONG; 
      FP    #Y2_FLM; 
      X     #Y2; 
      UN    #RESET; 
      =     #Y2; 

//*** X länger als 3 Sekunden betätigt
      CALL #X_TON (
           IN                       := #X,
           PT                       := T#3S,
           Q                        := #X_LONG);

END_FUNCTION_BLOCK
 
Zurück
Oben