Großen FB in 2 Teile splitten - knifflig.

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo JoopB

Zu deiner Schrittkette:
Du brauchst nicht in jedem Netzwerk das einen Nachfolgenden Schritt um 1 höher hat L Schrittnummer schreiben sondern springe in ein Netzwerk zum schluss deiner Schrittkette und inkrementiere die Schrittnummer um 1 weil es unflexible ist wenn du mitten in deiner Schrittkette einen Schritt hinzufügen musst dann kannst du alle nachkorrigieren.
Wenn du natürlich einen bestimmten Schritt anspringen willst dann kannst du das eh nur mit einem L Schrittnummer machen und das besagte Netzwerk einfach überspringen.
 
Ich meine, das die Schrittkette mit SPL schon mal eine Menge Code einsparen würde, die ständigen Vergleiche inkl. Sprung machen doch sicher bald die Hälfte des gesamten Code aus. So nebenbei halte ich es in Step7 für die eleganteste Methode einer "Schrittkette zu Fuß". Die Schrittweiterschaltung kann tatsächlich besser am Ende erfolgen, wenn man Schrite überspringen will (abhängig von Eingaben am OP z.Bsp.) kann man aber trotzdem den Schrittzähler beliebig manipulieren, z.Bsp. 5 dazu addieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Godi,

Enschuldige mir for meine Duits.
Wenn ich in eine schritt zb schritt 25 oder Schritt 30 anspringe woll kan ich dass machen mit

U nach_STEP25
l 25
SPB end
U nach_Step30
L 30
SPB end
uzw

Gruss Joop
 
...
da mir die ganze Sache keine Ruhe gelassen hat ...
und da mittlerweile auch Andere auf den Zug mit der Schrittkette aufgesprungen sind ...
und überhaupt ...

Ich habe mir mal das von RS hier eingestellte Code-Fragment aus seinem "Super-FB" :)twisted: ich kanns nicht lassen ...) nochmals angesehen und es gemäss meines Vorschlages "binärisiert" (Ich arbeite halt am liebsten mit Bits und nicht mit SPL - halt Geschmacksache).

Dabei herausgekommen ist : Orginal von RS benötigt 236 Bytes - meine Version, die sich aber sicher noch weiter optimieren liesse, 174 Bytes.
Ich stelle den Code zum Vergleich mal hier ein :
Code:
// Wenn bereits gesperrt ist, dann nichts machen.
      U     #Schritt_900
      SPB   ue99
// Wenn der IZ kleiner 10 ist braucht nur gesperrt zu werden.
      U     #Schritt_kl_10
      UN    #Notaus_IO
      UN    #Gesperrt_Aktiv
      S     #Merker_Sperren
      SPBN  ue01
      S     #Schritt_900
      SPA   ue99
// Wenn der IZ zwischen 10 und 64 ist kann NormalAus_S angewandt werden...
ue01: UN    #Schritt_kl_10
      UN    #Schritt_gr_64
      SPB   ue02
      UN    #Notaus_IO
      UN    #NormalAus_S_Aktiv
      UN    #Abbruch_Aktiv
      S     #Merker_NormalAus_S
      SPBN  ue02
      U     #Option_XY                  // wenn True anderen IZ nehmen!
      S     #Schritt_450
      UN    #Option_XY
      S     #Schritt_750
      SPA   ue99
// Wenn der IZ größer als 64 ist muß NotAus angewandt werden...
ue02: U     #Schritt_gr_64
      UN    #Notaus_IO
      UN    #NotAus_Aktiv
      UN    #Abbruch_Aktiv
      S     #Merker_NotAus
      SPBN  ue03
      U     #Option_XY                  // wenn True anderen IZ nehmen!
      S     #Schritt_450
      UN    #Option_XY
      S     #Schritt_800
      SPA   ue99
ue03: NOP   0
ue99: NOP   0
Ich denke, dass man durch geschicktes Programmieren noch auf ein paar der Sprünge verzichten könnte und damit weiteren Code einsparen würde.
Warscheinlich würde die SPL-Gschichte nicht im gleichen Masse Code einsparen, da RS augenscheinlich sehr viel verzweigt und dadurch nicht eine "Erhöhe Pointer"-Anweisung am Ende reichen würde, sondern man mit vielen Direkt-Zuweisungen zwischendurch rechnen muß (Spekulation !).


@JoopB: Ich glaube nicht, dass du dich hier bei irgendwem für dein Deutsch entschuldigen musst. Ich persönlich finde es toll, wenn dieses Forum anscheinend auch in Holland interessant ist ...:p
 
