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

Ergebnis 1 bis 5 von 5

Thema: Any Pointer - Zykluszeit

  1. #1
    Registriert seit
    05.10.2006
    Beiträge
    324
    Danke
    11
    Erhielt 8 Danke für 7 Beiträge

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Abend,

    wir entwickeln im Moment einen Standard für unsere Rundläuferanlagen. Diese bestehen immer aus dem Rundläufer selbst und einer differierenden Zahl an Zuführungen. Der Rundläufer ist physikalisch Abhängig vom Zustand der Zuführungen.

    Die Zuführungen selbst bestehen aus Förderbändern etc.

    unser Standard ist aufgedröselt bis zur kleinsten Komponente z.b ein 2 spuliges Ventil mit 2 Endlagen ist ein FB. In diesem FB werden dann die Ansteuerungen der Spulen, Laufzeitüberwachung, Status, etc bearbeitet.

    In einem global DB gibt es für jede Komponente 3 Strukturen welche über udts definiert sind, "Status, Meldungen, Störungen" z.b für die Visu.

    Desweiteren gibt es einen Betriebsarten DB welcher auch über eine Udt definiert ist.

    Für die Zuführung gibt es ebenfalls einen Global dB, auch über eine udt definiert.

    Für eine Zuführung habe ich dann einen FB geschrieben welcher die einzelnen Komponenten aufruft z.b. Förderband1, Zylinder, Förderband2 etc.

    Diesem Zuführungs FB übergebe ich dann 4 Any Pointer als in-Out. Einen auf den Komponenten DB für Förderband1, einen für Zylinder, einen für die Betriebsarten und einen für den Zuführungsstatus. Im Zuführungs FB kopiere ich die Any Pointer auf Lokaldaten ( temporäre any Pointer) und übergebe diese dann an den jeweiligen Komponenten fb (z.b. Förderband1) welcher als Instanz im Zuführungs fb angelegt ist. Dasselbe dann für alle Komponenten und Betriebsarten sowie den Zuführungsstatus!

    Ich hoffe das ist für euch einigermaßen verständlich gar nicht so einfach zu erklären.

    Meine Frage ist nun ob das Zerlegen der any Pointer auf Lokaldaten und Übergabe an die Instanz fbs und das weitere Zerlegen in diesen, meine Zykluszeit belastet? Mit PLCSIM hatte ich bei nur einem Zuführungs FB schon ca 15ms Zykluszeit....aber kann man das auf reale CPUs übertragen?

    Und würdet ihr an der Gesamtstruktur etwas ändern oder findet ihr das gelungen gelöst?

    Eure Meinung ist sehr interessant für mich!

    Grüße Pico
    Geändert von Pico1184 (14.06.2013 um 08:02 Uhr)
    Zitieren Zitieren Any Pointer - Zykluszeit  

  2. #2
    Pico1184 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.10.2006
    Beiträge
    324
    Danke
    11
    Erhielt 8 Danke für 7 Beiträge

    Standard

    ich zeig euch mal hier ein beispiel:

    FB für eine Komponente (Zylinder Förderband etc)
    Code:
    IN_OUT:
    IO_ANY_Komponente : ANY
    IO_ANY_Betriebsarten : ANY
    
          TAR2  
          T     #T_DW_AR2_Backup         // Sichern des Adressregister 2
          L     DW#16#FFFFF                 // nicht relevante Bits ausblenden
          UD    
          T     #T_DW_Instanzanfang         // Instanzanfang
    
          L     P##IO_ANY_Komponente
          +D    
          LAR2                              // Zeiger AR2 auf DB setzen
          L     W [AR2,P#4.0]               // und auslesen
          T     #T_IN_DB_Komponente         // Komponenten DB aufschlagen
          AUF   DB [#T_IN_DB_Komponente]
    
          L     D [AR2,P#6.0]               // Zeiger AR2 auf DW setzen
          T     #T_DW_Dat_Komponente
          LAR2  
    
          L     P##Status_Komponente        // Zeiger AR1 auf temporäre UDT setzen
          LAR1  
    
          L     W [AR2,P#0.0]               //Kopiere Status
          T     W [AR1,P#0.0]
          L     W [AR2,P#2.0]               //Kopiere Messages
          T     W [AR1,P#2.0]
          L     W [AR2,P#4.0]               //Kopiere Errors
          T     W [AR1,P#4.0]
          L     W [AR2,P#6.0]               //Kopiere Merker
          T     W [AR1,P#6.0]
          L     W [AR2,P#8.0]               //Kopiere Status VISU
          T     W [AR1,P#8.0]
    
    
    //Aufsplitten in Unterstrukturen
          L     #T_DW_Instanzanfang
          L     P##Messages                 //Lade Messages
          +D    
          LAR1  
    
          L     #T_DW_Instanzanfang
          L     P##Status_Komponente        //Lade lokale Struktur
          +D    
          LAR2  
    
          L     W [AR2,P#2.0]               //Kopieren in Struktur
          T     W [AR1,P#0.0]
    
          L     #T_DW_Instanzanfang
          L     P##Errors                   //Lade Errors
          +D    
          LAR1  
    
          L     W [AR2,P#4.0]               //Kopieren in Struktur
          T     W [AR1,P#0.0]
    
          L     #T_DW_Instanzanfang
          L     P##Merker                   //Lade Merker
          +D    
          LAR1  
    
          L     W [AR2,P#6.0]               //Kopieren in Struktur
          T     W [AR1,P#0.0]
    
          L     #T_DW_Instanzanfang
          L     P##Status_Visu              //Lade Status VISU
          +D    
          LAR1  
    
          L     W [AR2,P#8.0]               //Kopieren in Struktur
          T     W [AR1,P#0.0]
    
    //Betriebsarten
          L     #T_DW_Instanzanfang
          L     P##IO_ANY_Betriebsarten
          +D    
          LAR2                              // Zeiger AR2 auf DB setzen
          L     W [AR2,P#4.0]               // und auslesen
          T     #T_IN_DB_Betriebsarten      // DB für Betriebsarten aufschlagen
          AUF   DB [#T_IN_DB_Betriebsarten]
    
          L     D [AR2,P#6.0]               // Zeiger AR2 auf DW setzen
          T     #T_DW_Dat_Betriebsarten
          LAR2  
    
          L     P##Betriebsarten            // Zeiger AR1 auf T_UDT setzen
          LAR1  
    
          L     D [AR2,P#0.0]
          T     D [AR1,P#0.0]
          L     W [AR2,P#4.0]
          T     W [AR1,P#4.0]
          L     W [AR2,P#6.0]
          T     W [AR1,P#6.0]
          L     W [AR2,P#8.0]
          T     W [AR1,P#8.0]
          L     W [AR2,P#10.0]
          T     W [AR1,P#10.0]
          L     W [AR2,P#12.0]
          T     W [AR1,P#12.0]
          L     W [AR2,P#14.0]
          T     W [AR1,P#14.0]
          L     D [AR2,P#16.0]
          T     D [AR1,P#16.0]
    
          LAR2  #T_DW_AR2_Backup         // Rücksichern Adressregister 2
    
    ........
    Komponenten DB:
    Code:
    Foerderband_1 : "UDT_Komponente"
    Zylinder_1 : "UDT_Komponente"
    Foerderband_2 : "UDT_Komponente"
    Betriebsarten DB:
    Code:
    Rundlauferanlage : "UDT_Betriebsarten"
    Zuführungs DB:
    Code:
    Zuführung_1 : "UDT_Zuführung"
    Zuführungs FB:
    Code:
    IN_OUT:
    IO_ANY_Foerderband_1: ANY
    IO_ANY_Zylinder: ANY
    IO_ANY_Foerderband_2: ANY
    IO_ANY_Betriebsarten : ANY
    IO_ANY_Zufuehrung : ANY
    
    .....
    kopieren aller in_out auf temp any oder temporäre UDT (Zuführung + Betriebsarten)
    .....
    
    call Foerderband_1
          IO_ANY_Komponente:=T_ANY_Foerderband_1
          IO_ANY_Betriebsarten:=T_ANY_Betriebsarten
    
    call Foerderband_2
          IO_ANY_Komponente:=T_ANY_Foerderband_2
          IO_ANY_Betriebsarten:=T_ANY_Betriebsarten
    
    call Zylinder
          IO_ANY_Komponente:=T_ANY_Zylinder
          IO_ANY_Betriebsarten:=T_ANY_Betriebsarten
    
    .....
    Hoffe es ist so etwas verständlicher!

    Grüße Pico

  3. #3
    Registriert seit
    09.08.2006
    Beiträge
    3.627
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Zitat Zitat von Pico1184 Beitrag anzeigen
    Mit PLCSIM hatte ich bei nur einem Zuführungs FB schon ca 15ms Zykluszeit....aber kann man das auf reale CPUs übertragen?
    Nee, das kannst Du nicht übertragen. Welche CPU willst Du denn einsetzen?

    Allgemein: Es ist in aller Regel wichtiger, dass das Programm gut lesbar ist, anstatt es auf Zykluszeit zu optimieren. Bei Notwendigkeit lieber ne größere CPU nehmen.

    Erst wenn die Zykluszeit für Deine Anwendung/Aufgabe zu lang wird, entsteht Handlungsbedarf.

    Gruß

  4. #4
    Pico1184 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.10.2006
    Beiträge
    324
    Danke
    11
    Erhielt 8 Danke für 7 Beiträge

    Standard

    Welche CPU willst Du denn einsetzen?
    Wir setzen meistens eine 315F-2 PN/DP ein. Mit 512kbyte MMC und aktiviertem Webserver bzw aktiviertem Sicherheitsbetrieb.

    Mir ging es auch generell darum mal eine Bewertung von euch zu bekommen, ob so ein Strukturaufbau sinnvoll ist und ob ihr das auch so ähnlich realisiert.

    Ich finde das so eigentlich ziemlich gelungen, da wir hier Standardbausteine für jegliche Komponenten einer Anlage abgebildet haben (Ventile, Antriebe etc) und aus diesen einzelnen Komponenten dann komplette Anlagenbereiche abgebildet werden können.

    Gerade bei uns im Sondermaschinenbau können die Anlagenfunktionen immer ziemlich unterschiedlich sein, aber die Software sollte doch so ausgelegt sein, um wirklich mit minimalem Aufwand ein gutes übersichtlich strukturiertes Programm vorzufinden und um auch auf die verschiedenen Anforderungen leicht reagieren zu können!

    Grüße Pico
    Geändert von Pico1184 (16.06.2013 um 12:21 Uhr)

  5. #5
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wir nutzen in Teilen ein ähnliches System.
    Zyklus ist bei uns meist kein Thema. Zum Kopieren der Daten verwenden wir SFC20 Blockmove.
    Damit kannst du - wenn du deine Strukturen bzw. UDTs sauber aufbaust - viel Zeit sparen und zudem ist es weniger fehlerträchtig.

    Ein ganz wichtiger Punkt:
    Bevor du überhaupt mit dem System anfängst, ist ein DURCHGÄNGIGES Bezeichnungssystem notwendig.
    Ein Instandhalter kann bei so einem System nicht mehr einfach im Programm nach der Verwendung von von Ein- oder Ausgängen suchen und so den Fehler finden. Deshalb müssen deine Bewegungen eindeutig identifizierbar sein. Vom Schaltplan bis ins letzte Datenbit im SPS-Programm.

    Gruß
    Dieter

Ähnliche Themen

  1. Pointer als IN (FC/FB) wieder übergeben als Pointer
    Von saarlaender im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 18.06.2012, 11:47
  2. Zykluszeit
    Von Maurice im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 17.09.2011, 15:19
  3. S7 LAR P##... --- pointer auf pointer
    Von milmu im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.11.2010, 17:39
  4. Zusammenhang Zykluszeit Profibus Zykluszeit SPS
    Von Peltzerserbe im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 28.04.2008, 22:09
  5. Zykluszeit in S5
    Von PeterPan im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.05.2006, 17:12

Lesezeichen

Berechtigungen

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