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

Ergebnis 1 bis 8 von 8

Thema: Einschaltverriegelung mit TIA

  1. #1
    Registriert seit
    16.10.2013
    Ort
    Niedersachsen
    Beiträge
    38
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich stehe momentan etwas auf dem Schlauch und komme nicht weiter.
    Ich möchte mit dem TIA Portal und SCL eine Art Einschaltverriegelung erstellen.
    Ich habe zwölf Motoren, die entweder mit einem FU oder per Stern-Dreieck angelassen werden.
    Diese lassen sich theoretisch gleichzeitig einschalten.
    Da dies natürlich nicht darf, möchte ich diese zeitlich verzögert einschalten, sprich:

    Motor1 bekommt das Einschaltsignal, 1s später kommt der Befehl gleichzeitig für Motor3 und Motor4.

    Die Startreihenfolge soll sich dann in etwa so abspielen:
    Motor1 --- 15s warten --- Motor3 ---15s warten --- Motor4 ---15s warten usw...

    Also sobald ein Motor den Befehl bekommt, zu starten, werden alle anderen für 15s "gesperrt", kommen während dieser Zeit
    weitere Einschaltbefehle anderer Motoren, kommen diese der Reihe nach dran.

    Kann mir da jemand weiterhelfen ?
    Vielen Dank im Vorraus!

    Gruß, Reckers
    Zitieren Zitieren Einschaltverriegelung mit TIA  

  2. #2
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    386
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Hallo Reckers,

    Ist es immer der gleiche Reihenfolge?
    Dann wäre ein Schrittkette ein gute Wahl.

    Und die Verrieglung der 15s kannst im Schrittkette machen, oder als Freigabe am Motor. z.b.

    Code:
    #MOTOR_1_START := #CMD_MOTOR_1_START AND #MOTOR_2_KEIN_START AND #MOTOR_3_KEIN_START AND #MOTOR_4_KEIN_START AND #MOTOR_5_KEIN_START;
    Wie stellst du dir die Verriegelung FU und Releaisbetrieb vor?
    ist die schon da? Hardverdrahtet vielleicht?

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  3. Folgender Benutzer sagt Danke zu de vliegende hollander für den nützlichen Beitrag:

    Reckers (08.05.2015)

  4. #3
    Registriert seit
    09.01.2012
    Beiträge
    466
    Danke
    25
    Erhielt 38 Danke für 35 Beiträge

    Standard

    Erste frage wieso SCL? ( Nur meine persönliche Meinung)

    Jedem Motor eine Einschaltverzögerung Parallel schalten und miteinander verknüpfen.

    Ein zweiter Ansatz wäre eine Art Verriegelungsbit das jedesmal wenn ein Motor am hochlaufen ist dieses setzt. Und solange dieses gesetzt ist kann kein anderer Motor gestartet werden...

  5. Folgender Benutzer sagt Danke zu RogerSchw85 für den nützlichen Beitrag:

    Reckers (08.05.2015)

  6. #4
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Hallo Reckers,

    es könnte so funktionieren (noch nicht bis zum bitteren Ende durchdacht ;o) ):
    Ein Array anlegen, in dem Du die Einschaltbefehle aller Motore speicherst.
    Dieses Array durchläufst Du. Sobald Du einen Einschaltbefehl findest, startest Du den entsprechenden Motor und machst einen Timer TOF, den Du mit einem Impuls startest.
    Das ist Dein Blockiersignal. So lange dieser Timer ON ist, verarbeitest Du das Array nicht. Nach jedem ausgeführten Befehl beendest Du die Schleife und löschst den Befehl aus dem Array.
    Ist der Timer abgelaufen, durchläufst Du wieder das Array und findest den nächsten Einschaltbefehl... Spiel beginnt von vorne.


    Zu bedenken:
    15s sind schon eine gewisse Zeit, in denen Gefährdungen auftreten können. Je nach Art der Motoren (was sie antreiben), sollte signalisiert werden, daß ein Befehl ansteht.
    Außerdem könnte es sein, daß jemand einen Einschaltbefehl gibt und sich wundert, daß nichts passiert. Der letzte Motor läuft ja erst fast 3 Minuten später an. Also schonmal den Elektriker rufen "Mein Motor funktioniert nicht"... Es sollte an der Befehlsstelle signalisiert werden, daß der Befehl akzeptiert wurde aber noch blockiert wird. Sowas wie "Motor in Warteschleife"...

    Gruß
    JS

  7. Folgender Benutzer sagt Danke zu JSEngineering für den nützlichen Beitrag:

    Reckers (08.05.2015)

  8. #5
    Registriert seit
    16.10.2013
    Ort
    Niedersachsen
    Beiträge
    38
    Danke
    11
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Vielen Dank für die schnellen Antworten!

    Ist es immer der gleiche Reihenfolge?
    Nein, die Reihenfolge ist immer eine unterschiedliche, je nach Bedarf.

    Wie stellst du dir die Verriegelung FU und Releaisbetrieb vor?
    ist die schon da? Hardverdrahtet vielleicht?
    Es handelt sich dabei um 6 FU-angetriebene Motoren und um 6 mit Stern-Dreieck-Anlauf.

    Erste frage wieso SCL? ( Nur meine persönliche Meinung)
    SCL ist mein Favorit beim programmieren, andere Sprachen gehen natürlich auch

    Ein zweiter Ansatz wäre eine Art Verriegelungsbit das jedesmal wenn ein Motor am hochlaufen ist dieses setzt. Und solange dieses gesetzt ist kann kein anderer Motor gestartet werden...
    Dies habe ich schon versucht, jedoch hat jedoch nicht wirklich geklappt.

    Zu JS:
    So in der Art habe ich mir das auch gedacht, dein Ansatz ist dabei schonmal auf jeden Fall besser durchdacht als meiner

    Zu deinen Bedenken:
    Es ist nicht so, das alle 12 Motoren gleichzeitig eingeschaltet werden, sondern nach Bedarf. Einzelne Motoren können immer wieder hinzu und weggeschaltet werden. Automatische Anläufe gibt es nur bei 6 Motoren, die anderen 6 müssen per Hand eingeschaltet werden. Während des "Wartens" erfolgt eine Meldung bei jedem Motor "Bitte Warten". "Motor in Warteschleife" ist natürlich auch nicht schlecht

  9. #6
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Nein, die Reihenfolge ist immer eine unterschiedliche, je nach Bedarf.
    Dann könntest Du in das Array statt Bits auch Integer reinschreiben. Also anstatt daß das Array-Element die Motornummer ist, speicherst Du die Motornummer und das Array-Element ist nur die Warteschleifenposition.

  10. Folgender Benutzer sagt Danke zu JSEngineering für den nützlichen Beitrag:

    Reckers (08.05.2015)

  11. #7
    Registriert seit
    28.03.2008
    Beiträge
    142
    Danke
    19
    Erhielt 25 Danke für 25 Beiträge

    Standard

    Code:
    FUNCTION_BLOCK "MotorReihe"
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT 
          An : Bool;
          Zeit : Time;
       END_VAR
       VAR_OUTPUT 
          Out_01 : Bool;
          Out_02 : Bool;
          Out_03 : Bool;
          Out_04 : Bool;
          Out_05 : Bool;
          Out_06 : Bool;
          Out_07 : Bool;
          Out_08 : Bool;
          Out_09 : Bool;
          Out_10 : Bool;
          Out_11 : Bool;
          Out_12 : Bool;
       END_VAR
       VAR 
          Takt {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
          i : Int;
          impuls { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
       END_VAR
    
    BEGIN
     #Takt(IN:=NOT #impuls, PT := #Zeit, Q=>#impuls);
     
     IF #An THEN
         IF #impuls AND #i < 12 THEN
             #i := #i + 1;
         END_IF;
     ELSE
         #i := 0;
     END_IF;
     
     #Out_01 := #i >=  1;
     #Out_02 := #i >=  2;
     #Out_03 := #i >=  3;
     #Out_04 := #i >=  4;
     #Out_05 := #i >=  5;
     #Out_06 := #i >=  6;
     #Out_07 := #i >=  7;
     #Out_08 := #i >=  8;
     #Out_09 := #i >=  9;
     #Out_10 := #i >= 10;
     #Out_11 := #i >= 11;
     #Out_12 := #i >= 12;
     
     
    END_FUNCTION_BLOCK
    Edit: Sorry Frage nicht ganz gelesen
    Geändert von BoxHead (08.05.2015 um 10:04 Uhr)
    Komm und wecke den Teufel unter meiner Schädeldecke. Das Chaos hat die Macht!

  12. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich würde ein zweispaltiges Array mit Motornummern anlegen, um die Reihenfolge beliebig festlegen zu können (Spalte 1 = Motornummer) und den Einschaltzeitpunkt in Sekunden (Spalte 2). (Format Time würde auch gehen)

    Eine Zählvariable zählt z.b. jede Sekunde um 1 hoch. Mit dem Zählimpuls läuft man jedes Mal in einer Schleife durch das Array und schaut nach, ob einer der Einschaltzeitpunkte gleich dem Zählwert ist. Ist das der Fall, setzt man eine Variable, die der Motornummer des zu startenden Motors entspricht. Mit dieser Variable macht der Motor selbständig in seinem Baustein seine Hochlaufsequenz.

    Wird die Anlage abgeschaltet, dann wird die Zählvariable auf 0 gesetzt und es kann bei Einschalten von vorn losgehen.

    Möglichkeiten gibt es insgesamt viele, aber mit einem Array ist man recht flexiebel und kann das in der HMI ganz nett gestalten.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  13. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Reckers (08.05.2015)

Ähnliche Themen

  1. Antworten: 22
    Letzter Beitrag: 10.08.2017, 09:48
  2. Antworten: 27
    Letzter Beitrag: 16.03.2016, 13:31
  3. Antworten: 11
    Letzter Beitrag: 24.01.2013, 13:28
  4. Antworten: 10
    Letzter Beitrag: 13.09.2012, 07:31
  5. Antworten: 24
    Letzter Beitrag: 05.06.2012, 15:55

Lesezeichen

Berechtigungen

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