TIA Brauchen optimierte Bausteine mehr Arbeitsspeicher als nicht optimierte?

IndustryChick

Level-1
Beiträge
58
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe eine 1214C CPU und ich habe leider das Problem, wenn ich alle Bausteine optimiert machen will, dass mir der Arbeitsspeicher ausgeht.
Da ich aber leider zeitkritische Programmteile habe, müsste ich alle optimieren da ich dadurch von +30ms auf knapp 20ms kommen würde.

Mir ist aufgefallen das es Hauptsächlich FB´s mit SCL Code dahinter sind welche z.B. von nicht optimiert auf optimiert schnell mal 3-5% mehr Arbeitsspeicher brauchen pro Baustein.
Würde ich nun alle meine Bausteine "optimieren" habe ich keinen Arbeitsspeicher mehr. Bei Mischbetrieb ist die Zykluszeit noch schlechter, als wenn ich komplett alle
nicht optimiert einstelle. Wenn nichts optimiert ist, habe ich ganze 28% frei, switche ich alle hab ich 0% frei :(

Erwähnenswert ist noch, dass ich beileibe kein Programmierprofi bin ;-) Ich gehe also mal schwer davon aus das ich was eklatantes falsch mache.

Vielleicht hat ja einer nen Tip für mich :)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich finde auch, dass die CPU höher ausgelegt werden sollte.
Selbst wenn du jetzt 10% Arbeitsspeicher gewinnst, kann das bei der nächsten Änderung/Anpassung/Erweiterung schon nicht mehr reichen.
Vor allem als "kein Programmierprofi" sollte man über sehr viele freie Ressourcen verfügen! :p

MfG Nico
 
Wie ich darauf komme das ich von 30ms auf 20ms komme? Ganz einfach ich habe es ausprobiert! Der Zyklusunterschied ist in meiner Programmkonstellation enorm. Und am schlimmsten ist der Mischbetrieb da habe ich ganz schnell 45ms +xx.

CPU hochrüsten ist wohl keine Option. Das ist ein Jalousien/Rollläden Projekt für das eigene Haus. Die 1214C hat mich knapp 250€ gekostet. Die nächstgrößere kostet schon 600-700 €.

@Nico1977: Da hast du wohl recht :D Ich glaube auch das der Ressourcenverbrauch schon auch an meiner Unfähigkeit liegt :ROFLMAO:


Mein Problem ist ja eigentlich der viel höhere Arbeitsspeicherverbrauch bei optimierten Bausteinen. Das will ich eigentlich nur wissen ob das "normal" ist oder ob es an meiner schlampigen Programmierung liegt :ROFLMAO: Stehe da mit jemanden in Kontakt und der meint, der Unterschied wäre bei ihm bei einer kompletten Umstellung immer nur marginal.
 
ok, jetzt erklär mal den Profis, warum man für ein Jalousien/Rolläden Projekt eine Zykluszeit von 20ms benötigt? ;) Da sollten doch auch 500ms reichen.

Gruß.

Das würde mich auch interessieren.

Aber mal zu deiner Frage: Brauchen optimierte Bausteine mehr Arbeitsspeicher als nicht optimierte?
Ja das tun sie.

Beispiel eines DB's von mir:
[TABLE="class: cms_table, width: 500"]
[TR]
[TD][/TD]
[TD]Optimierter Bausteinzugriff
[/TD]
[TD]Normaler Bausteinzugriff
[/TD]
[/TR]
[TR]
[TD]Ladespeicher
[/TD]
[TD]2482 Bytes
[/TD]
[TD]2259 Bytes
[/TD]
[/TR]
[TR]
[TD]Arbeitsspeicher
[/TD]
[TD]196 Bytes
[/TD]
[TD]72 Bytes
[/TD]
[/TR]
[/TABLE]


