Schrittkette mit AUTO/HALBAUTO

apachler

Level-1
Beiträge
96
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

So hab nun mal wieder was für die hellen
Köpfe hier im Forum!


Muss eine Schrittkette für eine Entsalzungsanlage
schreiben. NICHT MIT GRAPH!

Diese hat mehrere Schritte und die Betriebsarten
Automatik und Halb-Automatik.
Es muss jeder Zeit zwischen den beiden
Betriebsarten umschaltbar sein.

Mein Problem besteht in der Halb-Automatik.

Mann kann über eine Visu die Schritte mittels
Bit/Schritt vorwählen und dann mittels Schalter
durchfahren.

In meinem Programm sieht es jetzt so aus:
Wenn ich mehrere Schritte vorgewählt habe und
den Halb-Automatik Modus starte, werden alle
Schritte die Gewählt sind gestartet! :-(



Wie kann ich den Halb-Auto Betrieb realisieren?



Im Anhang noch ein Auszug aus dem Programm (1Schritt)



danke im vorraus ... mfg Andreas
 

Anhänge

  • ausschnitt.JPG
    ausschnitt.JPG
    97,6 KB · Aufrufe: 103
Hallo!

apachler schrieb:
Wenn ich mehrere Schritte vorgewählt habe und
den Halb-Automatik Modus starte, werden alle
Schritte die Gewählt sind gestartet! :-(

...hat es denn einen Grund, das bei der Schritkette mehrere Schritte vorgewählt sind? Das würde ja dann in gewisser Weise ein paralleles Bearbeiten nach sich ziehen - es sei denn die Startbedingungen sind unterschiedlich...

Wenn die Schritte, alle der Reihe nach, im Automatikbetrieb laufen, dann sollte eigentlich eine Oderverknüpfung in der Art

U #Automatik
O
U #Halbautomatik
U #Halbautomatik_Freigabe

reichen... denke ich zumindest... natürlich für jeden Schritt...
Bei einem Umschalten in Hand setze ich, wenn möglich, immer die Automatikschrittkette komplett zurück. Natürlich muss dann alles erst in Grundstellung gefahren werden, bevor der Automatikzyklus erneut gestartet werden kann... Immer geht das natürlich nicht - kommt ein wenig auf die Problemstellung an...

Viele Grüße, Tobias
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tobias, Hallo alle!

Es sollen alle Schritte der Reihe nach abgelaufen werden
die gewählt sind.

Code:
      U(    
      U     "WEITER_SEQ_1_0"
      U     "AUTO"
      O     
      U     "SEQ_2_0"
      U     "HALB_AUTO"
      )     
      UN    "FERTIG_SEQ_2_0"
      UN    "HAND"
      S     "START_SEQ_2_0"


Jedoch werden alle angewählten Schritte parallel gestartet das ich jedoch nicht will.

Am oberen Code sieht man:
SEQ_2_0 Schritt-Vorwahl Halb-Auto
HALB_AUTO Halb-Automatik Betrieb

Da jedoch in jeder Anweisung für den Start der Kette
die beiden Abgefragt werden, ergibt es sobalb
ich auf Halb-Auto schalte und der Schritt vorgewählt ist
"1" und der Schritt wird gestartet!

Wie kann ich das ganze besser lösen?


mfg andreas
 
Wenn ich das richtig verstanden habe, soll immer nur ein Schritt aktiv sein, die Schritte, welche überhaupt abgearbeitet werden sollen, kann man anwählen.
Ein nachfolgender Schritt muß immer nachsehen, ob der vorhergehende Schritt ordnungsgemäß abgeschlossen wurde. Ist ein Schritt abgewählt, wird er trotzdem durchlaufen, aber keine Aktion in ihm ausgeführt, am Ende als fertig abgearbeitet gekennzeichnet, so daß der nächste Schritt weitermachen kann. Begonnen wird dann immer bei Schritt 1, oder bei einem beliebigen Einsprungpunkt. Überhaupt würde ich mir überlegen, ob ich das ganze vielleicht mit einem Sprungverteiler realisiere.
 
@ralle

erstmal danke für deine antwort!


leider ist das auch net das richtige!

hier mal der auszug aus dem pflichtenhelft:
Halb-Auto Betrieb erlaubt die aktivierung eines Beliebigen
Betriebsschrittes ohne jede automatische Schritt-Fortschaltung und unabhängig von der verfahrenstechnisch erforderlichen Reihenfolge.

Im Anlagenbild der Verfahrensstufe ist ein Wahlschalter mit der Möglichkeit die Betriebsart vorzuwählen visualisiert.
Ein weiterer Wahlschalter erlaubt die Wahl eines beliebigen Betriebsschrittes.


Wie mache ich das mit den sprungverteilern??


danke!!! ... mfg Andreas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann ist eigentlich der Sprungverteiler die Wahl, abhängig von der Zahl im Schritt-Byte wird zu der entsprechenden Sprungmarke verzweigt. Für eine Schrittkette mit 20 Schritten existieren 20 Sprungmarken. An den Sprungmarken kannst du dann machen was zum Schritt gehört. Eine Schrittfortschaltung erfolgt, indem man das Schritt-Byte um 1 erhöht. Das unterbleibt in der Halbautomatik. In einem Schritt passiert immer folgendes:

1. Ansteuern einer Aktion (z.Bsp. Merker setzen, mit dem ein Zylinder verfahren werden soll.
2. Abfrage der Endlage des Zylinders, wenn er also seine Verfahrbewegung durchgeführt hat, dann wird die Bedingung True.
3. Wenn die Bedingung True, dann Schrittweiterschaltung zum nächsten Schritt.

Für die Schrittweiterschaltung habe ich einen eigenen Baustein. Im Schritt wird nur ein Weiterschaltbit gesetzt, den Rest übernimmt der Baustein. So kann man auch die Anfangsbedingungen für den Startschritt (Z.Bsp. Grundstellung) vor dem Start der Schrittkette kontrollieren etc.

In Halbautomatik kann ein beliebiger Schritt an Hand der Schrittnummer gewählt werden.
 
@ralle

danke ...

was mache ich aber wenn ich mehrere schritte vorwählen können muss?


kannst du mir den baustein zukommen lassen,
oder is der closedsource? ;)


mfg
 
Ein weiterer Wahlschalter erlaubt die Wahl eines beliebigen Betriebsschrittes.

Man kann immer nur einen Schritt vorwählen und diesen einen Schritt kann man ausführen lassen.

Hier mal ein Beispiel füer einn Sprungverteiler mit Schrittweiterschaltung ohne eigenen FC.
Die Schrittweiterschaltung kann man noch von der Automatik etc. abhängig machen.

Code:
...
VAR
  Stepcounter : BYTE ; 
 
 
...
 
NETWORK
TITLE =Anlauf?, Datenaustausch aktiv?
      U     #Anlauf; 
      S     #Anlauf_Stat; 
      U     #Aktiv; 
      S     #Aktiv_Stat; 
      UN    #Aktiv_Stat; 
      BEB   ; 
 
...
 
NETWORK
TITLE =Sprungliste für kleines Einlesen der Daten
KLDL: NOP   0; 
      L     #Stepcounter; 
      SPL   ALE2; 
      SPA   END; 
      SPA   T3S0; //Tab 3 Seg 0
      SPA   T5S0; //Tab 5 Seg 0
ALE2: SPA   END; 
 
NETWORK
TITLE =Tabelle 3 Segment 0 auslesen
T3S0: NOP   0; //;
      L     3; 
      T     #Send.Tabellennummer; 
      L     0; 
      T     #Send.Segmentnummer;  //hier stehen die Befehle, die ausgeführt werden sollen (könnte auch S M 100.0 lauten)
//;
      U(    ;          //hier wird kontrolliert, ob die obige Aktion ausgeführt wurde (könnte auch U E 20.0 für eine Endlage lauten)
      L     #Recive.Tabellennummer; 
      L     #Send.Tabellennummer; 
      ==I   ; 
      )     ; 
      U(    ; 
      L     #Recive.Segmentnummer; 
      L     #Send.Segmentnummer; 
      ==I   ; 
      )     ; 
      SPBN  BUSY;                //noch nix passiert, ab zur Warteschleife
      CALL SFC   20 (
           SRCBLK                   := P#DIX 50.0 BYTE 12,
           RET_VAL                  := #Ret_Val_Temp,
           DSTBLK                   := #Tabelle_3.Segment_0);//P#DIX 148.0 BYTE 12     //Tabelle 3 Segment 0
      L     #Ret_Val_Temp; 
      L     0; 
      <>I   ; 
      SPB   ERR;                 //SFC 20 hatte Fehler --> Error-Ausgabe etc.
      SPA   NSTP;              //nächster Schritt
 
NETWORK
TITLE =Tabelle 5 Segment 0 auslesen
T5S0: NOP   0; //;
      L     5; 
      T     #Send.Tabellennummer; 
      L     0; 
      T     #Send.Segmentnummer; 
//;
      U(    ; 
      L     #Recive.Tabellennummer; 
      L     #Send.Tabellennummer; 
      ==I   ; 
      )     ; 
      U(    ; 
      L     #Recive.Segmentnummer; 
      L     #Send.Segmentnummer; 
      ==I   ; 
      )     ; 
      SPBN  BUSY; 
      CALL SFC   20 (
           SRCBLK                   := P#DIX 50.0 BYTE 12,
           RET_VAL                  := #Ret_Val_Temp,
           DSTBLK                   := #Tabelle_5.Segment_0);//P#DIX 190.0 BYTE 12     //Tabelle 5 Segment 0
      L     #Ret_Val_Temp; 
      L     0; 
      <>I   ; 
      SPB   ERR; 
      SPA   END; 
 
NETWORK 
TITLE = Schrittkettenlogistik
END:  NOP   0; 
      SET   ; 
      R     #fn_Busy; // set function ready
      L     0; 
      T     #fn_Error; // set no error
      L     1; 
      T     #Stepcounter; 
      SPA   PGEM; 
//;
ERR:  L     0; // reset statemachine
      T     #Stepcounter; 
      SET   ; 
      R     #fn_Busy; 
      R     #Anlauf_Stat; 
      SPA   PGEM; 
//;
NSTP: NOP   0; 
      L     #Stepcounter; 
      INC   1; // go to the next Step
      T     #Stepcounter; 
      SPA   PGEM; 
BUSY: L     0; // set no error
      T     #fn_Error; 
      SET   ; 
      S     #fn_Busy; // set function busy
//;
PGEM: NOP   0;

BUSY wird angesprungen, solange die Fertig-Bedingung des Schrittes nicht erfüllt ist
NSTP wird angesprungen, wenn die Bedingung erfüllt ist und der nächste Schritt folgen soll
END wird angesprungen, wenn die Schrittkette fertig ist, oder die Schrittnummer irregulär ist (zu groß, für Anzahl der Sprungmarken)

Was in den Schritten steht ist dir überlassen, auch die Unterscheidung Auto (Alle Schritte nacheinander abarbeiten) Halbauto (angwählten Schritt abarbeiten) sowie die entsprechenden Freigaben dafür sind hier nicht dabei, da in der o.g. Anwendung nicht nötig gewesen.

Mein Schritt-FC alleine würde dich nicht viel weiterbringen, da hängt das ganze System dran und das kann ich leider nicht von mir aus weitergeben.
 
Zuletzt bearbeitet:
Zurück
Oben