Knifflige Zeitsteuerung !?

Deep Blue

Level-2
Beiträge
431
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leidensgenossen , meine Aufgabe ist z.Zt. einen Motor mit 2 Drehzahlen für die im OP angewählten Zeiten laufen zu lassen. Immer erst Zeit 1(Drehzahl 1), danach Zeit_Pause (kurze Pause von 3 Sek.) und dann Zeit 2(Drehzahl 2). Sollte Zeit 1 nicht benötigt werden startet der Motor sofort mit Zeit 2 und umgekehrt genau so.
Das ist ja soweit alles nicht so dramatisch, knifflig wird es erst jetzt, da ich die Zeiten auch pausieren lassen muss. Dazu habe ich mir den FC1 von Volker/Siemens runter geladen und benutzt. Für die Zeit 1 bekomme ich das ja auch noch hin, wenn ich aber den FC1 kopiere und mir daraus meine 2. Zeit stricken will, "läuft alles aus dem Ruder". Jetzt fällt mir so langsam nix mehr ein, habe schon mein WoEnde damit verbracht...bei strahlenden Sonnenschein draussen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sobald ich die Restzeit ins INOUT verschiebe, geht meine Steuerung in Stop und die SF-LED leuchtet rot. Diagnosse ist ein Programmierfehler in FC1. Setze ich Restzeit wieder zurück in OUT ist alles ok.
 
Habe Nachsicht, bin erst auf dem Weg der Erleuchtung:) . Soweit ist jetzt alles ganz gut, bis auf den Sachverhalt, das nach anlegen eines 2. Timers der erste bis ins "-" läuft. Beide Timer habe ich die Restzeit ins INOUT geschrieben. Wie gesagt, der erste läuft ins "-" ohne zu stoppen und der 2. bleibt so wie es sein soll bei 0 stehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie sich das anhört hast du den fc 2-fach vorliegen.
brauchst du nicht. du kannst den baustein mehrfach aufrufen.
die parameter restzeit und out müssen an beiden aufrufen natürlich unterschiedlich sein.

steht im baustein was von
==I
= #Out

und
L 0
==I

wenn ja änder das in
<=I

hab den fc zur zeit nicht zur hand
 
Habe ich gemacht, trotzdem geht die 1. Zeit in den Minusbereich. Ich versuche es mal mit dem Quellcode:

Code:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
 
VAR_INPUT
  Takt : BOOL ; 
  Start : BOOL ; 
  Zeitwert : INT ; 
  Reset : BOOL ; 
END_VAR
VAR_OUTPUT
  Out : BOOL ; 
END_VAR
VAR_IN_OUT
  Restzeit : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =
      UN    #Takt; 
      ON    #Start; 
      O     #Out; 
      SPB   no; 
      L     #Restzeit; 
      L     1; 
      -I    ; 
      T     #Restzeit; 
no:   L     #Restzeit; 
      L     0; 
      <=I   ; 
      =     #Out; 
      U(    ; 
      L     #Restzeit; 
      L     0; 
      <=I   ; 
      )     ; 
      UN    #Start; 
      O     #Reset; 
      SPBN  nore; 
      L     #Zeitwert; 
      T     #Restzeit; 
nore: NOP   0; 
END_FUNCTION
ORGANIZATION_BLOCK OB 1
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 =Taktgeber Funktionsbaustein
//
//
      UN    M      2.0; 
      L     S5T#1S; 
      SE    T      2; 
      NOP   0; 
      NOP   0; 
      NOP   0; 
      U     T      2; 
      =     M      2.0; 
NETWORK
TITLE =Zeit 1 Funktionsbaustein
      U(    ; 
      U     M      2.0; 
      =     L     20.0; 
      BLD   103; 
      U     M      3.1; 
      =     L     20.1; 
      BLD   103; 
      U     M      2.3; 
      =     L     20.2; 
      BLD   103; 
      U     M      4.0; 
      SPBNB _001; 
      CALL FC     1 (
           Takt                     := L     20.0,
           Start                    := L     20.1,
           Zeitwert                 := DB20.DBW    0,
           Reset                    := L     20.2,
           Out                      := M      2.6,
           Restzeit                 := MW    10);
_001: U     BIE; 
      )     ; 
      U     M      3.2; 
      =     A      4.0; 
