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

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 52

Thema: Großen FB in 2 Teile splitten - knifflig.

  1. #1
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich bin jetzt das erste mal über die 16kB Limitierung gestolpert die für Bausteine gilt wenn eine CPU kleiner 317 verwendet wird.

    Für die die das noch nicht wissen:

    Die SIMATIC (egal ob 300 oder 400) hat eine generelle begrenzung für einzelne Bausteine auf 64kB. Dies geht bei der CPU 317 los und geht bis zur größten 400er. Die CPUs 315 und kleiner sind pro Baustein auf 16kB begrenzt - und hier liegt jetzt mein Problem...

    Ich habe einen FB mit ziemlich umfangreicher Schnittstelle und sehr viel Code als eine Art "Black-Box" gebaut - d.h. er hat viele Optionen die nicht immer gebraucht werden aber von aussen über die Schnittstelle aktiviert werden können.

    Dieser beinhaltet auch eine Schrittkette auf Basis einer Wortvariable (Schrittnummer).

    Da das gute Stück von Projekt zu Projekt stetig wächst (immer mehr Optionen kommen hinzu) und ich eigentlich schon das ganze am stück behalten will weil es einfach besser zu pflegen ist stehe ich nun vor dem Problem dass ich ihn nicht mehr in eine 315er reinkriege - diese würde aber dieses mal reichen weil es verhälnismäßig wenig optionen sind, ein großteil also nicht genutzt wird.

    Ich habe schon Überlegungen angestrengt bestimmte Teilfunktionen auszulagern - aber gerade diese bringen Speicherplatztechnisch am wenigsten.

    Ich müsste also die Schrittkette splitten.

    Angenommen es sind 100 Schritte und 50 davon packe ich in einen neuen FB, wie wäre jetzt die optimale Vorgehensweise die beiden Schnittstellen zu gestalten daß das ganze nachher noch so läuft als wäre es im selben FB ?

    Die Schlüsselvariable wäre wohl die Schrittnummer - diese könnte z.B. in ein Merkerwort verlagert werden und an beiden FBs als IN_OUT Parameter gesetzt werden.

    Aber da sind noch viele Eingänge und Durgangsparameter die auch immer für beide Teile gebraucht werden.

    Müsste ich da einfach die Schnittstelle komplett vom einen zum anderen übernehmen ?

    Zu dem habe ich den Verdacht daß die statischen Variablen ebenfalls in "neutrales Gebiet" ausgelagert werden müssen...


    Ich dachte ich frage mal ob jemand schon ein ähnliches Problem bewältigt hat denn jeder Versuch kostet sehr viel zeit (es muss ja auch getestet werden)...


    Bin für alle Anregungen und Tips dankbar!
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________
    Zitieren Zitieren Großen FB in 2 Teile splitten - knifflig.  

  2. #2
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    532
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Was wird denn zu groß? Der FB, oder der Instanz-DB?

    Ist es der FB, so würde ich den einfach teilen und die beiden neuen FB unmittelbar hintereinander mit dem selben Instanz-DB aufrufen.

    Ist es der DB wirds schwieriger. Dann muß man die Teilung so vornehmen, daß die statischen Daten aufgeteilt werden und im zweiten FB die in-, out und in_out-Parameter am Anfang in den eigenen Bereich und am Ende wieder zurück geschrieben werden. Fängt der statische Bereich im Instanz-DB zum Bleistift bei dbx8.0 an, so kopiert man die ersten 8 Byte aus dem ersten INst-DB in die ersten 8 Byte des zweiten Inst-DB und am Ende des zweiten FB umgekehrt. Man kann das latürnich auf den statischen Datenbereich erweitern, so weit das not tut.
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)

  3. #3
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    Verwendest du in deiner Schrittkette sehr viele kleine (vom speicher) Schritte oder eher große Schritte.
    Wenn du jetzt einen große Schritt hast dann kannst du den ja in einen FC / FB schreiben und zu gegebener Zeit dann deinen FB "Schritt x" aufrufen.

    godi

  4. #4
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard

    Hi,

    also spontan denke ich:

    call fb1, db1

    call fb2, db1

    aber das macht s7 ja nich freiwillig mit.


    Meine jetzt rein theoretische Idee:

    FB1 und FB2 müssen im Delarationsteil identisch sein.

    dann:

    call fb1,db1
    call fb2,db2

    zu Beginn des FB2 umschalten auf die Instanz DB1 und mit dem zweiten Teil des Codes in der ersten Instanz fertigrechnen.

    wie das Umschalten genau zu bewerkstelligen wäre, kein konkreter Plan. Wenn ich da aber eine ungefähr richtige Ahnung hab, wird entweder AR2 als Pointer auf die Instanz benutzt (würde bedeuten: am ende von FB1 AR2 sichern, zuBeginn von FB2 wiederherstellen) oder ein schlicher AUF DI1 zu Beginn von FB2.

    keine Ahnung, aber mal so ne Idee - vielleicht in anderer Richtung ausbaufähig?

    Gruß

  5. #5
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    Hallo,

    Ich bin jetzt das erste mal über die 16kB Limitierung gestolpert die für Bausteine gilt wenn eine CPU kleiner 317 verwendet wird.

    ...
    Ich müsste also die Schrittkette splitten.

    Angenommen es sind 100 Schritte und 50 davon packe ich in einen neuen FB, wie wäre jetzt die optimale Vorgehensweise die beiden Schnittstellen zu gestalten daß das ganze nachher noch so läuft als wäre es im selben FB ?

    ...
    Bin für alle Anregungen und Tips dankbar!
    Ich beschränke mich auf 32er-Schrittketten, deren Zustand sich einfach in einem DW abbilden läßt. Fordert die Anlage mehr als eine 32er-Schrittkette, so verkette ich diese und setze z.B. mit dem "Fertig-Bit" des einen, das Startbit der nächsten.
    Hab aber auch schon die Struktur "Masterschrittkette" die wieder einzelne Detailschrittkette anstößt verwendet und zu synchronisierung auf das "Fertig-Bit" der einzelnen Schrittketten wartet.

    An die 16kB-Grenze bin ich bisher noch nicht gestoßen - aber gut zu wissen, wobei einige mit Graph7 programmierte SK da nicht weit davon weg waren.

    hth

    kiestumpe
    "Das Leben ist viel zu kurz, um schlecht zu essen !"
    (Johann Lafer zur SWR3 Grillparty)

  6. #6
    Registriert seit
    29.08.2007
    Beiträge
    26
    Danke
    0
    Erhielt 6 Danke für 5 Beiträge

    Standard

    Hallo,

    wir hatten das gleiche Problem und haben es bisher wie folgt gelöst:

    1. Zusammenfassen ähnlicher Schritte / Unterscheidung der auszuführenden Aktionen über Flags.

    2. Auslagerung der Teile die vor/nach jedem Schritt ausgeführt werden sollen in je einen Prolog-/Epilog-FC. Hier geschieht z.B. das Multiplexen von Eingangsvariablen u.ä.

    Gruß Christian

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Hallo RS,
    für mich wäre der Aufhänger bei deinem "Super"-FB auch die Schrittkette.
    Wenn du mittels eines MW's als Zähler arbeitest, wie ist das konkret gelöst ? SPL-Befehl ? Oder vergleichst du bei jedem Schritt auf den korrekten Wert ?
    Wie auch immer, ich könnte mir vorstellen, das du mit Schritt-Merkern (1 Merker für jeden Schritt) einiges an Platz sparen könntest. Vielleicht wäre das eine Überlegung wert. Wieviel kB's nimmt der Baustein den zuviel in Anspruch ?

    Gruß
    LL

  8. #8
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Kannst Du nicht mal einen Auszug aus dem FB hier reinstellen. Also damit man weis Wie Du die Kette Aufgebaut hast. Das Splitten wäre für mich zweite Wahl aber mach bar. Erste Wahl wäre wie einige Kollegen hier ja schon angedeutet haben die Struktur zu verändern. Und einiges in untergestellte FC auszulagern.

    Da ihr aber schon mehrere Anlagen mit den SKs drausen habt ist wahrscheinlich die Splitt Variante zwar etwas "quick and dirty" aber einfach zu Händeln. Aber selbst um da weitere Tipps geben zu können müsste man den Aufbau kennen.
    If you open your Mind too much, your Brain will fall out.

  9. #9
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von Perfektionist Beitrag anzeigen
    Hi,

    also spontan denke ich:

    call fb1, db1

    call fb2, db1

    aber das macht s7 ja nich freiwillig mit.


    Meine jetzt rein theoretische Idee:

    FB1 und FB2 müssen im Delarationsteil identisch sein.

    dann:

    call fb1,db1
    call fb2,db2

    zu Beginn des FB2 umschalten auf die Instanz DB1 und mit dem zweiten Teil des Codes in der ersten Instanz fertigrechnen.

    wie das Umschalten genau zu bewerkstelligen wäre, kein konkreter Plan. Wenn ich da aber eine ungefähr richtige Ahnung hab, wird entweder AR2 als Pointer auf die Instanz benutzt (würde bedeuten: am ende von FB1 AR2 sichern, zuBeginn von FB2 wiederherstellen) oder ein schlicher AUF DI1 zu Beginn von FB2.

    keine Ahnung, aber mal so ne Idee - vielleicht in anderer Richtung ausbaufähig?

    Gruß
    Hallo!

    Ja die zwei FB's müssen in der Deklaration gleich sein und den zweiten FB rufst du dann mit CC / UC auf dann brauchst du keine Parameter mehr übergeben.
    siehe dazu http://www.sps-forum.de/showthread.p...ight=fb+aufruf
    zum Schluss von dem Thread habe ich das mal ausprobiert einen FB mit CC / UC aufrufen.

    godi

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

    Perfektionist (08.11.2007)

  11. #10
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ...das finde ich dann aber mehr dirty als quick. Würde ich mir nicht antun.
    "Das Leben ist viel zu kurz, um schlecht zu essen !"
    (Johann Lafer zur SWR3 Grillparty)

Ähnliche Themen

  1. Profibus-Sensor - Signal splitten.
    Von DPuser im Forum Feldbusse
    Antworten: 14
    Letzter Beitrag: 01.08.2011, 10:51
  2. S7 in Programmteile splitten
    Von Servernexus im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 26.05.2011, 20:52
  3. AG_Recv /Datenstring Splitten
    Von s_alpen im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.10.2010, 10:26
  4. Ich hab vom großen S die schnauze voll
    Von stift im Forum Stammtisch
    Antworten: 38
    Letzter Beitrag: 07.02.2010, 20:05
  5. Chinch Ausgang splitten
    Von Markus im Forum Stammtisch
    Antworten: 6
    Letzter Beitrag: 19.09.2005, 23:26

Lesezeichen

Berechtigungen

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