Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Probleme beim Verlassen eines Funktionsbausteines

  1. #1
    Registriert seit
    19.10.2012
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich hab ein Problem beim verlassen eines Funktionsbausteines.
    Ich programmiere zur Zeit an einer Sortieranlage. Diese wir über ein Touchscreen gesteuert. Es können dabei die Programme "Automatik_1" "Automatik_2" "Räumen" und "Testbetrieb" ausgewählt werden.

    Wird eines der Programme ausgewählt, wird ein Merker für die verschiedenen Programme angesteuert.

    Als Beispiel: Wird das Programm Autoamatik 1 gewählt, wird der Merker "m_Automatik_1" für Programm "Automatik 1" ausgewählt.
    Ist dieser aktiv wird der Funktionsbaustein FC1 im OB1 aufgerufen. (über ein Schließer Kontakt)

    Im Funktionsbaustein selbst wird ein Timer für 7sec gestartet der ein Förderband für diese Zeit einschaltet und danach wieder ausschaltet.


    Zu meinem Problem:

    Mein Problem ist, wird das Programm Automatik 1 angewählt, so läuft das Band genau einmal. Wird das Programm Automatik 1 wieder verlassen, wird der FB 1 verlassen.
    Durch den Merker "Automatik 1" wird mein Timer angesteuert, aber sobald ich den FB3 verlasse, bekommt der Timer immer noch ein "1" Signal vom Räumen Merker, obwohl dieser gar nicht mehr angesteuert ist.
    Also quasi mein Timer bekommt nicht mit das der FB3 verlassen worden ist.

    Habt ihr eine Idee was ich da anders Programmieren kann?

    Im Anhang findet ihr ein paar Ausschnitte von dem Programm, damit es für euch hoffentlich ein wenig verständlicher wird.
    Mein Professor hatte mir den Tipp gegeben, dass ich den Timer erst per Hand zurücksetzen soll, wie im Programm erkennbar mit dem E 4.0 (muss jetzt aber dafür eine Lösung finden)
    Das heißt, wenn ich das Programm anwähle und den E 4.0 dazuschalte dann funktioniert alles, da ich den Timer dann auch wieder zurücksetzen kann.

    Ich würde mich über eure Hilfe sehr freuen.

    Liebe Grüße
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg 2.JPG (28,6 KB, 39x aufgerufen)
    • Dateityp: jpg 1.JPG (29,7 KB, 33x aufgerufen)
    Zitieren Zitieren Probleme beim Verlassen eines Funktionsbausteines  

  2. #2
    Flore87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.10.2012
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Was das Problem vielleicht verständlicher macht.... ich habe gerade im Internet gelesen, dass Funktionsbausteine seine letzen Zustände merken.
    Das würde ja heißen das der Timer immer gesetzt wird,da der Merker andauernd das "1" Signal liefert.

    Aber eine Lösung habe ich leider noch nicht gefunden.

  3. #3
    Registriert seit
    21.12.2006
    Ort
    Wiener Neustadt
    Beiträge
    931
    Danke
    154
    Erhielt 169 Danke für 127 Beiträge

    Standard

    Dein Timer bekommt sehr wohl mit was los ist: Nämlich dass er nix mehr zu machen braucht.
    Der Timer läuft......
    Plötzlich wird der FC/FB nicht mehr aufgerufen
    Die Zustände im FB "frieren ein", weil ja der Baustein nicht mehr bearbeitet wird. Somit kann der Timer nicht weiterlaufen, ein Merker nicht verändert werden usw.
    Beim Merker fällts vielleicht nicht so auf, weil er in einem anderen Baustein verändert wird.
    Gruß
    M

    Handbook not read error...
    Klare Frage - klare Antwort

  4. #4
    Flore87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.10.2012
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen dank für deine Antwort. Genau das ist ja mein Problem, das die Zustände einfrieren. Aber wie kann ich es verhinder, bzw. programmieren das ein Timer wieder anläuft.

    Ich hab im Internet gelesen das es möglich ist nur den Befehl

    LS5t#7s
    SI T1

    U T1
    = Förderband

    aufzurufen. Also quasi wenn der FB geladen wird, wird auch der Timer geladen.
    Aber wie löse ich so ein Problem wirklich?

    Vielen Dank

  5. #5
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von Flore87 Beitrag anzeigen
    Vielen dank für deine Antwort. Genau das ist ja mein Problem, das die Zustände einfrieren. Aber wie kann ich es verhinder, bzw. programmieren das ein Timer wieder anläuft.

    Ich hab im Internet gelesen das es möglich ist nur den Befehl

    LS5t#7s
    SI T1

    U T1
    = Förderband

    aufzurufen. Also quasi wenn der FB geladen wird, wird auch der Timer geladen.
    Aber wie löse ich so ein Problem wirklich?

    Vielen Dank
    Du musst deine Bausteine vermutlich zyklisch bearbeiten.
    Einfach beim Verlassen einer Betriebsart, den Baustein nicht mehr bearbeiten ist nicht gut.
    Du musst die Bedienung der Komponenten von dem HMI abhängig machen, nicht die Bearbeitung des Bausteins.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  6. #6
    Flore87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.10.2012
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Und wie mach ich das die Bausteine zyklisch weiterlaufen? Hab mit sowas noch nie gearbeitet und im Automatisierung Praktikum werd ich gleich damit konfrontiert :/

  7. #7
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.335
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard

    Zitat Zitat von Flore87 Beitrag anzeigen
    Und wie mach ich das die Bausteine zyklisch weiterlaufen? Hab mit sowas noch nie gearbeitet und im Automatisierung Praktikum werd ich gleich damit konfrontiert :/
    Da wo der FB aufgerufen wird, das UND M 60.0 entfernen.
    Im FB selbst wird ja der M60.0 und der E 4.0 für den Timer abgefragt!

  8. #8
    Flore87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    19.10.2012
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Der Aufruf im OB 1 mit dem Merker 60.0 für den FB 1 wurde mir vom Professor so als Grundgerüst übergeben. Und da soll auch nichts geändert werden (denk ich ich mir jetzt mal).
    Im FB 1 selber musste ich dann mein Programm schreiben. Es soll nur einen Ausgang für 7 sec ansteuern. Mehr soll es nicht machen.
    Aber ich kann den FB 1 nur einmal aufrufen, da der Timer beim verlassen gesetzt bleibt.

    Jetzt habe ich mir überlegt den Timer nur mit dem Ladebefehl zu starten ohne eine Startbedingung.
    Der Schalter E 4.0 war nur ein Tipp vom Professor, damit ich sehe wo das Problem liegt.

  9. #9
    Registriert seit
    13.10.2007
    Beiträge
    12.031
    Danke
    2.785
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    Du könntest das einfach so lösen, das du dir einen Merker 'Aktiv' im Baustein schaffst,
    der beim Aufruf verodert wird. Dann wird der Baustein solange aufgerufen wie dieser
    Merker gesetzt ist.
    Im Baustein selber wird der Merker am Ende durch eine Zuweisung der Betriebsarten
    gesetzt.

    Aufruf:
    Code:
    O Betriebsart
    O Aktiv
    CC FB1
    Im Baustein
    Code:
    ..
    ..
    //am Ende
    O Betriebsart
    = Aktiv

  10. #10
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.335
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn der Baustein "bedingt" am Enable des FB's aufgerufen wird, wird die Bearbeitung unterbrochen wenn der M60.0 weg ist.
    Somit wird die ganze Bearbeitung des Timers T1 übergangen und das was im Speicher steht wird abgefragt.
    Der Timer bekommt nicht mehr mit, das M60.0 weg ist und kann daher auch nicht sein Ausgangssignal auf 0 schreiben!
    Erst mit dem nächsten M60.0 "1" wird der T1 wieder bearbeitet und da merkt der Timer das der Impuls abgelaufen ist und wird zu "0".
    Somit wird nur jeder 2 Zustandswechsel eine Aktion auf 1 am Timer ausgeführt!

    Evtl. wäre es besser einen Eingangsparameter am FB zu integrieren "Mode" oder "FRG" (Freigabe) und diesen zu neutzen.
    Somit würde der FB zwar Zyklisch abgearbeitet werden, aber die internen Bedingungen würden mit den EIngangsparameter verknüpft!

    Habe das unten dargestellte Progie im Simulator getestet und so funtkioniert es!
    Das UN E 4.0 - R T 1 wird ebenfalls nicht benötigt und kann entfernt werden!



    Code:
    FUNCTION_BLOCK "FB1"
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      FRG : BOOL ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =EVA
    
          U     #FRG; 
          U     E      4.0; 
          L     S5T#7S; 
          SI    T      1; 
          NOP   0; 
          NOP   0; 
          NOP   0; 
          U     T      1; 
          =     M    100.0; 
    NETWORK
    TITLE =kann raus ...
    
    //      UN    E      4.0
    //      R     T      1
    NETWORK
    TITLE =
    
          BE    ; 
    
    END_FUNCTION_BLOCK
    
    DATA_BLOCK "DB1"
    TITLE =
    VERSION : 0.0
    
    "FB1"
    BEGIN
       FRG := FALSE; 
    END_DATA_BLOCK
    
    ORGANIZATION_BLOCK "OB1"
    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 =Aufruf FB
    
    
          U     M     60.0; 
          =     L     20.0; 
          BLD   103; 
          CALL "FB1" , "DB1" (
               FRG                      := L     20.0);
          NOP   0; 
    END_ORGANIZATION_BLOCK

    "Auch Professoren haben nicht immer Recht! Du meinst es nur, da er ja Professor ist ..."
    Geändert von Boxy (20.10.2012 um 13:24 Uhr) Grund: Kommentar

Ähnliche Themen

  1. Antworten: 27
    Letzter Beitrag: 09.02.2011, 10:29
  2. Antworten: 0
    Letzter Beitrag: 13.10.2009, 21:36
  3. Probleme beim löschen eines FB´s (Graph7)
    Von alonely01 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 13.12.2007, 14:34
  4. Probleme beim schreiben eines Programmes
    Von Anonymous im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 28.04.2005, 16:52
  5. Antworten: 2
    Letzter Beitrag: 09.08.2003, 21:24

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •