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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: "Konfigurierbare Schrittkette" - wie macht man so etwas?

  1. #11
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Würde mich dem Vorschlag von Larry anschliessen.

    Will mal einen kleinen Vorschlag grob aufreissen. Zur Programmierung würde ich, wie Larry schon sagte, in SCL machen. Das erleichtert den Zugriff auf den Array und die Struktur.

    Erstell Dir zuerst mal eine Struktur.
    Die beinhaltet:
    - die nächste Schrittnummer, zu der weitergesprungen werden soll
    - ein paar Bits, die UND-verknüpft werden
    - ein paar Bits, die ODER-verknüpft werden
    - alles was Dir noch so einfällt

    Also ungefähr so:

    TYPE MyStepstruct
    NextStep: INT;
    AndBit_1: BOOL;
    AndBit_2: BOOL;
    AndBit_3: BOOL;
    AndBit_4: BOOL;
    OrBit_1 : BOOL;
    OrBit_2 : BOOL;
    OrBit_3 : BOOL;
    OrBit_4 : BOOL;
    ActOut_1 : BOOL;
    ActOut_2 : BOOL;
    ActOut_3 : BOOL;
    ActOut_4 : BOOL;
    END_TYPE

    Mit einem Array dieser Struktur füllst Du Dir einen DB. Den Array mindestens so gross wählen, dass alle Schritte reinpassen.

    Die UND und ODER Bits werden in der SPS fest verknüpft. Ist zwar nicht die grenzenlose Freiheit, aber besser als nichts. Die Verknüpfungsweise legst Du selber fest. Vielleicht ist an dieser Anlage ja eine bestimmte Kombination sinnvoll.

    Am WinCCFlex könnte der Benutzer dann eine Zahl eingeben, die seine Schrittnummer darstellt und in Deinem Programm den Array-Index.
    Du zeigst ihm dann den Inhalt dieses Feldes, bzw. Struktur an. Also die nächste Schrittnummer und die einzelnen Bits. Die kann er dann nach belieben ändern und per Button wieder in den DB zurückschreiben.

    Wenn Dein Programm dann den Ablauf startet, springt es in den ersten Schritt. Dort stehen einerseits die Ausgänge oder was auch immer, und auch die Bits, die die Weiterschaltbedingung bilden. Ist die Bedingung erfüllt, setzt Du den Array-Index auf die Ziel-Schrittnummer. Im nächsten Zyklus greifst Du dann auf dieses (Ziel)-Feld zu und das Spiel geht wieder von vorne los. Auf diese Art kannst Du auch Endlosketten programmieren lassen.

    Was Du in Deine Struktur einbaust, ist relativ frei wählbar. Denkbar wären auch Zeitwerte für Timer usw. usf.
    Geändert von Grubba (30.07.2009 um 15:01 Uhr)

  2. Folgender Benutzer sagt Danke zu Grubba für den nützlichen Beitrag:

    on69 (30.07.2009)

  3. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Zitat Zitat von zotos Beitrag anzeigen
    Dann bitte aber mit einer CASE-Verzweigung und ohne GOTO.
    ... oder mit CASE ... der war mir aber nun "auf die Schnelle" nicht eingefallen ...

    ...

  4. #13
    Registriert seit
    13.10.2007
    Beiträge
    12.032
    Danke
    2.787
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Zitat Zitat von on69 Beitrag anzeigen

    @Helmut: Danke für Deinen Vorschlag. Kannst Du mir aber bitte noch einen Tipp geben WIE ich die Schritte in der HMI editieren kann? Das Variieren der Schrittabfolge (bzw. Transitionen) ist gerade mein Problem.
    Das einfachste Editieren in der HMI ist es für mich die Variablen in ein Rezept zu schieben, einfach die Werte eintragen und als Datensatz speichern.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

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

    on69 (30.07.2009)

  6. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    ... da hätte ich auch noch einen Vorschlag dazu :
    Du baust dir passend beschriftete Tasten auf die Oberfläche deiner Visu. Jede dieser Tasten setzt ein Bit in der Steuerung (wenn Teach-Betrieb angewählt ist). Ist eines dieser Bits gesetzt, dann sperrst du alle anderen Tasten auf der Oberfläche (keine Freigabe). Das würde z.B. so gehen, dass du die Tastenbits noch einmal als DWORD (oder ähnlich) einliest und für die Freigabe auf 0 vergleichst. Ist ein Tasten-Bit gesetzt, dann ist das DWORD <> 0 ...

    In deinem SPS-Programm hast du nun eine Sequenz, die auf das Tasten-Bit wartet. Ist ein Bit da, so wird in die Befehls_Liste ein entsprechender Code hineingeschrieben und der Pointer für den nächsten Array-Index um 1 erhöht (auch sehr schön in SCL zu machen). Nun wird das Bit gelöscht (weil ja bearbeitet) und damit die Visu wieder für neue Eingaben freigegeben ...
    Betätigst du die Taste "Programm fertig", so wird eine Ende-Markierung in die Liste geschrieben.

    Gruß
    LL

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

    on69 (30.07.2009)

  8. #15
    Registriert seit
    02.11.2006
    Beiträge
    496
    Danke
    217
    Erhielt 25 Danke für 6 Beiträge

    Standard

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Hallo on69,
    für mich bittet sich der Sprungverteiler als Variable Schrittkette an.
    Du erstellst für jeden Schritt eine Variable wo der folgende Schritt für
    den Aktiven Schritt eingetragen wird. Diese Schritte kannst du dann
    sehr einfach in der HMI editieren, siehe Beispiel.

    Code:
     
    STEP: L     #STEP.Nr
          SPL   SE
          SPA   S0                          
          SPA   S1                     
          SPA   S2                        
          SPA   S3                       
          SPA   S4                       
          SPA   S5                       
          ..usw..
          SPA   SEND                        
    SE:   NOP   0
          SPA   work
     
     
    S0:  ..was immer
           ausgeführt
           werden soll..
           L STEP._1
           T STEP.Nr
           SPA  work
     
    S1:  ..was immer
           ausgeführt 
           werden soll..
           L STEP._2
           T STEP.Nr
           SPA work
     
          ...usw...
     
    work: NOP 0
    gruß helmut
    Hallo "Helmut von der Reparatur",


    Ich fand Deine "Bedienungsanleitung für Sprunglisten" so gut beschrieben, daß ich dachte.... >>> DAS ist es, was ich gesucht und bisher nie gefunden habe !!

    Für's Erste hatte ich gedacht, daß ich Deine Anleitung zum Thema "Sprungliste" verstanden hätte...
    Aber nach einer 1zu1- Umsetzung auf mein Projekt kamen ca. 1000 Fragen...

    Ich bin gerade dabei, eine mehrstufige Absaug- und Entstaubungsanlage zu proggen. Ich hatte früher schonmal Fragen zu Absauganlagen... aber es ist tatsächlich eine neue, andere Anlage... [größer, weiter, höher, schneller....]


    Für sämtliche "Zeiten" ( Normalbetrieb [Automatik], Räumbetrieb [Automatik], Filterreinigung während Normalbetrieb, Filterreinigung während Räumbetrieb, Ventil-Ansteuerung etc... würde ich gern einen Taktmerker verwenden... und diesen Takt mittels eines FB's und "eigenen Zählern" [ als MB oder MW ] "verwursten".

    Ich habe mir das so vorgestellt:
    Code:
    - Übergabe an den FB =>  "Job_ID_No" // eine Dez.Zahl als  BYTE, IN-Var
     
    - den Taktmerker kann ich direkt im FB vergleichen
     
    - Taktmerker (mit pos. Flanke) "hochzählen" (TEMP-Var= #Takt)
    - Laden des für diesen Job in DB1 hinterlegten Taktes ( z.B. DB1.DBW0)
    Vergleich, ob  #Takt > DB1.DBW0
    Wenn ja, dann setze ...  Cnt_OK  ( OUT-Var= BOOL)
    Mir hat diese "SPL" soooo gut gefallen, das wär's... wenn es funktionieren würde.

    Die "Job_ID_No" wird online getaktet angezeigt...
    Bei Job_ID_No= 1 wird genau die 1. Sprungmarke ( SPA M1 ) übersprungen, alle anderen Sprungmarken werden ausgeführt.

    Oder muß es doch ein bedingter Sprung sein ???


    ( eigentlich wird nur der Sprung am Ende der SPL abgearbeitet )

    Ich würde mich freuen, wenn Du einem s7-Greenhorn etwas "Nachhilfe" -Unterricht geben könntest.

    Mfg
    Geändert von mega_ohm (19.09.2009 um 02:41 Uhr)

  9. #16
    Registriert seit
    13.10.2007
    Beiträge
    12.032
    Danke
    2.787
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Hallo mega_ohm,
    es gibt viele gestaltungsmöglichkeiten für einen Sprungverteiler,
    in meinen beispiel ist es so das genau der Schritt (Marke) angesprungen
    wird der in der Variablen "STEP.Nr" steht und nur der Schritt alle anderen
    werden durch anweisung "spa work" übersprungen.

    Wenn ich dich richtig verstehe möchtest du alle Marken durchlaufen und
    nur geziehlt ein paar anweisungen vor dieser Marke nicht bearbeiten.
    Das geht auch, du läst bei einfach die anweisung "spa work" fehlen.
    Wie die STEP.Nr bzw. deine Job_ID bearbeitet werden soll müsesen wir
    dann noch ermitteln

    Code:
     
    STEP: L     #STEP.Nr
          SPL   SE
          SPA   S0                          
          SPA   S1                     
          SPA   S2                        
          SPA   S3                       
          SPA   S4                       
          SPA   S5                       
          ..usw..
          SPA   SEND                        
    SE:   NOP   0
          SPA   work
     
     
    S0:  ..was immer
           ausgeführt
           werden soll..
     
     
     
    S1:  ..was immer
           ausgeführt 
           werden soll..
     
     
     
          ...usw...
     
    work:
    Das kann erst nur mal zur annäherung angenommen werden, weil ich
    noch nicht so richtig verstanden habe wo du hin möchtest.

    gruß helmut
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  10. #17
    Registriert seit
    02.11.2006
    Beiträge
    496
    Danke
    217
    Erhielt 25 Danke für 6 Beiträge

    Standard

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Hallo mega_ohm,
    es gibt viele gestaltungsmöglichkeiten für einen Sprungverteiler,
    in meinen beispiel ist es so das genau der Schritt (Marke) angesprungen
    wird der in der Variablen "STEP.Nr" steht und nur der Schritt alle anderen
    werden durch anweisung "spa work" übersprungen.

    Wenn ich dich richtig verstehe möchtest du alle Marken durchlaufen und
    nur geziehlt ein paar anweisungen vor dieser Marke nicht bearbeiten.
    Das geht auch, du läst bei einfach die anweisung "spa work" fehlen.
    Wie die STEP.Nr bzw. deine Job_ID bearbeitet werden soll müsesen wir
    dann noch ermitteln

    Code:
     
    STEP: L     #STEP.Nr
          SPL   SE
          SPA   S0                          
          SPA   S1                     
          SPA   S2                        
          SPA   S3                       
          SPA   S4                       
          SPA   S5                       
          ..usw..
          SPA   SEND                        
    SE:   NOP   0
          SPA   work
     
     
    S0:  ..was immer
           ausgeführt
           werden soll..
     
     
     
    S1:  ..was immer
           ausgeführt 
           werden soll..
     
     
     
          ...usw...
     
    work:
    Das kann erst nur mal zur annäherung angenommen werden, weil ich
    noch nicht so richtig verstanden habe wo du hin möchtest.

    gruß helmut
    Ich bin noch in der Lern-Phase für die Sprungliste...
    was bedeutet, daß ich sicher noch einige Fragen haben werde, z.Zt. aber erst mal schaue, wie weit ich selbst komme.

    Die TEMP- Var #Step.No ist eine normale Variable oder ein Pointer oder so'n Zeug ???

    Mit dem Punkt im Namen... da habe ich ein Verständigungsproblem.

    Bei TPascal oder BPascal wurden Zeiger immer mit ^ gekennzeichnet.
    Ich meine... dieser Punkt bei #Step.No hat in irgendeiner, von mir gesichteten Prg.-Sprache irgendwo eine besondere Bedeutung.... ich komme nur eben grad' nicht drauf, ob ich da bei s7 einfach was verwechsle...

    (z.Zt. komme ich jedenfalls mit dem SPL- Befehl noch gar nicht klar )


    Mfg

  11. #18
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von mega_ohm Beitrag anzeigen
    Die TEMP- Var #Step.No ist eine normale Variable oder ein Pointer oder so'n Zeug ???

    Mit dem Punkt im Namen... da habe ich ein Verständigungsproblem.
    Hallo Mega_ohm,

    der Punkt entsteht z.B. durch die Structurierte Schreibweise in einem Datenbaustein.

    L "DB_005".Prozesswerte.Sollwerte.Motordaten.Geschwindigkeit
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  12. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    mega_ohm (20.09.2009)

  13. #19
    Registriert seit
    13.10.2007
    Beiträge
    12.032
    Danke
    2.787
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Hallo mega_ohm,
    STEP.Nr ist eine normale Variable, sollte aber Statisch sein nicht Temponär,
    wie Merker oder Statische Datenbaustein-Variable. Hier im beispiel ist sie
    nur Symbolisch dargestellt.
    Der Punkt im namen zeigt das diese Variable ein Teil eines Struct ist, mein
    Struct enthält alle Variablen die ich für den Sprungverteiler verwende.

    Mal etwas allgemeines zum Sprungverteiler. Der Sprungverteiler SPL gestattet
    das gezielte (berechnen) Springen zu einm Programmteil im Baustein ab-
    hängig von eine Sprungnummer, die in unseren Beispiel in der Variablen
    "STEP.Nr" steht.
    SPL arbietet mit einer Liste aus SPA-Sprungfunktionen zusammen. Diese Liste
    steht unmittlebar nach SPL und kann maximal 255 Einträge lang sein. Bei SPL
    steht eine Sprungmarke die auf das Ende der Liste (auf die erset An-
    weisung nach der Liste) zeigt.
    Einen Sprungverteiler programmiert man nach folgenden Schema:
    Code:
            L     STEP.Nr
            SPL  ENDE
            SPA  M0
            SPA  M1
             ...
            SPA  Mx
    ENDE: ...
    Im Beispiel lädt die Variable STEP.Nr eine Nummer in den Akkumulator 1.
    Anschließend steht der Sprungverteiler SPL mit der Sprungmarke ans
    Ende der Liste aus SPA-Anweisungen.
    Die Nummer des auszuführenden Sprungs steht im rechten Byte des
    Akkumulator 1. Steht "0" im Akku 1 wird die erste Sprunganweisung ,
    bei "1" die zweite usw. Ist die Nummer größer als die Länge der Liste
    verzweigt SPL zum Ende der Liste (zur Anweisung, die nach dem letzten
    Sprung steht).
    SPL ist unabhängig vom Bedingungen und verändert die Statusbits nicht.
    In der Liste dürfen nur SPA-Anweisungen lückenlos stehen. Die
    Bezeichnungen der Sprungmarken können im Rahmen der der allgemeinen
    Bestimmungen beliebig vergeben werden.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  14. Folgender Benutzer sagt Danke zu rostiger Nagel für den nützlichen Beitrag:

    mega_ohm (20.09.2009)

  15. #20
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    habe sowas schon häufiger gemacht...

    also ich mache das in etwa so:

    als erstes gibt es einen udt mit einem bit für jeden aktor der von der schrittkette manipuliert werden soll, dann noch sollweerrte für geschwindigkeiten, positionen,... im jeweile benötigten zahlenformat.

    dann gibt es noch einen int für die weiterschaltbedingung, je nach art der möglichen weiterschaltbedinungen gibt es noch mehr variablen.

    dieser udt wird als array in einem db so oft aufgerufen wie du maximal schritte haben willst.

    in deiner visu hast du bouttons, dropdownfelder,... die indirekt abhängig von der schrittnummer auf das entsprechende arrayfeld zugreifen.

    jetzt kannst du für jede schrittnummer sagen welcher aktor wie wohin fahren soll.

    dann mus noch ne weiterschaltbedinung gewählt werden, auswahl zb über dropdownfeld das einen entsprechende zahl in den int schreibt.

    weiterschaltbediungenen z.b.
    1 = ber zeit (zeitwert in einen weitere variable
    2 = anzahl zyklen (wenn du in einem schritt irgendwas toggeln lässt)
    3 = strecke (wenn eine achse einen bestimmten weg gefahren ist
    4 = sensor (wenn ein bestimmtes signal kommt)
    ...


    wenn nun alle nötigen schritte parametriert sind, dann muss die maximale schrittnummer noch angepasst werden, wenn du also maximal 30 schritte ermöglichst, aber der bediener für seine aufgabe nur 13 braucht, dann muss die schrittnummer maximal (int) auf 13 geschreiben werden, damit die steuerung weiß wann sie die schrittnummer nach erfolgter weiterschaltbedinung nicht mehr erhöhen muss, sondern der ablauf beendet ist...
    alternativ zur maximalen schrittnummer kannst du auch ein weiteres bit in den schritdatensatz machen, wenn das in einem schrit gesaetzt ist, dann ist das das ende der schrittkette.

    wenn das aber einer vergisst, und ein schrittdatensatz aufgerufen wird der "müll" enthält ist das vermutlich nicht gut...

    im anahng noch ein screen von einer visu.
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg 3.jpg (75,7 KB, 100x aufgerufen)
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  16. Folgender Benutzer sagt Danke zu Markus für den nützlichen Beitrag:

    mega_ohm (23.09.2009)

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 16.03.2012, 18:20
  2. Antworten: 6
    Letzter Beitrag: 18.05.2011, 13:45
  3. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  4. Antworten: 2
    Letzter Beitrag: 14.12.2007, 15:09
  5. Antworten: 4
    Letzter Beitrag: 29.11.2006, 08:59

Lesezeichen

Berechtigungen

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