TIA S7-1500 indirete Adressierung mit optimiertem Bausteinzugriff

Fluffi

Level-2
Beiträge
451
Reaktionspunkte
69
Zuviel Werbung?
-> Hier kostenlos registrieren
In S7-300/400 haben wir relativ viel mit Any-Pointern realisiert. Vor allem im Bezug auf dynamisch definierte Quell- und Zielbereiche . Der Variant-Datentyp hat seine Features, aber diesbezüglich kann man ihn vergessen und ist in dieser Hinsicht kein brauchbarer Any-Pointer-Nachfolger (korrigiert mich wenn ich falsch liege), und die eigentlich optimal dafür geeignete fertige Funktion POKE_BLK arbeitet z.B. nur mit DBs zusammen welche im Modus "nicht optimierter Bausteinzugriff" laufen. Daher die Frage: Geht das, egal mit welcher Lösung grundsätzlich nur mit dem "nicht optimiertem Zugriff" und ich kann mir die Suche nach einer optimalen Lösung sparen, oder gibt es hier doch eine alternative Lösung?
 
Zuletzt bearbeitet:
Moin!
Durch die Optimierung hast du keine fixen Adressen mehr und folglich auch keine Möglichkeit der indirekten Adressierung.
Wenn man das mit der Optimierung nutzen will kann man einfach nicht mit alten Softwarestandards arbeiten. Also ist die optimale Lösung, wenn man alle Features von TIA und den neuen Steuerungen nutzen will auch eine neue Software für seine Applikation zu entwickeln. Das ist meine Meinung dazu ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, soweit verstanden. Aber mit Ausnahmen: Warum bietet Siemens beispielsweise nun zusätzlich die Befehle Poke und Peek an, wenn sie doch genauso wie ein Any-Pointer nur ohne Optimierung laufen? Dann hätten sie sich das ja gleich sparen können.

Also ist die optimale Lösung, wenn man alle Features von TIA und den neuen Steuerungen nutzen will auch eine neue Software für seine Applikation zu entwickeln
Dazu bin ich gerne bereit. Nur gibt einem Siemens bezüglich der indirekten Adressierung ja keine alternativen Werkzeuge an die Hand. Das ist ja das Problem. Also bedeutet das für mich: Alles dynamische muss nun von Hand symbolisch ausprogrammiert werden, egal wie groß der Aufwand ist. Sehe ich das richtig?
 
Also ich arbeite in der 1500er in AWL viel mit Arrays. Die können dort schön variabel angesprochen werden. Für mich einer der sehr wenigen Vorteile vom TIA.

Gruß.
 
Variablen in "optimiertem" Speicher haben keine Adressen und deshalb kann man sie weder direkt noch indirekt adressieren. Man kann sie nur symbolisch ansprechen.
Man kann die Variablen aber indiziert ansprechen, wenn man sie als indizierbarer Datentyp anlegt - also Array oder Array-DB oder die einzelnen Zeichen von Strings kann man indirekt/indiziert ansprechen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, soweit verstanden. Aber mit Ausnahmen: Warum bietet Siemens beispielsweise nun zusätzlich die Befehle Poke und Peek an, wenn sie doch genauso wie ein Any-Pointer nur ohne Optimierung laufen? Dann hätten sie sich das ja gleich sparen können.
Peek und Poke sind aus Siemens-Sicht wohl die Nachfolger der indirekten Adressierung um den Classic-Code migrieren zu können. Aus WORD_TO_BLOCK_DB wird bspw. Peek beim migrieren.

