TIA Arbeitsspeicherauslastung >90%

die 1510SP kostet 730,- Liste. Da lohnt es sich für Sonderanlagen/Sondernmaschinen nicht, zweigleisig mit 1200/1500er zu fahren...
Wir sind kein Maschinenbauer :D
Sind alles Laborthemen die ich bearbeite.. da kommt es auf eine stringente Produktauswahl nicht so an :)
Also, "zweigleisig" zu fahren ist auf jeden Fall Mehraufwand. Der kann sich aber durchaus in Grenzen halten. Manche Funktionalitäten werden nur von der 1500er unterstützt. Auf AWL sollte man m.E. aber sowieso verzichten. Gibt es irgendetwas, das nur auf einer 1200er, nicht aber auf einer 1500er funktioniert?
 
Habt Ihr kein Ersatzteillager? Oder ist das nicht so schlimm, wenn bei den heutigen Lieferzeiten mal ein par Wochen oder Monate nichts läuft? :unsure:
Bisschen Aluprofil und einzelne Baugruppen liegen im Lager, Projektlaufzeiten sind im Schnitt 3-5 Jahre.

Ob die Baugruppe in 2 Wochen oder in 6 Wochen kommt macht idR nicht viel aus tatsächlich.

Da ich bewusst aus der (wirtschaftlichen) Industrie herausgewechselt bin, ist hier alles etwas gemächlicher :)

Hat auch seine Vorteile, hier kann ich in Ruhe einfach mal was ausprobieren ohne terminlichen Druck, wie ich ihn sonst kannte, das macht's wiederum spannend :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Screenshot 2023-11-16 204135.png

Aktuelle Lage.. dabei sind 400 Datenpunkte und 3000 Zeilen SCL zur Datenaufbereitung auskommentiert, wenn ich diese wieder als Code darstelle, dann hab ich nicht genügend Arbeitsspeicher

Hab vom Siemens Support ein paar kreative Vorschläge bekommen, darunter auch paar kreative.. mal schauen wie ich das Ganze noch optimiert bekomme. Es bleibt spannend!
 

Anhänge

  • Screenshot 2023-11-16 204005.png
    Screenshot 2023-11-16 204005.png
    19 KB · Aufrufe: 9
Was verbraucht weniger Arbeitsspeicher, einen FC mehrfach aufzurufen, oder einen FB zu multiinstanzieren.. oder ist beides gleichwertig beim Thema Arbeitsspeicher?

Kann ich mit Variant bei meiner Schnittstellendeklarierung anstelle von Array und UDT eine Reduzierung des Arbeitsspeichers erreichen?

Ich würde auch gerne die FCs die ich mir zum Umwandeln geschrieben habe, auch nur einmalig aufrufen wollen pro Datenaufbereitungs-FC.. wie stelle ich das in SCL am Besten an, ich lasse nämlich die Daten nur einmalig und bedingt aufbereiten, sprich nur dann wenn es gefordert ist.. sobald die IF Anweisung ihr Ende erreicht hat, läuft sie nicht noch einmal durch.

Kann ich denn irgendwie durch Praktiken dafür sorgen, dass meine großen Datenmengen im Ladespeicher allokiert werden?

Danke!
 
Ich denke, um da etwas Sinnvolles sagen zu können müßte man dein Programm genauer kennen.
Auf jeden Fall sind Strings immer so ein Thema - vor Allem wenn sie auf max. deklariert werden und eigentlich nur 20 Zeichen brauchen.
Was vielleicht auch helfen könnte ist nur das als STAT zu deklarieren was auch wirklich STAT sein muss - ansonsten mehr in TEMP hineinpacken ...
Aber ... dies ist alles nur pauschal - ich hatte so ein Thema definitiv noch nicht ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bisher auch nicht, deswegen versuche ich da jetzt gerade mein bestes.. :D

Hatte sonst nur große 300er und große 1500er, mit 1200ern hatte ich noch nichts zu tun.. auf den 1500ern konnte ich immer so viel machen wie ich wollte gefühlt.

Ich habe zB ein Array of Byte mit Größe 0..1199, das ist mein Bereich für die Nachricht ans MQTT, die hab zB zweimal im DB deklariert, einmal als leeres Array zum befüllen nach dem senden der Nachricht und eben einmal als Arbeitsbereich.

Dann habe ich noch 66 mal diese UDT:
Code:
TYPE "LStream_typeElement"
TITLE = LStream_typeElement
VERSION : 0.1
//describes the element for LStream libraries, by providing key-value pair and the depth of the element
   STRUCT
      "type" : SInt := -1;   // Type of element XML/JSON;  -1 = inital value; 0 = Element/Object; 1 = Attribute/Array; 2 = Text/String; 3 = Number; 4 = Boolean
      key : String;   // Key name of element
      value : String := 'NULL';   // Value of element, null key has no value
      depth : SInt := -1;   // Depth of the key nesting
      closingElement : Bool;   // The element is last element of an object or array; True=Closing element; Only applicable for JSON functionality
   END_STRUCT;

END_TYPE

Welche auch in einem DB zweimal deklariert ist, einmal als Arbeitsbereich und einmal als Leerstruktur zum wieder befüllen nach senden der Nachricht.

Ich würde jetzt für meine 16 Topics, für die ich Daten aufbereiten muss, jeweils einen FC erstellen, bzw für die, welche ich öfter verwenden kann, einen FB und diesen dann multiinstanzieren.

Bin für alle Tipps und Tricks offen!
 
Zuletzt bearbeitet:
Die Strings haben alle schonmal ne Länge von 80 wenn ich mich jetzt nicht irre. Begrenzen auf die max nötige Länge.
Die leeren Arrays entfernen und das ablöschen der eigentlichen Arrays über eine Schleife laufen lassen (kostet vermutlich Zykluszeit)
 
also deine Struktur * 66 macht schon mal ordentlich was her ...
einen FB zu bauen, den du dann mehrfach instanzierst, macht aus meiner Sicht keinen Unterschied weil der Speicher durch den IDB belegt wird - den du dann ja entsprechend häufig hast ...
Naja ... :rolleyes:
 
also deine Struktur * 66 macht schon mal ordentlich was her ...
einen FB zu bauen, den du dann mehrfach instanzierst, macht aus meiner Sicht keinen Unterschied weil der Speicher durch den IDB belegt wird - den du dann ja entsprechend häufig hast ...
Naja ... :rolleyes:
Habe die Topics schon aufgeteilt, ein Topic hat trotzdem mit JSON Formatierung so viel Bedarf an Elementen

Sry ohne Index hat dein String in der UDT 254 Zeichen + 2 Byte Header ist also 256 Byte groß. Wenn du weniger Zeichen brauchst begrenze den String

z.b. key : String(20); -> benötigt nur 20 Byte

Screenshot 2023-11-17 120802.png

Da die UDT von Siemens stammt und ich ungerne versionierte Sachen von Dritten anfasse (never change a running system), hab ich's trotzdem mal gemacht.. ich bringe mal nächste Woche noch alle Optimierungen und den ganzen Code wieder rein und dann gebe ich mal ein Update!
 
Zuletzt bearbeitet:
Zurück
Oben