NETWORK
TITLE =Zeit 2 Funktionsbaustein
      U(    ; 
      U     M      2.0; 
      =     L     20.0; 
      BLD   103; 
      U     M      3.1; 
      =     L     20.1; 
      BLD   103; 
      U     M      2.3; 
      =     L     20.2; 
      BLD   103; 
      U     M      4.0; 
      SPBNB _002; 
      CALL FC     1 (
           Takt                     := L     20.0,
           Start                    := L     20.1,
           Zeitwert                 := DB20.DBW    2,
           Reset                    := L     20.2,
           Out                      := M      2.7,
           Restzeit                 := MW    20);
_002: U     BIE; 
      )     ; 
      U     M      3.5; 
      =     A      4.1; 
NETWORK
TITLE =Start Befehl im Hand Bild
      U     DB11.DBX    1.1; 
      U     DB12.DBX    3.1; 
      =     M      2.1; 
NETWORK
TITLE =Stop Befehl im Hand Bild
//
//
      U     DB11.DBX    1.1; 
      U     DB12.DBX    3.3; 
      =     M      2.2; 
NETWORK
TITLE =Reset Befehl im Hand Bild
      U     DB11.DBX    1.1; 
      U     DB12.DBX    3.4; 
      =     M      2.3; 
NETWORK
TITLE =Kopf heben Befehl im Hand Bild
      U     DB11.DBX    1.1; 
      U     DB12.DBX    3.5; 
      =     M      2.4; 
NETWORK
TITLE =Start/Stop Zeit-Funktion
      U     M      2.1; 
      S     M      3.1; 
      U     M      2.2; 
      R     M      3.1; 
      NOP   0; 
NETWORK
TITLE =Vergleicher, ob Zeit 1 beendet ist
      L     0; 
      L     MW    10; 
      ==I   ; 
      =     M      3.3; 
NETWORK
TITLE =Drehzahl 1. Stufe
      UN    M      3.3; 
      U(    ; 
      L     DB20.DBW    0; 
      L     MW    10; 
      <>I   ; 
      )     ; 
      U     M      3.1; 
      =     M      3.2; 
NETWORK
TITLE =Vergleicher, ob Zeit 2 beendet ist
      L     0; 
      L     MW    20; 
      ==I   ; 
      =     M      3.4; 
NETWORK
TITLE =Drehzahl 2. Stufe
      UN    M      3.4; 
      U(    ; 
      L     DB20.DBW    2; 
      L     MW    20; 
      <>I   ; 
      )     ; 
      U     M      3.1; 
      =     M      3.5; 
NETWORK
TITLE =Sicherheitskette Rührwerk
//
//
      UN    E      0.0; 
      UN    E      0.1; 
      UN    E      0.2; 
      UN    E      0.3; 
      UN    E      0.4; 
      =     M      4.0; 
NETWORK
TITLE =
 
      CALL FB     1 , DB     1 (
           Taster                   := M      2.4,
           Hilfsmerker              := M      2.5,
           Ausgang                  := M      2.6);
END_ORGANIZATION_BLOCK

Vielleicht kannst Du mir damit ja helfen? Danke schon mal im Vorraus !!!
 
hast recht ich hab nicht richtig hingeschaut.

da zählt mix ins minus. das klappt.

übrigens.
man programmiert das hauptprogramm nicht im ob1. den behält man sich für die organisation vor.
 
Das ist mir schon klar, aber ehe ich das Programm "richtig" schreibe, sollte das mit den Zeitfunktionen klappen. Und da reicht mir der OB 1 aus. Also jetzt habe ich mal das Programm nach Urlöschen neu aufgespielt, und immer noch das selbe Spiel, die erste Zeit zählt in den Minusbereich, die zweite bleibt stehen.
 
Zurück
Oben