Dazu bin ich gerne bereit. Nur gibt einem Siemens bezüglich der indirekten Adressierung ja keine alternativen Werkzeuge an die Hand. Das ist ja das Problem. Also bedeutet das für mich: Alles dynamische muss nun von Hand symbolisch ausprogrammiert werden, egal wie groß der Aufwand ist. Sehe ich das richtig?
Du sollst halt nur noch symbolisch Programmieren. Heißt die eigene Programm-Struktur dahingehend ändern, dass bspw. Daten in Arrays gehalten werden. Oder Dinge die vorher in 10 DBs lagen nun ggf. in einen zusammenzufassen usw. Das ist aber leider nicht mal eben getan. Meine Standards für Fördertechnik in Classic und TIA sind bspw. komplett andere Programme. Da ist gefühlt kein Baustein gleich geblieben.
 
.. Warum bietet Siemens beispielsweise nun zusätzlich die Befehle Poke und Peek an, wenn sie doch genauso wie ein Any-Pointer nur ohne Optimierung laufen? ..
Man hat ja immerhin die Möglichkeit, ohne Optimierung zu arbeiten. Bei mir läuft alles noch voll nichtoptimiert, und das wird vermutlich auch noch lange so bleiben.

Das Problem mit dem weggefallenen Any-Pointer war beim Umstieg auf TIA auch mein größtes Problem. Einige komplexe Bausteine musste ich quasi neu erfinden, aber deren Funktionalitäten konnte ich voll umsetzen, zwar nichtoptimiert, aber was soll's. Durch diesen zwangsweisen Umstieg ist so ganz nebenbei die Anwendung meines Systems einfacher und sehr viel übersichtlicher geworden. Der Umstieg, ich hätte es nicht geglaubt, hat sich für mich echt gelohnt.

Es gibt natürlich kein Patentrezept. Kannst du uns einen konkreten Problemfall liefern? Ich glaube, an Lösungsmöglichkeiten wären hier viele interessiert. Muss es jetzt bei dir unbedingt optimiert werden?
 
Zwingend verwenden müsste ich es nicht denke ich. Wenns "nicht speicheroptimiert" läuft wird das System wohl noch fast genauso performant sein. Der angeblich 8x langsamere Speicherzugriff halte ich in dem Maße für ein Gerücht. Aber im Endeffekt muss man sich ja schließlich an die neue Design-Richtung von Siemens anpassen, ob man will oder nicht. Ich hab ein bisschen rumgespielt und einige Dinge doch halbwegs mit dem Variant-Datentyp retten können und andere Dinge widerum neu geordnet. Das bedeutet beispielsweise statt gleiche Daten auf mehrere DBs zu verteilen und diese dynamisch hin und herzukopieren verwende ich nun Arrays von UDT-Strukturen in einem DB. Naja, mal schauen wie es sich in der Praxis bewährt.

Ich bin weder Compiler-, noch CPU-Entwickler und vielleicht habe ich ja auch Unrecht, aber mal ganz ehrlich, ich kaufe Siemens nicht wiklich ab, dass diese Änderungen nur aufgrund von Performance-Optimierungen getroffen wurden, mal abgesehen davon, dass es bei einer SPS deutlich mehr um Stabilität und Zuverlässigkeit geht, als um Performance. Hier geht es doch eindeutig darum, die Programmierung in eine bestimmte, "einfachere" Richtung zu lenken. Variablen und Symbole sind doch eh nur Hilfskonstrukte, hinter denen immer eine Adresse steckt. Wer sich in hardwarenahem C auskennt weiß, dass man für performante Systeme nur mit Adressen und Zeiger hantiert. Unnötige Variabeln im Speicher sind hier ein absolutes no-go. Ok, dafür sind die Programme nur für den Programmierer verständlich, aber die Zeiger- und Adressenarithmetik in der SPS-Welt hatte doch eh nie solche Dimensionen angenommen und war deutlich weniger komplex. Daher unnötig dort so restriktiv einzugreifen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Fluffi:
Ich muss dir gestehen, dass ich auch sehr viele meiner heiß geliebten Standard-Bausteine auch im TIA-Umfeld (noch) im Einsatz habe, wo, um das Eine oder Andere zu ermöglichen, der optimierte Bausteinzugriff deaktiviert ist (damit ich z.B. den AT-Befehl wieder einsetzen kann).
Möglicherweise ist es sogar so, wie du schreibst, dass es im Augenblick da zu keinen wirklichen Performance-Änderungen kommt. Ich bin mir aber, was Siemens angeht, ziemlich sicher, dass (wenn es nicht ist) es früher oder später so werden wird ...
Aber auch mir hat sich, rein von der Überlegung her, die Sache mit dem "optimierten Bausteinzugriff" auch noch nicht wirklich erschlossen - also dem dahintersteckenden tieferen Sinn. Bei Bools wäre das OK, da ich mir, wenn ich im Speicher an Stelle dessen mit einem INT arbeite und mein TRUE oder FALSE davon ableite ob der INT <> 0 oder = 0 ist. Das spart in der Bearbeitung möglicherweise wirklich Zeit ein.