Ich meine, das die Schrittkette mit SPL schon mal eine Menge Code einsparen würde, die ständigen Vergleiche inkl. Sprung machen doch sicher bald die Hälfte des gesamten Code aus. So nebenbei halte ich es in Step7 für die eleganteste Methode einer "Schrittkette zu Fuß". Die Schrittweiterschaltung kann tatsächlich besser am Ende erfolgen, wenn man Schrite überspringen will (abhängig von Eingaben am OP z.Bsp.) kann man aber trotzdem den Schrittzähler beliebig manipulieren, z.Bsp. 5 dazu addieren.

Hier mein Beitrag den ich eigentlich schon gestern abend senden wollte - aber dann versagte mein DSL....
======================================================
So einfach lässt sich das nicht pauschalisieren...

Da heute abend mein DSL zwischen 20:00 Uhr und jetzt (anm.: bis 0:30 - aber bevor ich Antworten drücken konnte war es auch schon wieder weg...) flöten ging habe ich mal ein wenig getestet...

In dem Baustein (21518byte Gesamt / 200byte Schnittstelle) sind momentan 125 Schritte drin. Jeder dieser Schritte prüft am beginn ob seine Schrittnummer aktiv ist. Da ich ja kein Internet hatte habe ich mal einen leeren FB genommen, und 125mal den Vergleicher reingehängt der die Hälfte des Codes ausmachen soll...

Er macht aber tatsächlich "nur" 2000byte - also etwa ein zehntel aus...

Zum Vergleich eine Sprungleiste mit 125 Abzweigungen macht immerhin rund 600byte aus... (Ohne Gegenstücke, gell)

Mal abgesehen davon daß die Sprungleiste gut für die Zykluszeit wäre bringt sie mir sonst nur Nachteile - bezogen auf meinen fertigen Baustein und das Drumherum zumindest.

Sie alleine würde mich jedenfalls auch nicht unter die 16kB bringen.

Da ich ja noch mehr Zeit hatte habe ich noch ein wenig weitergeguckt...

Ich könnte (vermutlich) so auf die schnelle etwa 2,5 kB "auslagern" ohne den Ablauf unnötig durcheinander zu bringen. zähle ich jetzt noch die ermittelten 1,4kB dazu wenn ich auf Sprungleiste (wider willen) umbaue dann bin ich immer noch nicht unter 16kB.

Das dumme ist halt nur daß das ganze zeug da nicht als Platzfüller drinsteht sondern es ist halt da.

Ich kann es glaub drehen und wenden wie ich will - entweder spalten oder massivst überarbeiten und versuchen noch mehr auszulagern...

Wobei ja übermäßiges Auslagern irgendwann keinen Unterschied mehr zum Spalten macht - es ist immer irgendwie zerissen
=======================================================

@LL: Danke für die Mühe, da das nicht mal eben so geschwind machbar ist bin ich gerade alles am abwägen.

Wie schon gesagt ohne größere Maßnahmen ist da nichts zu machen und die überlege ich mir nun mal ganz genau.

Ab Montag muss ich aber zuerst noch die Baustelle fertig kriegen bevor da in der Richtung noch was geht - auf jeden Fall lasse ich lieber die 317er mal noch stecken bevor ich das Teil übereilig versaue - da wäre mehr kaputt als die Preisdifferenz.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... Wie schon gesagt ohne größere Maßnahmen ist da nichts zu machen und die überlege ich mir nun mal ganz genau.

Ich denke, dass das der einzige sinnvolle Ansatz ist ...
Ich selbst arbeite auch viel und gerne mit Standard-Bausteinen, aber ab und an ist auch mal eine Version 2.0 fällig.

Ich glaube, dass du das von Anfang an befürchtet hast, aber es vielleicht nicht wahrhaben wolltest ...

Ab Montag muss ich aber zuerst noch die Baustelle fertig kriegen bevor da in der Richtung noch was geht - auf jeden Fall lasse ich lieber die 317er mal noch stecken bevor ich das Teil übereilig versaue - da wäre mehr kaputt als die Preisdifferenz.

Würde ich auch so machen. Die CPU kannst du dir auch später noch mal wiederholen - vorausgesetzt du kannst dein Problem zufriedenstellend lösen.
Vielleicht kannst du dem Kunden gegenüber natürlich auch einen Nachtrag für die CPU geltend machen, wenn du ihm die technischen mehr-Möglichkeiten (vor Allem in Hinblick auf die Zukunft) schmackhaft machst ;) .

In jedem Fall - Viel Erfolg morgen
Gruß
LL
 
Ich sag jetzt einfach mal schnell noch mal danke da ich seit 5min erst wieder ins Netz komme - da ist echt grade der Wurm drin :twisted:

