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

Seite 7 von 7 ErsteErste ... 567
Ergebnis 61 bis 68 von 68

Thema: Todes-Schleife...

  1. #61
    Registriert seit
    08.12.2006
    Ort
    Kleinwallstadt
    Beiträge
    90
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ok, findest du aber nicht auch das eine Schleife von 100 Zyklen eine CPU nicht zum Stop bringen sollte?!

    Ich mein, es sind im Endeffekt 100x das gleiche... L L +I T... also... würde mich stutzig machen.

    Kommunikation steht bei uns auf 20 oder 10 Prozent.

    Ich will doch eigentlich nur ne Plausible erklärung wieso ich gugn darf und die anderen net....
    Fühl mich ja geehrt aber Toll isses net unbedingt....
    Das Softwarebusiness ist Binär, du bist eine 1 oder eine 0 - Lebendig oder Tod...

  2. #62
    Registriert seit
    08.12.2006
    Ort
    Kleinwallstadt
    Beiträge
    90
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Sorry... habs grad nochma durchgelesen deinen Text...

    Hast du den FC7 nun mal unbeobachtet gelassen oder nicht? Versuch das mal ohne den FC7 zu beobachten. Einfach auf Run und gugn obs Run bleibt STRG + D

    Bei Stop -> STRG + I und Neustart
    Das Softwarebusiness ist Binär, du bist eine 1 oder eine 0 - Lebendig oder Tod...

  3. #63
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Nachtrag: habe die HW-Konfig aufgeräumt, alle Profibus-Teilnehmer (waren nicht angeschlossen raus. CPU Einstellungen auf Standard.
    Den OB1 aufgeräumt, da steht jetzt nur noch der Aufruf des FC7 drin.
    100 geht nicht, 50 geht.
    Konstante für Schleifenende durch MW ersetzt. So kann ich die Schleifendurchläufe vom OB1 aus steuern.
    Ohne den FC7 zu beobachten gehen auch 16000. Zykluszeit 121H. Allerdings geht die CPU bei der Funktion "erreichbare Teilnehmer" auf STOP. (Wollte das tun, weil in der CPU noch andere Baustein, z.B. der OB80 sind. Die wollte ich aus "erreichbare Teilnehmer/Baustein löschen".
    OB80 und (OB35 der kostet ja eventuell auch Rechenzeit) rausgschmissen.
    Ohne OB80: 8000 Schleifen geht, bei 9000 geht die CPU auf Stop. max.Zykluszeit bei 8000 92h=146, Grenze in HW-Konfig 150, das paßt schon.
    Weitere Erkenntnis: Die Anwesenheit des OB80 reichte aus. Allerdings darf er ja nicht ohne weiteres mehrmals pro Zyklus aufgerufen werden.
    Zielsystem Urgelöscht, nur OB1 und FC7 geladen.
    8000 Schleifen geht, bei 9000 geht die CPU auf Stop.
    OB80 hinzugefügt.
    16000 Schleifen geht, bei 20000 geht die CPU auf Stop.
    Im OB80 den SFC43 aufgerufen.
    20000 Schleifen geht. max. Zykluszeit 163h
    32760 Schleifen geht. max. Zykluszeit 23eh
    100 Schleifen mit Beobachten des FC7 geht nun auch.
    Wenn die Schleife mit beobachtet wird, ist das Beobachten enorm langsam (subjektiv, Fortschritt des grünen Balkens).
    Max.Zykluszeit für 100 Durchläufe wenn der FC7 beobachtet wird: 163h.
    Die CPU ist 6ES7-2AF03-0AB0, Hardware 1, Firmware 1.2.0.
    Max.Zykluszeit für 1000 Durchläufe wenn der FC7 beobachtet wird: df0h, das sind 3.5 Sekunden.
    20000 Durchläufe mit beobachten: Die CPU bleibt in RUN. Das Beobachten funktioniert eigentlich nicht mehr, da Step7 meldet, die Anweisungen würden nicht bearbeitet. Der Diagnosepuffer meldet alle 150ms Zykluszeitübeschreitung und addiert die gesamte Zeit auf. Das geht bis in die 42 Sekunden.
    Fazit: Mit einem OB80 der SFC43 aufruft, kannst du das Aussteigen der CPU verhindern. Ob du aber etwas steuerst, was wegen der Zykluszeiterhöhung durch beobachten schiefgeht, mußt du selbst wissen.
    Am Ende könnte es sinnvoll sein, diesen Baustein zu "schützen", damit ihn niemand aus versehen beobachtet...

  4. #64
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Ändert sich denn etwas wenn die CPU auf Prozessbetrieb steht und der Parameter für die max. Zykluszeitverlängerung entsprechend gesetzt ist?

    Auf der Siemens Seite (Beitrag 23836167) steht dass bei Schleifen vor jedem Schleifendurchlauf der Status beim Beobachten aktualisiert wird.

  5. #65
    Registriert seit
    08.12.2006
    Ort
    Kleinwallstadt
    Beiträge
    90
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Ausrufezeichen

    @Zottel:
    Danke, endich einer wo es mal probiert, also ist die Baustelle nicht verflucht sondern es scheint ansatzweise "normal" zu sein.
    Nun ist halt die Frage "was ist an meinem Rechner 'unnormal'?" Ich bin bisher der einzige wo es beobachten kann, was ich ja nicht verstehe.

    Desweiteren habe ich dieses "Schleife-Aussteig-Problem" noch nie erlebt... weil ich oft gezwungenermaßen Schleifen verwenden muss um bestimmte Problemchen zu lösen. Und diese Schleifenvorgänge sind bedeutend komplexer und bringen die CPU auch nicht ins Schwitzen (ob beobachtet oder nicht (also bei meinem Rechner jedenfalls)).
    Das was ich da oben geschrieben habe an Schleife ist ein Witz...

    Hier mal ein Auszug von einem Teilprogramm (jaaaa, da sind die U( ) drin :P):

    [Siehe Folge-Post]

    Hmm... sollte ich mal bei Siemens anrufen und nach einer Erklärung/Begründung anfragen. Weil es mir ja doch sorgen macht das ich Bausteine schreibe wo 99% der Restlichen SPS-Bevölkerung nicht Anschauen darf da sonst die CPU in Stop geht

    Mit freundlichen Grüßen,
    Hawkster
    Das Softwarebusiness ist Binär, du bist eine 1 oder eine 0 - Lebendig oder Tod...

  6. #66
    Registriert seit
    08.12.2006
    Ort
    Kleinwallstadt
    Beiträge
    90
    Danke
    4
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Code:
          NOP   0
    //#############################################################
    //### Wenn Stage 6 aktiv
    //###  -> Netzwerk aktiviern
    //#############################################################        
          U     #Stage_6.Stage_Start
          SPB   SST6
          SPA   EST6
    
    SST6: NOP   0
    
          L     1
          T     #Schleife.Zaehler
    
    L150: NOP   0
    //#############################################################
    //### START:  Loetpunkte aufsplitten
    //#############################################################        
    
    //#############################################################
    //### QUELLE: Errechnen der Stelle im Stage 5-Block für Datensatz
    //#############################################################        
          L     #Schleife.Zaehler
          L     1                           //=> Zähler wird bei 1 Initailisert, deswegen 0 für Multiplikator
          -I    
          L     "DB_Sold_Mgr_1".Parameter.Loetpunkt_Groesse    //==> Speichergröße (100 Byte pro Datensatz)
          *I    
          L     "DB_Sold_Mgr_1".Parameter.Stage_5_Startbyte    //==> Startbyte (Byte 332)
          +I    
          T     #Stage_6.src_Addresse_Offset
    
    //#############################################################
    //### QUELLE: Aufbau des Ziel-Any-Pointers
    //#############################################################        
          L     P##src_Any_Pointer
          LAR1  
    
          L     W#16#1002                   //Typ BYTE
          T     LW [AR1,P#0.0]
    
          L     "DB_Sold_Mgr_1".Parameter.Loetpunkt_Groesse    //Anzahl Bytes
          T     LW [AR1,P#2.0]
    
          L     "DB_Sold_Mgr_1".Parameter.Temp_Job_DB    //Ziel-DB
          T     LW [AR1,P#4.0]
    
          L     #Stage_6.src_Addresse_Offset    //Anfang der Quelle
          SLD   3
          OD    DW#16#84000000
          T     LD [AR1,P#6.0]
    
    //#############################################################
    //### ZIEL: Errechnen der Stelle im Stage 6-Block für Datensatz
    //#############################################################        
          L     50                          //<== Größe eines auftrags
          L     2
          *I    
          T     #Stage_6.dest_Data_Size     //<== Loetpunkt stellt 2 Aufträge das
    
          L     #Schleife.Zaehler
          L     1                           //=> Zähler wird bei 1 Initailisert, deswegen 0 für Multiplikator
          -I    
          L     #Stage_6.dest_Data_Size     //==> Speichergröße (100 Byte für 2 Aufträge)
          *I    
          L     "DB_Sold_Mgr_1".Parameter.Stage_6_Startbyte    //==> Startbyte (Byte 6832)
          +I    
          T     #Stage_6.dest_Addresse_Offset
    
    //#############################################################
    //### ZIEL: Aufbau des Ziel-Any-Pointers
    //#############################################################        
          L     P##dest_Any_Pointer
          LAR1  
    
          L     W#16#1002                   //Typ BYTE
          T     LW [AR1,P#0.0]
    
          L     #Stage_6.dest_Data_Size     //Anzahl Bytes
          T     LW [AR1,P#2.0]
    
          L     "DB_Sold_Mgr_1".Parameter.Temp_Job_DB    //Ziel-DB
          T     LW [AR1,P#4.0]
    
          L     #Stage_6.dest_Addresse_Offset    //Anfang der Quelle
          SLD   3
          OD    DW#16#84000000
          T     LD [AR1,P#6.0]
    
    
    
    //#############################################################
    //### Daten temp. Zwischenspeichern
    //#############################################################        
          CALL  "BLKMOV"
           SRCBLK :=#src_Any_Pointer
           RET_VAL:=#Stage_6.BLKMOV_Return
           DSTBLK :="DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Original
    
    //#############################################################
    //### Orignal-Daten aufsplitten und speichern in Auftrags-Daten
    //#############################################################        
          L     0
          T     #Clear_Int
    
          CALL  "FILL"
           BVAL   :=#Clear_Int
           RET_VAL:=#iDummy
           BLK    :="DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera
    
          CALL  "FILL"
           BVAL   :=#Clear_Int
           RET_VAL:=#iDummy
           BLK    :="DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser
    
    //#############################################################
    //### Kamera-Daten
    //#############################################################        
          SET  
          S     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera.Kamera.Kamera_Punkt
    
          L     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Original.Kamera.Roboter_Index_Nummer
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera.Kamera.Roboter_Index_Nummer
    
          L     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Original.Kamera.Kamera_Prog
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera.Kamera.Kamera_Prog
    
    //#############################################################
    //### Laser-Daten
    //#############################################################        
          SET  
          S     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Laser.Laser_Punkt
    
          L     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Original.Laser.Roboter_Index_Nummer
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Laser.Roboter_Index_Nummer
    
          L     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Original.Laser.Laser_Dummy_Nr
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Laser.Laser_Dummy_Nr
    
          U     "DB_Sold_Mgr_1".Berechnung.Nachloeten
          SPB   NL_1
          UN    "DB_Sold_Mgr_1".Berechnung.Nachloeten
          SPB   NL_0
          SPA   NL_E
    
    NL_1: NOP   0                           //<== Nachloeten ist aktiv!
    
          L     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Original.Laser.Laser_Nachloeten_Nr
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Laser.Laser_Scharf_Nr
    
          SPA   NL_E
    
    NL_0: NOP   0                           //<== Nachloeten ist Inaktiv!
    
          L     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Original.Laser.Laser_Scharf_Nr
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Laser.Laser_Scharf_Nr
    
          SPA   NL_E
    
    NL_E: NOP   0
    
    //#############################################################
    //### Auftragsmuster beschreiben
    //###   -> Auftragsmuster wird Anhand der Daten von Stage_1_Stage_2 errechnet
    //#############################################################  
    
          L     #Schleife.Zaehler
          L     1
          -I    
          L     2                           //==> Speichergröße (2 Byte)
          *I    
          L     4                           //==> Startbyte (Byte 4)
          +I    
          L     P#1.0                       //==> Ins Pointer-Format bringen
          *D    
          T     #Stage_6.Offset_Auftrag_Pointer    //<== Pointer vom Ziel der Addresse
    
          AUF   "DB_Sold_Mgr_1_Job_1"
          L     DBW [#Stage_6.Offset_Auftrag_Pointer]
          L     #Daten_Allgemein.Arbeitsbereich_Startbyte
          -I    
          T     #Stage_6.Offset_Auftrag
    
          L     #Stage_6.Offset_Auftrag
          L     100
          /I    
          L     1
          -I    
          T     #Stage_6.Schiebewert_Muster
    
    //#############################################################
    //### ENTSCHEIDUNG: Schiebewert größer als ein DW
    //###   -> Auftragsmuster 1_2 löschen und mit 2_2 fortsetzen
    //#############################################################  
          U(    
          L     #Stage_6.Schiebewert_Muster
          L     31
          <=I  
          )    
          SPB   A1_2
          SPB   A2_2
    
    A1_2: NOP   0
    
          L     #Stage_6.Schiebewert_Muster
          L     "DB_Sold_Mgr_1".Berechnung.Auftragsmuster_1_2
          SRD  
          SLD  
          T     #Stage_6.Auftragsmuster_1_2
    
          L     #Stage_6.Auftragsmuster_1_2
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera.Auftragsmuster_1_2
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Auftragsmuster_1_2
    
          L     "DB_Sold_Mgr_1".Berechnung.Auftragsmuster_2_2
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera.Auftragsmuster_2_2
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Auftragsmuster_2_2
    
    
          SPA   AEND
    
    A2_2: NOP   0
    
          L     #Stage_6.Schiebewert_Muster
          L     32
          -I    
          L     "DB_Sold_Mgr_1".Berechnung.Auftragsmuster_2_2
          SRD  
          SLD  
          T     #Stage_6.Auftragsmuster_2_2
    
          L     0
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera.Auftragsmuster_1_2
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Auftragsmuster_1_2
    
          L     #Stage_6.Auftragsmuster_2_2
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Kamera.Auftragsmuster_2_2
          T     "DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert.Laser.Auftragsmuster_2_2
    
    
          SPA   AEND
    
    
    AEND: NOP   0
    
    
    //#############################################################
    //### Daten temp. Zwischenspeichern
    //#############################################################        
          CALL  "BLKMOV"
           SRCBLK :="DB_Sold_Mgr_1_Job_1".Stage_6_Temp.Modifiziert
           RET_VAL:=#Stage_6.BLKMOV_Return
           DSTBLK :=#dest_Any_Pointer
    
    
    //#############################################################
    //### Ende:   Umkopieren der Loetpunkte
    //#############################################################        
          U(    
          O(    
          L     #Schleife.Zaehler
          L     64
          >=I  
          )    
          O(    
          L     #Schleife.Zaehler
          L     "DB_Sold_Mgr_1_Job_1".Stage_1_Stage_2.Letzter_Datensatz
          >=I  
          )    
          )    
          SPB   E150
    
          L     #Schleife.Zaehler
          L     1
          +I    
          T     #Schleife.Zaehler
    
          SPA   L150
    
    E150: NOP   0
    
          SET  
          S     "DB_Sold_Mgr_1".Status.Stage_6_Fertig
    
          U     "DB_Sold_Mgr_1".Parameter.Stage_6_BEA
          BEB  
    
    
    EST6: NOP   0
    Das Softwarebusiness ist Binär, du bist eine 1 oder eine 0 - Lebendig oder Tod...

  7. #67
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Hawkster Beitrag anzeigen
    @Zottel:
    Nun ist halt die Frage "was ist an meinem Rechner 'unnormal'?" Ich bin bisher der einzige wo es beobachten kann, was ich ja nicht verstehe.
    Das Beobachten funktioniert ungefähr so:
    - Das PG teilt der CPU die Adresse mit, ab der beobachtet werden soll.
    - Die CPU speichert die Registerinhalte, die sich beim Ausführen jeder Anweisung ergeben. Das tut sie im Normalbetrieb nicht.
    - Das PG fordert periodisch so einen Auszug an
    Was ich nicht weiß, ist:
    Was macht die CPU
    - In Schleifen. Normalerweise beschränkt sich die Anzahl der "beobachteten" Anweisungen mehr oder weniger auf den Code im sichtbare Fenster. Weiß nicht, woher die kommt, ob das PG eine Endadresse, eine Anzahl von Anweisungen vorgibt, oder die CPU ein Limit hat oder was auch immer.
    Reine Spekulation: In Schleifen könnte es wohl sein, daß die CPU pro Ausführung speichert. Möglicherweise wird für ein "langsames" PG die Liste sehr lang und die CPU muß irgendwelchen Aufwand zum Speichermanagement betreiben.
    Zitat Zitat von Hawkster Beitrag anzeigen
    Hier mal ein Auszug von einem Teilprogramm (jaaaa, da sind die U( ) drin :P):
    Nützt nicht ganz viel: Wegen der ganzen symbolischen Namen & UDTs läßt sich das nicht ohne Kontext übersetzen...
    Zitat Zitat von Hawkster Beitrag anzeigen
    Hmm... sollte ich mal bei Siemens anrufen und nach einer Erklärung/Begründung anfragen. Weil es mir ja doch sorgen macht das ich Bausteine schreibe wo 99% der Restlichen SPS-Bevölkerung nicht Anschauen darf da sonst die CPU in Stop geht
    Ja wäre interessant. Zum Abschluß: Ich habe mit IBH-Link und MPI-Baudrate 187,5k getestet. Man könnte die MPI Baudrate reduzieren, um ein "langsameres" PG zu simulieren.

  8. #68
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Ändert sich denn etwas wenn die CPU auf Prozessbetrieb steht und der Parameter für die max. Zykluszeitverlängerung entsprechend gesetzt ist?
    Ich habe mal Prozessbetrieb eingestellt.
    Mit "zulässige Verlängerung"
    5 ms kann ich aus "Beobachten" keine Variable mehr steuern, Meldung "D0AA, Zeitlimit aus Prozessbetrieb überschritten"
    15ms: dasselbe.
    40ms: Ich kann steuern, beobachten, 8000 Durchläufe gehen, 9000 bringen den STOP.

Ähnliche Themen

  1. While Schleife in ST
    Von Snooky im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 30.11.2010, 21:50
  2. for-Schleife
    Von fai004 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 26.04.2009, 19:14
  3. FOR Schleife
    Von dietere im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 19.01.2008, 02:36
  4. For Schleife in VB 6
    Von godi im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 14.06.2007, 10:03
  5. AWL Schleife
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 31.07.2003, 07:05

Lesezeichen

Berechtigungen

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