Nun würde ich gerne von dir wissen, du hast nur die Option optimierter Zugriff der DB's geändert und dadurch dann 10ms gewonnen, sonst hast du nichts am Programm geändert?
Würdest du uns dein Programm einmal komplett zeigen, bzw. eventuell sogar hochladen?
Wie viele Rollläden sind das denn?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Siehe Kapitel 2.6 aus dem Programmierleitfaden 1200/1500 (https://support.industry.siemens.com/cs/ww/de/view/81318674):
Bei der 1200 sind die Bausteine speicheroptimiert und bei der 1500 zugriffsoptimiert.

Setzt mal die Speicehrreserve bei den Datenbausteinen auf 0 Byte anstatt standardmäßig 100Byte pro Baustein (zu finden in den Bausteineigenschaften/ Laden ohne Reinitialisierung).

Zum Thema schneller sein (<20ms): Verwende doch einfach einen "Weckalarm-OB" (Cyclic interrupt) mit eingestelltem Zeittakt von 15ms für den Programmteil der schnell sein soll.

Gruß Käse
 
Zuletzt bearbeitet:
Edit: Dann dürfte doch aber die 1200er nicht schneller mit optimierten laufen :confused:

Ah ich hab mich nicht klar genug ausgedrückt ;)
Die 1200er legt bei der Optimierung den Fokus hauptsächlich auf Speicher aber scheinbar auch auf Performance.
Bei der 1500er ist die Optimierung fast ausschließlich auf Performance ausgelegt.

Wieso die Programmbearbeitung bei Mischung von optimierten und nicht optimierten Bausteinen steigt liegt daran:
"Bei typgleichen Zuweisungen zwischen zwei Variablen mit unterschiedlicher
Speicherablage [optimiert und nicht optimiertt] konvertiert das System automatisch. Diese Konvertierung benötigt
[...] Performance und sollte deshalb möglichst vermieden werden."

aus Kapitel 2.6.4
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, der größte Performanceverlust wird wohl durch das ständige Wandeln zwischen Big/Little-Endian anfallen.
Die fällt schließlich bei jedem Zugriff auf einen Klaasik-Baustein an.
Bei der 1200 müsste der zusätzliche Speicherbedarf allerdings kleiner wie bei der 1500 sein.
Dafür müsste der optimierte Datenbaustein wiederrum weniger Remanezspeicher belgen als der Klassikbaustein weil dort ja nicht zwingend alles remanent sein muss.
Insofern müsste man dann doch mit nicht optimierten Bausteinen schneller voll werden weil die ja voll auf den Remanenzspeicher gehen.

Oder vertue ich mich da? :confused:
 
Zuletzt bearbeitet:
Ganz einfach erklärt warum es zeitkritisch ist ;-) Ich habe eine Sonnenstandsgeführte Lammelenwinkelverstellung programmiert. Meine Lamellenwinkelverstellung benötigt für die komplette Fahrt gerade mal 1100ms. Daher ist das ganze zeitkritisch.

Es sind 15 Jalousieen und 9 Rollläden. Sooo klein ist das Projekt also nicht. Desweiteren werden z.B. der Sonnenstand für meine GPS Position berechnet, Sonnenaufgang, Sonnenuntergang... Es gibt eine Nachtfunktion, eine Tagfunktion, eine Beschattungsfunktion, eine Scenenstellung, die ganzen Gruppen und Zentralfunktionen und selbstverständlich die ganzen Sicherheitsfunktionen (Wind, Regen, Feuer, Alarm..). Und das ganze hat selbstverständlich auch noch Handfunktionen :ROFLMAO:. Ein Großteil des Programms stammt aus der OSCAT Lib falls die einer kennt.

Das sollte somit jetzt auch das hier erklären :ROFLMAO:

Ich fänds noch interessant wie man soviel Speicher und Zykluszeit für ne Rollosteuerung verbrät.


Nun würde ich gerne von dir wissen, du hast nur die Option optimierter Zugriff der DB's geändert und dadurch dann 10ms gewonnen, sonst hast du nichts am Programm geändert?

Das ist so korrekt^^ Wie gesagt, am schlimmsten war der Mischbetrieb wo ich darauf noch garnicht geachtet hatte. Und diesen enorm höheren Speicherverbrauch brauchten afair ausschließlich Bausteine mit reinem SCL Code dahinter!


@ Käse:

Vielen Dank für den Tip! Ich habe mir bisher auch mit Weckalarm OB´s beholfen. Noch eine Frage: Was hat das damit auf sich?
Setzt mal die Speicehrreserve bei den Datenbausteinen auf 0 Byte anstatt standardmäßig 100Byte pro Baustein (zu finden in den Bausteineigenschaften/ Laden ohne Reinitialisierung).

Also ich weiß wo und wie ich das einstelle. Nur weiß ich nicht wozu es gut ist und was es bewirkt.. So wie ich es verstehe, ist diese "Reserve" also ein leerer Bereich im Baustein der Platz reserviert nur dazu da, dass wenn ich nur wenige Bytes am DB ändere, dieser nicht komplett neu geschrieben werden muss und ich somit den DB auch nicht reinitialisieren muss, oder?

Leider sind bei mir alle Bausteine bereits ohne Speicherreserver :-/


@Lord_Anubis:

Edit: Dann dürfte doch aber die 1200er nicht schneller mit optimierten laufen

Also das verstehe ich aber dann auch nicht. Aber bei beiden CPU´s haben doch die optimierten Bausteine "nur" den Sinn das die Zykluszeit sinkt?



Danke schon mal an alle Beteiligten für die Infos :) Langsam aber sicher kommt mehr Licht ins Dunkle :idea:ROFLMAO:




EDIT: Huppalla ich habe jetzt nach der Antwort erst bemerkt das es ne 2. Seite gibt :ROFLMAO:

Jo das mit dem Mischbetrieb war mir bereits bekannt, dass dieser durch die ständigen Umwandlungen extrem zeitintensiv ist. Das habe ich bereits in Siemens Dokumenten gelesen als ich schon versucht habe meine Zykluszeit zu minimieren.

@ RONIN:

Was bedeutet das? Das sagt mir leider garnix..

Naja, der größte Performanceverlust wird wohl durch das ständige Wandeln zwischen Big/Little-Endian anfallen.

Und warum müsste der Remanenzspeicherbedarf dann steigen? Das habe ich jetzt nicht bemerkt, aber wohl auch nicht beachtet, da ich mit dem noch keine Probleme habe. Und wie du schon geschrieben hast, gerade mit optimierten Bausteinen sollte man mit dem nicht schnell Probleme bekommen, da man ja jede Variable selbst entscheiden kann, ob diese remanent oder nicht remanent sein soll. Bei nicht optimierten ist daher der Verbrauch am höchsten weil du nur alles oder nichts machen kannst.

EDIT: Ach deine Aussage war ja eh genau so wie ich gerade geschrieben hab^^

Nur eins verstehe ich dann nicht:

Insofern müsste man dann doch mit nicht optimierten Bausteinen schneller voll werden weil die ja voll auf den Remanenzspeicher gehen.

Was hat der Arbeitsspeicher dann mit dem Remanenzspeicher zu tun? Das sind ja 2 völlig unterschiedliche und getrennte Speicher?? Oder meinst du nur den Remanenzspeicher der schneller voll werden müsste?



So ist mein derzeitiger Zustand der kompletten Steuerung:

Speicherauslastung.jpg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum Thema Zykluszeit: die zeitkritischen Programmteile in nen Weckalarm. Zum Thema Speicher: musst Du halt schaun, wo Du speichersparend programmieren kannst oder ne grössere SPS kaufen... Evtl. Programierst Du den Oscat Kram nach.. da ist bestimmt viel Overhead drin, den Du in Deinem Anvendungsfall evtl. garnicht brauchst...
Gruss
 
Wie man oben an meinen Screenshot erkennen kann, sind ja die JALOUSIE_AUFRUFE_DB und ROLLLÄDEN_AUFRUFE_DB meine Arbeitsspeicherfresser Nr.1. Jetzt haben diese Variablen alle keine Remanenz. Was passiert jetzt wenn ich diese Werte alle Remanent mache? Schiebt sich dann der komplette Speicherverbrauch vom Arbeitsspeicher in den Remanenzspeicher? Oder wird der Speicher dann da und dort gleichermaßen belegt?

Wenn sich dann nämlich diese von den Arbeitsspeicher in den Remanenzspeicher verlagern würden, wäre mir geholfen. Ich habe noch 76% freien Remanenzspeicher!
 
Nur zu beachten, dass der Remanenzspeicher nur 10 K groß ist und der Arbeitsspeicher 10 mal so groß. Diese DBs passen also gar nicht in den Remanzspeicher.
 
Probiers dochaus ;)
Nur wuerd ich im TIA dieser Tabelle im Screenshot nicht trauen. Da steht oft Quatsch drin... Auf jeden Fall oefter mal Gesamtuebersetze...
Gruß
 
Zurück
Oben