An / Aus Schaltung =)

Insane

Level-1
Beiträge
202
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

ganz kurze frage. Wie würdet ihr diese Aufgabe am einfachsten realisieren ??


Der Taster S1 schaltet eine lampe ein. Die lampe soll 10s anbleiben. Dann soll die Lampe für 10s ausbleiben und danach sofort wieder angehen. Dies soll unabhänig davon funktionieren das man noch irgendwas drücken muss.

also praktsch -> lampe 10s an, Lampe 10s aus, Lampe 10s an, Lampe 10s aus............. usw .............. usw ........... usw

sowas lässt sich doch mit dem richtigen trick sicher ganz einfach realisieren oder =)
 
Ich würde hier mit dem Tatser einen Merker setzen mit dem und dem Taktmerkerbyte einen Sondertakt bilden, 10 sec. halt abzählen, und dann als Flip_Flop betreiben.

LG dtsclipper
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ideen hab ich wirklich genug aber mit der umsetzung hängts grad irgendwie =)

bin auch noch ziemlich neu auf dem gebiet sps. könntest du mir vill. etwas näher erklären wie ich das machen kann
 
Aber gerne!

Also wie gesagt:

1. Mit dem Taster einen Merker setzen, nennen wir ihn Lampenmerker

2. Mit diesem Merker und dem Taktmerker 1 Sekunde aus der CPU einen Sondertakt zaubern

Code:
      U     "Lampenmerker"
      U     "Taktmerker 1s"
      FP    #Flanke_1_Sec
      SPB   w12

      L     #Count_ten
      +     1
      T     #Count_ten

w12:  NOP   0
      L     #Count_ten
      L     10                          // 10S
      >=I   
      =     #Takt 10s

      UN    #Takt 10s
      SPB   re12

      L     0
      T     #Count_ten

re12: NOP   0

Und dann noch oben gebauten #Takt 10s mit dem Lampenmerker zum Ausgang verheiraten

dtsclipper
 
Sieht das jetzt nur so kompliziert aus ?? oder ist es das wirklich ??

kann man das irgendwie einfach in fup dastellen ??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
oder aber das taktmerkerbyte aktivieren da gibt es einen 10 sec takt ( 10s ein, 10s aus

u taster
s Hilfswerkwer

u hilfsmerker
u 10s taktmerker
= ausgang

dann halt nachwas zum rücksetzen dranbasteln

peter(R)
 
Warum so umständlich über eines der Taktmerkerbytes?

Code:
      UN    T      2
      L     S5T#10S
      SE    T      1
      U     T      1
      L     S5T#10S
      SE    T      2
      
      U     E0.0  //Taster Einschalten
      S     M      0.0
      U     T      1
      U     M      0.0
      =     A4.0  // Ausgang Lampe

Gruß ukofumo
 
Ihr seit viel zu krass

hauptsache kompliziert ohne ende *ROFL*

aber das sollte echt so einfach wie möglich gelöst werden. am liebsten wäre mir ein FUP mit 3 - 4 Bausteinen gewesen

aber trotzdem danek für alle antworten
 
10s sind doof, die lassen sich scheiße rechnen ... mach doch 8 ;)

Code:
*
FUNCTION "PULSE_GENERATOR" : VOID
TITLE =PULSE GENERATOR
//with PLC PULSE 1sec:  1 to 32768 seconds
//with PLC PULSE 2sec:  2 to 65536 seconds
//
//DATE:     18.02.2008
//AUTHOR:   4lagig
//VERSION:  V0.1 BasicVer
AUTHOR : '4lagig'
FAMILY : BoolGF
VERSION : 0.1

VAR_INPUT
  xPlcPulse : BOOL ; //PLC PULSE MB x.5 for 1sec
  iMwByNumber : INT ; //MW number that will be for pulse
END_VAR
VAR_IN_OUT
  xHelpFlag : BOOL ; //just a FP-help flag