Hab jetzt mal schnell noch ein FW Update an der TK Anlage gemacht weil drin stand "erhöhte Stabilität" - vielleicht hilft´s ja...

Werde mich - wenn´s geht - heute später noch mal melden.
 
@LL:

Bei deinem "umgebauten" Ausschnitt von mir ist mir noch was aufgefallen...

Und zwar die 2 Bits "#Schritt_kl_10" und "#Schritt_gr_64" - da Bits ja nur zwei Zustände kennen müßte ich für so was auch wieder solche extra Bits irgendwo setzen und rücksetzen da sie ja keinen Zustand selbst sondern nur einen Bereich markieren...

Wäre sicher auch alles machbar aber das ist eben immer das Problem weil vieles mit dranhängt.

Wegen den 2kB überlege ich mir halt schon ob es sich lohnt die Nachteile mit in Kauf zu nehmen, ganz zu schweigen was es sowieso an Aufwand bedeutet...

Wenn ich also langfristig unter 16kB kommen will dann muss ich schon dafür sorgen daß ich jetzt mal so auf 12 runterkomme und schaue wo der Rest alles hinwandert.

Und gerade in Bezug auf dieses Verteilen ist vielleicht die jetzige Methode gar nicht ohne. Wenn ich z.B eingrenze daß in einem Unterprogramm die Zustände 200 bis 245 liegen dann bräuchte ich es am Anfang nur mit der Abfrage beginnen * kleiner 200 / größer 245 = BEB *

Wenn dann mehrere so häppchen verteilt sind dann könnte die Zykluszeit auch positiv davon profitieren da immer nur ein Happen durchlaufen wird - nämlich der der den gültigen Bereich hat...

Und das ganze noch verpackt in Godis FB 10? Oder als im ersten FB aufgerufene Unterprogramme?

Der Mist ist eben daß der Baustein viele Timer enthält - ein paar S7 Timer und in den IZ vorzugsweise SFB4 Timer (so gestrickt daß immer der selbe verwendet werden kann - daher auch immer dieses häufige Aufrufen mit negativem Eingang -> damit er im nächsten IZ wieder Clean ist...)

Noch eine Idee: Alle Schrittbasierten Netzwerke in 2 neue Bausteine packen (für einen sind sie ja zu groß) und diese im Ur-FB aufrufen der dann nur noch die Schrittneutralen Netzwerke und eben die Bausteinaufrufe enthält. Aber dann wieder die Schnittstelle... (200 byte ist halt immer soo viel zum ausfüllen) Lösung: Pro durchlauf immer nur den starten der die aktive Schrittnummer enthält - der andere hat dann ja sowieso nix zu tun. Ich glaube in die Richtung muss ich mal weiterdenken...
 
Hallo RS,
zu deinem letzten Beitrag noch ein paar Anmerkungen :

1. du sprichst von Unterprogrammen. Das wären für mich 1A-Aspiranten für einen seperaten Baustein - vielleicht sogar ein FC. Dieser könnte dann ggf. sogar Bedarfs-gesteuert aktiv werden - wobei ich kein Freund von bedingter Bearbeitung von Schrittketten bin.

2. wenn dein Endziel wirklich <= 12kB liegt, dann geht es nur mit Radikal-Massnahmen. Also auf jeden Fall zerteilen wo sinnvoll (nicht wo geht) und in Teil-Bausteine auslagern. Diese können dann selbstverständlich Sub-Bestandteile des Master-Bausteins sein.

3. Übergibst du wirklich 200 Parameter an deinen "Super-FB" ?
Hier sähe ich den Ansatz mit dem Master-FB die Dinge sinnvoll zu zerstückeln und den Unter-Bausteinen zugänglich zu machen. Vielleicht mit einem Daten-Block immer gleicher Struktur der als Einheit (ANY-Pointer) an die Unter-Funktionen verteilt wird und zu dem jeder der soll oder will seinen Senf beisteuern kann. Das ist allerdings auch nicht in 5 Min. gemacht. Bei mir hat ein vergleichbarer Verteiler-Sammler-Konzentrator-FB eine Geburtsphase von mehreren Monaten bis zur Endreife gehabt (die erste Version ging zwar schon, aber dann will man ja noch dies und jenes und überhaupt ...)

---

Und zwar die 2 Bits "#Schritt_kl_10" und "#Schritt_gr_64" - da Bits ja nur zwei Zustände kennen müßte ich für so was auch wieder solche extra Bits irgendwo setzen und rücksetzen da sie ja keinen Zustand selbst sondern nur einen Bereich markieren...
Das war nur ein Beispiel auf die Schnelle. Für dich richtig wäre hier sicherlich : "IZ unter / im / über dem Zuständigkeitsbereich" - Was immer IZ heißt. Das ließe sich aber dann vielleicht sogar generalisieren weil es ja scheinbar nicht nur für das eingestellte Beispiel gilt.