Gruß
Larry
 
Also bei der 1500er gibt es deutliche Unterschiede in der Zykluszeit bei der Verwendung von nicht optimierten Bausteinen und bei der Verwendung von AWL.
Ob das in der jeweiligen Anwendung eine Rolle spielt sei mal dahingestellt.
Auf nicht optimierte Bausteine können wir nicht verzichten. Beim Datenaustausch mit Fremdsystemen kommt man nicht darum herum.
Ausserdem geht's mir auch wie Larry. Der AT-Befehl ist quasi lebensnotwendig.
Nacheinander habe ich meine Standardbausteine umgestellt und AWL verbannt.
Seit TIA 14 mit SCL-Netzwerken brauch ich kein AWL mehr.

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei der reinen Nutzung von AWL, trotz optimiertem Zugriff, tritt schon eine Verschlechterung der Zykluszeit ein?

AWL wird laut Siemens auf der 1500er nur interprediert. Die typischen Register werden emuliert.
Daher soll laut Siemens AWL-Code langsamer sein als KOP, FUP oder SCL.
Zu rein optimierten Zugriffen habe ich keine eigenen Versuche gemacht.

Gruß
Blockmove
 
um das Eine oder Andere zu ermöglichen, der optimierte Bausteinzugriff deaktiviert ist (damit ich z.B. den AT-Befehl wieder einsetzen kann).
Auf nicht optimierte Bausteine können wir nicht verzichten. ...
Ausserdem geht's mir auch wie Larry. Der AT-Befehl ist quasi lebensnotwendig.
Klingt hier immer anders, daher -

AT ist auch in optimierten FBs möglich:
TIA-Hilfe schrieb:
Variablen mit AT überlagern

Regeln
Folgende allgemeine Regeln gelten für das Überlagern von Variablen:

  • In AWL, KOP, FUP und GRAPH ist das Überlagern in S7-1200 und S7-1500 möglich.
  • In SCL ist das Überlagern in allen CPU-Familien möglich.
  • Das Überlagern von Variablen ist in folgenden Bausteinen möglich:
    • In Codebausteinen mit Standardzugriff
    • In Codebausteinen mit optimiertem Zugriff für Variablen mit der Remanenzeinstellung "Im IDB setzen"
  • Die Datenbreite der überlagernden Variablen muss gleich oder kleiner als die der überlagerten Variablen sein.
  • Die Datenypen VARIANT und INSTANCE können nicht überlagert werden.
  • Bausteine aus Bibliotheken, die als Parameter in der Schnittstelle deklariert sind, können nicht überlagert werden.
  • Strukturierte PLC-Variablen, die als Parameter in der Schnittstelle deklariert sind, können nicht überlagert werden.
  • Überlagernde Variablen können nicht durch Slice-Zugriffe adressiert werden.
 
