Probleme beim Verlassen eines Funktionsbausteines

Flore87

Level-1
Beiträge
7
Reaktionspunkte
0
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
 

Anhänge

  • 2.JPG
    2.JPG
    28,6 KB · Aufrufe: 40
  • 1.JPG
    1.JPG
    29,7 KB · Aufrufe: 34
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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
 
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
 
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!
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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 ..."
 
Zuletzt bearbeitet:
...
"Auch Professoren haben nicht immer Recht! Du meinst es nur, da er ja Professor ist ..."
*ACK*

Furchtbares Volk, zumindest die von den Unis, mit denen ich bis dato zu tun hatte.
Können sich nicht vorstellen, das man nicht nur dazu da ist, sich die ganze Zeit um sie zu kümmern, sondern auch noch sein täglich Brot verdienen muss.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also erstmal herzlichen Dank für die super Hilfe.
Leider kann ich dein Programm nicht ganz nachvollziehen, da wir nur in AWL programmieren.
Gibt es da auch eine Lösung oder kann man die 1:1 übersetzen?

Vielen Dank
 
Ja, aber als blutiger Anfänger tut man sich schwer das zu lesen ;)
Ist der Freigabe dann ein weiterer Schließerkontakt vor dem FB1 oder?

Und was bezweckt L 20.0 ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, aber als blutiger Anfänger tut man sich schwer das zu lesen ;)
Ist der Freigabe dann ein weiterer Schließerkontakt vor dem FB1 oder?

Und was bezweckt L 20.0 ?

Das L20.0 bewirkt nur die Möglichkeit um zwischen AWL, KOP & FUP umzuschalten!
Sind Lokaldaten. Der Simatic Manger fügt dies sowie das BLD ein, damit man in der Ansicht umschalten kann
Das kleine Programmchen ist eine AWL Quelle.

Habe nun gedacht, Ihr programmiert eh in FUP oder KOP!
Aber wer AWL kann, programmiert so da man umschalten kann ;)

Also unter Quellen einen neue Einfügen und öffnen, das ganze hier markieren und einfügen und dann übersetzen.
E Vola, kommt das fertige Programm raus!

Die Freigabe ist kein weiterer Schliesserkontakt, es ist immernoch der einzigste!
Sinn von FB's ist ja, wiederkehrenden Code / Funktionen in einem Baustein zu Programmieren und durch einen Parametrierten Aufruf zu nutzen, ggf. auch mehrfach!
Man könnte z.B. den Timer ebenfalls als Parameter übergeben und könnte diesen FB mehrfach nutzen :cool: ...
 

Anhänge

  • Test.zip
    401,5 KB · Aufrufe: 1
Zuletzt bearbeitet:
Zurück
Oben