TIA AT Konstrukt vs Slice-Zugriffe

  • Ersteller Ersteller Gelöschtes Mitglied 117942
  • Erstellt am Erstellt am
G

Gelöschtes Mitglied 117942

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich verwende zurzeit noch das AT Konstrukt, welche ich den DB der auf ein UDT referenziert, auf ein Array lege. So ist mir es möglich mit einer FOR-Schleifen jedes ElementUDT(Array-Nr.) routiniert und gleich zu bearbeiten.

Dafür darf der Bausteinzugriff nicht Optimiert sein. Darum bin ich auf der Suche nach einer schlaueren "Optimierte" Lösung.

Wenn ich nach alternativen suche, stosse ich auf die Begriffe: Slice-Zugriffe oder die Systemfunktionen "SCATTER" und "GATHER"

Komme allerdings einfach nicht auf den richtigen Weg oder gibt es keine bessere Möglichkeit ein DB mit UDTs auf ein Array aufzulösen?


Besten Dank & Gruss
_Rob

TIA 16 / CPU-1516F
 
Zuletzt bearbeitet von einem Moderator:
Was ist denn der Grund, warum du über unstrukturiert angelegte Daten in einer Schleife iterieren musst. Könnten die Daten auch direkt als Array angelegt werden, oder besteht eine andere Möglichkeit, das was die Schleife ausführt auch anders zu realisieren?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Im DB sind 1 bis Const_XXMotoren mit jeweils der gleichen UDT-Struktur aufgeführt, welche derMotorenzustand über OPC UA zur Verfügung stellen. Da der OPC UA Client Symbolischauf den DB zugreift und die Motoren unterschiedliche & eindeutige Namenhaben, ist es deshalb mir nicht möglich ein DB-Array anzulegen.

[FONT=&#10]Mit der Schleife möchte ichbewirken, unabhängig wie viele Motoren das ich habe, sie gleich zu bearbeitenohne dass ich sie verknüpfen muss.
[FONT=&#10][FONT=&#10]Dadurch bleibt derProgrammiergcode übersichtlicher.
[/FONT][SUB][SUP]
[/SUP][/SUB]

[/FONT]
[/FONT]
 
Zuletzt bearbeitet von einem Moderator:
Und was für Informationen musst du von den Motoren nachträglich einsammeln? Vielleicht können die Funktionen für die Motoren welche diese UDTs beschreiben auch diese Informationen schon bereitstellen.
 
Klar, das wäre das schönste und einfachste. Allerdings wird es einem manchmal nicht einfachgemacht :D
Einenweiteren Anwendungsfall ist den DB nach dem Motorennamen zu durchsuchen und die Werte über MQTT zu versenden.

Diesalles geht mit AT, ist einfach nicht "Optimiert". Was wiederum vomKunde nicht gern gesehen wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Diesalles geht mit AT, ist einfach nicht "Optimiert". Was wiederum vomKunde nicht gern gesehen wird.
AT geht auch im optimierten FB, wenn die Remanenz der überlagerten Variablen auf "Im IDB einstellen" geändert wird.

Weil Temp-Variablen nicht im IDB sind und ein FC erst gar keinen IDB hat, fallen die raus.
 
Die beiden aufgelisteten Voraussetzungen für den optimierten Bausteinzugriff gelten ab TIA V16 nicht mehr. Das heißt, du kannst dieses Konstrukt in optimierten Bausteinen ohne Einschränkungen ab V16 verwenden.
Kannst Du das mit V16 näher erklären?

Ich kann in V16 keine Überlagerung AT auf Temp im optimierten FB anlegen...
:confused:

Ohne "Im IDB setzen" kommen auch Übersetzungsfehler.
(TIA V16 Upd2)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vlt solltest du dir etwas mehr Zeit als 7 min dafür nehmen das Ganze zu implementieren. Man sollte schon wissen wie Serialize und Dezerialize genau funktionieren. Lies die Hilfe. Da steht alles wichtige drin...
 
Entschuldige bitte, wenn ich Deine Aussage zu den Variablen in optimierten Bausteinen falsch verstanden habe.
Ich dachte, die Aussage gilt generell, nicht nur für den optimierten Zugriff durch Serialize/Deserialize.
Daher habe ich um Erläuterung gebeten.
 
Weiter kann ich im FB die Remanenz für InOut nicht einstellen.
Komplexer Datenttyp? Wenn ja, dann CallByRef, also auch nicht im IDB.

InOut übertragen an gleichen STATIC-Datentyp, überlagerten Datentyp bearbeiten und originalen STATIC an InOut zurück übertragen:
Code:
statUdt := ioUdt;

// statAtUdt bearbeiten
...

ioUdt := statUdt;



Würde mich auch interessieren. Hab es leider nicht gesehen, ist bestimmt ein guter Ansatz.
Das war der Vorschlag, die optimierten Daten mit Serialize/Deserialize in den überlagerten Datentypen zu übertragen. Der Vorschlag enthielt den Link zum Siemens-Beispiel für Serialize/Deserialize.
 
Zurück
Oben