@Hucki:
I'm sorry ... das ist mir bei "optimierten Bausteinen" bislang nicht gelungen - wobei die Einstellung "im I-DB setzen" (ich hatte das auch schon mnal gelesen) finde ich auch bei mir nirgens.
Also : Ich würde z.B. auf eine Struktur oder ein Array in einem Baustein mit "optimierten Zugriff" eine AT-Sicht machen - zeig mal wie das geht ... Mir wird hier dann schon das AT selbst gar nicht mehr angeboten ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Hucki:
I'm sorry ... das ist mir bei "optimierten Bausteinen" bislang nicht gelungen - wobei die Einstellung "im I-DB setzen" (ich hatte das auch schon mnal gelesen) finde ich auch bei mir nirgens.
Geht auch definitiv nur bei optimierten FBs, da FC nun mal keinen IDB haben.
Und ist dann vermutlich auch nur noch eine Halboptimierung.
Lt. MSB seit V11 SP1 Upd. 2 in TIA möglich.


Ein Beispiel aus meiner Forums-Vergangenheit:

attachment.php



PPS:
Mir wird hier dann schon das AT selbst gar nicht mehr angeboten ...
Das AT wird erst nach der Umstellung auf "Im IDB setzen" in der nächsten Zeile als Datentyp angeboten.



 

Anhänge

  • AT.jpg
    AT.jpg
    16,2 KB · Aufrufe: 183
Zuletzt bearbeitet:
Das Thema ist ja immer wieder mal dran.
Da gab's u.a. auch schon mal diesen Hinweis:
Zu AT gibts ein Faq von Siemens

Wie programmieren Sie in STEP 7 (TIA Portal) die Überlagerung von Variablen mit dem Schlüsselwort "AT"?

https://support.industry.siemens.com/cs/document/57132240/wie-programmieren-sie-in-step-7-(tia-portal)-die-überlagerung-von-variablen-mit-dem-schlüsselwort-at-?dti=0&lc=de-WW


Und warum das wieder so bescheiden von Siemens gelöst wurde, keine Ahnung...
 
Aber das ist dann tatsächlich "halboptimiert", zumindest die Überlagerung.
Wie sieht es dann mit der SPS-Performance aus?
Ich erinnere mich an einen Satz von Siemens (weiß leider nicht wo er stand), dass ein nichtoptimierter Baustein bedeutet, dass "Alles" nicht optimiert läuft, zumindest was die Performance angeht. Dsa wäre in so einem Fall dann echt Kontraproduktiv, da man gleich auf optimierte Bausteine verzichten kann. Gibt es dazu Erkenntnisse von euch?
 
Das AT wird erst nach der Umstellung auf "Im IDB setzen" in der nächsten Zeile als Datentyp angeboten.


OK ... wenn man sich dann das Ergebnis ansieht dann ist es von einem "nicht optimierten DB" nicht mehr zu unterscheiden - wahrscheinlich kommt dann auch genau das heraus ... (es wird einfach ein nicht-optimierter Baustein).
Benötigen tue ich das allerdings genauso in einem FC wie einem FB ... wäre somit also auch nicht wirklich meine Lösung ...

@DauYing:
Auf deine Frage kann ich dir nicht wirklich antworten. Es gibt so ab und an schonmal Anforderungen bei denen es ganz praktisch ist, wenn man auf einen vorhandenen Variablen-Block (z.B. eine Struktur oder ein Array) eine komplett andere Sicht erstellen kann. Wenn du dafür für dich noch keine Anwendung gefunden hast dann fällt es mir schwer, dir da ein Beispiel zu nennen (weil du müßtest dann den Grund und den tieferen Sinn meiner Vorgehensweise auch verstehen). Naja ein einfaches Beispiel hätte ich vielleicht doch : du möchtest z.B. eine deklarierten String als Array of Char (oder Byte) behandeln können - das ginge dann sehr schön mit AT.

Gruß
Larry
 
Es ist auch möglich in einem FC im Temp Bereich AT zu nutzen.

Dazu muss man den FC auf nicht optimiert einstellen (wie beim DB).
 
Zurück
Oben