Der Mist ist eben daß der Baustein viele Timer enthält - ein paar S7 Timer und in den IZ vorzugsweise SFB4 Timer
Das ist doch nur für den I-DB ein Problem ... Auf den Code dürfte sich das nicht weiter auswirken.

Alle Schrittbasierten Netzwerke in 2 neue Bausteine packen ...
Was machen den die anderen - kann man da vielleicht etwas sinnvoll zusammenfassen und einer Subroutine übergeben ?

So, das wars ... Mehr fällt mir im Augenblick nicht mehr ein.
Schönen Sonntag noch und wie schon geschrieben ... viel Erfolg morgen.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo RS,
zu deinem letzten Beitrag noch ein paar Anmerkungen :

1. du sprichst von Unterprogrammen. Das wären für mich 1A-Aspiranten für einen seperaten Baustein - vielleicht sogar ein FC. Dieser könnte dann ggf. sogar Bedarfs-gesteuert aktiv werden - wobei ich kein Freund von bedingter Bearbeitung von Schrittketten bin.
Möglicherweise ja. Bedingte bearbeitung wäre das nicht direkt sondern (mal ausgehend davon das IZ Nummernsystem bleibt) nur das Unterprogramm zu bearbeiten welches den aktiven Schritt beinhaltet.
2. wenn dein Endziel wirklich <= 12kB liegt, dann geht es nur mit Radikal-Massnahmen. Also auf jeden Fall zerteilen wo sinnvoll (nicht wo geht) und in Teil-Bausteine auslagern. Diese können dann selbstverständlich Sub-Bestandteile des Master-Bausteins sein.
Das zerteilen ist glaube ich nicht mal das Problem - ich habe halt nur bedenken weil ich hierbei wieder Neuland betrete...
3. Übergibst du wirklich 200 Parameter an deinen "Super-FB" ?
So viel sicherlich nicht (die Schnittstelle hat gesamt 200byte). Es sind auch 16/32 bit Parameter dabei, nicht nur einzelne Bits...
Aber ein haufen bits gehen schon für die Meldungen drauf und die wollen beim Aufruf eben alle versorgt werden...
Hier sähe ich den Ansatz mit dem Master-FB die Dinge sinnvoll zu zerstückeln und den Unter-Bausteinen zugänglich zu machen. Vielleicht mit einem Daten-Block immer gleicher Struktur der als Einheit (ANY-Pointer) an die Unter-Funktionen verteilt wird und zu dem jeder der soll oder will seinen Senf beisteuern kann.
So was ähnliches habe ich auch schon gedacht, nur habe ich mir das im ersten Gedanken wohl zu einfach vorgestellt.
Das ist allerdings auch nicht in 5 Min. gemacht. Bei mir hat ein vergleichbarer Verteiler-Sammler-Konzentrator-FB eine Geburtsphase von mehreren Monaten bis zur Endreife gehabt (die erste Version ging zwar schon, aber dann will man ja noch dies und jenes und überhaupt ...)
---
Das war nur ein Beispiel auf die Schnelle. Für dich richtig wäre hier sicherlich : "IZ unter / im / über dem Zuständigkeitsbereich" - Was immer IZ heißt.
Innerer Zustand
Das ließe sich aber dann vielleicht sogar generalisieren weil es ja scheinbar nicht nur für das eingestellte Beispiel gilt.
Da machen früher oder später die verzweigungen probleme... (Wann / Wo setzen / rücksetzen - es gibt oft mehrere Möglichkeiten)
Das ist doch nur für den I-DB ein Problem ... Auf den Code dürfte sich das nicht weiter auswirken.
Ich meinte auch eher nicht den Platz sonden die Lauffähigkeit wenn die betroffenen Netzwerke z.B. in eine FC verschachtelt sind.
Was machen den die anderen - kann man da vielleicht etwas sinnvoll zusammenfassen und einer Subroutine übergeben ?
So einen hast du schon editiert - quasi ein Netzwerk ohne eigenen Zustand (IZ)
So, das wars ... Mehr fällt mir im Augenblick nicht mehr ein.
Schönen Sonntag noch und wie schon geschrieben ... viel Erfolg morgen.

Gruß
LL
Danke, wird schon schief gehen ;-)

Richtig anfangen kann ich damit sowieso erst wenn die akt. Baustelle fertig ist da bis zur Endabnahme wohl noch das eine oder andere geändert wird da gerade hier jetzt eine neue Teilstruktur hinzu kam...
(Kann also sein ich melde mich später ggf. noch mal dazu)
 
Zurück
Oben