END_VAR
BEGIN
NETWORK
TITLE =
      U     #xPlcPulse; //READ PLC PULSE
      FP    #xHelpFlag; //CHECK FOR POS TRIGGER
      SPBN  _001; //IF NOT GO BE
      L     #iMwByNumber; //LOAD MW NUMBER
      SLD   3; //MADE POINTER  
      LAR1  ; //AND LOAD IN AR1
      L     MW [AR1,P#0.0]; //LOAD MW
      L     1; //INCREMENT
      +I    ; // 
      T     MW [AR1,P#0.0]; //TRANSFER TO MW
_001: SET   ; 
      SAVE  ; 
      BEA   ; 
END_FUNCTION
 
ORGANIZATION_BLOCK "CYCL_EXC"
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1

VAR_TEMP
  OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE ; //Priority of OB Execution
  OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE ; //Reserved for system
  OB1_RESERVED_2 : BYTE ; //Reserved for system
  OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "PULSE_GENERATOR" (
           xPlcPulse                := "xPLCPulse1Hz",
           iMwByNumber              := 100,
           xHelpFlag                := "xHelpFlag01");
      U     "xTrigger"; 
      FP    "xHelpFlag02"; 
      X     "xHelpFlag03"; 
      =     "xHelpFlag03"; 
      U     "xHelpFlag03"; 
      U     "xPulse8s";  //m101.3
      =     "xOut"; 
END_ORGANIZATION_BLOCK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Insane:
Viel kürzer als Ukofumos Lösung wirds nicht gehen, wobei er nur einen allgemeinen Takt verwendet, der mit Deinem Trigger ( Schalter ) nicht synchronisiert wird.

Und wieer stellen wir fest:
Vermeintlich leichte Aufgaben können viel Code nach sich ziehen!

griele Füße dtsclipper

P.S. Stehe für weitere Fragen gerne zur Verfügung!
 
Zuletzt bearbeitet:
10s sind doof, die lassen sich scheiße rechnen ... mach doch 8 ;)

Code:
*
FUNCTION "PULSE_GENERATOR" : VOID
TITLE =PULSE GENERATOR
//with PLC PULSE 1sec:  1 to 32768 seconds
//with PLC PULSE 2sec:  2 to 65536 seconds
//
//DATE:     18.02.2008
//AUTHOR:   4lagig
//VERSION:  V0.1 BasicVer
AUTHOR : '4lagig'
FAMILY : BoolGF
VERSION : 0.1
 
VAR_INPUT
  xPlcPulse : BOOL ; //PLC PULSE MB x.5 for 1sec
  iMwByNumber : INT ; //MW number that will be for pulse
END_VAR
VAR_IN_OUT
  xHelpFlag : BOOL ; //just a FP-help flag
END_VAR
BEGIN
NETWORK
TITLE =
      U     #xPlcPulse; //READ PLC PULSE
      FP    #xHelpFlag; //CHECK FOR POS TRIGGER
      SPBN  _001; //IF NOT GO BE
      L     #iMwByNumber; //LOAD MW NUMBER
      SLD   3; //MADE POINTER  
      LAR1  ; //AND LOAD IN AR1
      L     MW [AR1,P#0.0]; //LOAD MW
      L     1; //INCREMENT
      +I    ; // 
      T     MW [AR1,P#0.0]; //TRANSFER TO MW
_001: SET   ; 
      SAVE  ; 
      BEA   ; 
END_FUNCTION
 
ORGANIZATION_BLOCK "CYCL_EXC"
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
 
VAR_TEMP
  OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  OB1_PRIORITY : BYTE ; //Priority of OB Execution
  OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
  OB1_RESERVED_1 : BYTE ; //Reserved for system
  OB1_RESERVED_2 : BYTE ; //Reserved for system
  OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
  OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
  OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
  OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "PULSE_GENERATOR" (
           xPlcPulse                := "xPLCPulse1Hz",
           iMwByNumber              := 100,
           xHelpFlag                := "xHelpFlag01");
      U     "xTrigger"; 
      FP    "xHelpFlag02"; 
      X     "xHelpFlag03"; 
      =     "xHelpFlag03"; 
      U     "xHelpFlag03"; 
      U     "xPulse8s";  //m101.3
      =     "xOut"; 
END_ORGANIZATION_BLOCK


und natürlich muss vierlagig NOCH EINEN drauf setzen =)
 
Na mal sehen was jetzt kommt :cool: (den UG gibts doch nicht mehr oder?)

schöne Grüße
Michael
 

Anhänge

  • CFC.JPG
    CFC.JPG
    22,4 KB · Aufrufe: 91
Zurück
Oben