TIA Array of bool in Array of word schreiben TIA v18

Smarty160484

Level-2
Beiträge
191
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein Problem das ich in der CPU 1511-1 PN v1. 6 nicht den GATHER_BLK Baustein nutzen kann (wird erst ab v2.1 unterstützt) um ein Array of Bool in ein Array of Word zu kopieren.

Wie kann ich das in SCL sonst lösen?
Der FB ist Baustein optimiert und die Arrays sind interne statische Variablen (sollen dort auch bleiben - Bibliotheksfähiger FB)!

Mit SCL hab ich noch nicht all zu viel Erfahrung!
 
... um ein Array of Bool in ein Array of Word zu kopieren.

Wie kann ich das in SCL sonst lösen?
Der FB ist Baustein optimiert und die Arrays sind interne statische Variablen (sollen dort auch bleiben - Bibliotheksfähiger FB)!
Unabhängig von SCL oder nicht ->
per Sicht AT, z.B.:

1700869256626.png

Wichtig dabei:
die Remanenz auf "Im IDB Setzen" einstellen, damit die Sicht auch im optimierten FB möglich ist!
 
Müsste auch mit dem Slice Zugriff funktionieren.
ArrayWord[0].%X0 := BitArray[0];
ArrayWord[0].%X1 := BitArray[1];
...;
Dafür kann man einfach einen eigenen FC schreiben oder schauen, ob die LGF (Library General Funktions) eine solche Funktion bereit hält.
 
Vermutlich wird es die MLFB: 6ES7 511-1AK00-0AB0 sein. Aber ob evtl. eine neuere PLC im Schrank verbaut ist, als projektiert wurde, kann man einfach feststellen. Einfach über das Display der PLC abrufen, oder auf dem Gehäuse (sofern zugänglich) ablesen.

Zu meinem Beitrag #5 - Diesen Baustein aus der LGF V3.0
1700918582173.png

oder selbst einen erstellen
1700918652060.png

und dann verwenden
1700918718588.png
 
Müsste auch mit dem Slice Zugriff funktionieren.

Dafür kann man einfach einen eigenen FC schreiben oder schauen, ob die LGF (Library General Funktions) eine solche Funktion bereit hält.
Kann ich das auch mit einer FOR Schleife und Index machen? Da ich im Baustein die Array Größe je nach Bedarf (Konstante) ändern kann, kann ich nicht festgelegte Zuweisungen programmieren.
Es ist ein Baustein zur Verwaltung von Betriebsmeldungen, Störungen und Farbwechsel fürs HMI (Indikatoren, Ventile, Motor etc.)
Im Baustein kann ich die Anzahl der Meldungen, Störungen und Farbwechsler vorab über Konstanten konfigurieren und durch die Arrays wird das dann im IDB bereitgestellt.
Kann ja Montag mal Bilder vom Code schicken! bzw. ich packe das als Bibliothek in einer Zip Datei.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
blöde Frage:
was bedeutet Sicht AT?
Eigentlich heißt es Überlagern, aber viele (die ich kenne) sagen einfach Sicht.

Also den gleichen Datenbereich mit einer 2. Deklaration überlagern/sichten:
TIA-Hilfe schrieb:
Variablen mit AT überlagern

Beschreibung

Um auf Datenbereiche innerhalb einer deklarierten Variablen zuzugreifen, können Sie die deklarierten Variablen mit einer weiteren Deklaration überlagern. Sie haben so die Möglichkeit, eine bereits deklarierte Variable mit einem anderen Datentyp anzusprechen. Sie können z. B. die einzelnen Bits einer Variablen vom Datentyp WORD mit einem ARRAY of BOOL ansprechen.
Alternativ können Sie auch die Anweisungen "SCATTER" und "GATHER" verwenden, um Bitfolgen in ein ARRAY of BOOL zu zerlegen oder einzelne Bits zu einer Bitfolge zusammenzufassen. Diese Anweisungen finden Sie in der Task Card "Einfache Anweisungen" im Bereich "Verschieben".
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.
  • Wenn die überlagerte Variable vom Datentyp STRING, ARRAY of BYTE, ARRAY of CHAR etc. ist, sollte ihre Länge einer geraden Anzahl von Byte entsprechen.
  • 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.

Hier z.B. die Übertragung einer BIT-Struktur in ein WORD auch für die Bit-Meldungen:

1700987731902.png



Kann ja Montag mal Bilder vom Code schicken! bzw. ich packe das als Bibliothek in einer Zip Datei.
Ein paar Bilder sind oft hilfreich.
Wenn es SCL ist, kannst Du davon z.B. auch eine Quelle exportieren und dann diese hier entweder als Text in den [Code]-Tags
als Code oder die Quelle als *zip oder einfach mit einer zusätzlich angehängten erlaubten Endung (z.B. *.scl.txt) hier hochladen.
PS:
Die Code-Tags erreicht man auch über die 3 Punkte in der Icon-Leiste ganz rechts:
1700988120655.png


Müsste auch mit dem Slice Zugriff funktionieren.
Kann ich das auch mit einer FOR Schleife und Index machen?
Die Array-Zugriffe: ja,
die unterschiedlichen Slice-Zugriffe (*.%X0, *.%X1 usw.): nein.
Deswegen hat @Michitronik auch den fertigen Baustein dafür mit aufgezeigt.


:unsure:
Serialize/Deserialize wäre auch noch eine Möglichkeit.
Kommt halt vor allem darauf an, wie groß so Deine Arrays sind, für welche Möglichkeit ich mich dann entscheiden würde.
 
Leider nein, Serialize und Deserialize wird von seiner CPU noch nicht unterstützt.
:unsure:
Wird bei der 6ES7 511-1AK00-0AB0 V1.6 aber doch von TIA angeboten (im Gegensatz zu GATHER_BLK)?!

PS:
Das Problem dabei ist wohl eher der optimierte Speichebereich:
TIA-Hilfe schrieb:
Serialize: Serialisieren (S7-1200, S7-1500)
Um größere Strukturen zu serialisieren, können Sie ab der Firmware Version >= 2.0 bei einer CPU der Baureihe S7-1500 den Speicherbereich auch mit optimiertem Zugriff deklarieren.
Danach hatte ich nicht geschaut, nur nach dem Baustein an sich.
😞

PPS:
Da müsste aber auch nur das temporäre BYTE-Array nicht optimiert sein.
1700995000671.png
 
Zuletzt bearbeitet:
Ok, danke erstmal für die Hilfe. Morgen werde ich mir das auf Arbeit anschauen und euch mal mein Testprogamm für mein Meldesystem per Zip hier reinstellen (TIA v18). Damit ihr meine Problematik nachvollziehen könnt.
Das System wird in einigen Programmen schon genutzt. Ich habe es lediglich in einem Baustein zusammengefasst, optimiert und ihn Bibliotheksfähig gemacht.
 
Kann ich das auch mit einer FOR Schleife und Index machen? Da ich im Baustein die Array Größe je nach Bedarf (Konstante) ändern kann, kann ich nicht festgelegte Zuweisungen programmieren.
Es ist ein Baustein zur Verwaltung von Betriebsmeldungen, Störungen und Farbwechsel fürs HMI (Indikatoren, Ventile, Motor etc.)
Im Baustein kann ich die Anzahl der Meldungen, Störungen und Farbwechsler vorab über Konstanten konfigurieren und durch die Arrays wird das dann im IDB bereitgestellt.
Kann ja Montag mal Bilder vom Code schicken! bzw. ich packe das als Bibliothek in einer Zip Datei.
Wie @hucki bereits geschrieben hat, würde der Zugriff auf ein Array Element in einer for-Schleife gehen, aber der Slice Zugriff nicht. Macht aber bei Word oder Byte etc. wenig Sinn eine for-Schleife zu machen. Aufwand ist hier überschaubar und es ist fürs Ergebnis unerheblich, ob ich es in einem separaten FC abbilde.

Beim Thema FW aktualisieren würde ich empfehlen, dass wenn das Programm modernisiert/angepasst werden soll die FW auch auf den aktuellsten Stand zu heben. Wegen Fehlerbehebung in der FW.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
:unsure:
Wird bei der 6ES7 511-1AK00-0AB0 V1.6 aber doch von TIA angeboten (im Gegensatz zu GATHER_BLK)?!

Oh, wie wahr :confused: !

Ich hatte mich vom TIA-Portal (V16 Update 6) täuschen lassen. Und zwar hatte ich in meinem aktuellen "Projekt des Jahres" eine S71511 als Teststation, an der ich zwecks Serialize und Co. nachgesehen hatte. Serialize usw. waren ausgegraut. Wenn ich über "Gerät tauschen" die Version beliebig ändere, bleiben die Funktionen ausgegraut. Es erscheint auch nicht die Meldung "Bibiotheksdaten ändern".

Diese erscheint nämlich, wenn ich Selbiges in einem kleinen Testprojekt veranstalte. Dort sind dann auch Serialize und Co. verfügbar. Seltsam, seltsam :unsure: . Was ist das denn wieder?
 
Hier mal meine Projektdatei. Hier ist eine andere CPU verbaut (ist nur mein Testprogramm für Bibliothek)
Die ganzen Kommentare und Beschreibungen sind später für meine Kollegen (zum Verständnis)
Es gibt "Regionen" wo es mit dem Array of Bool zu Array of Word funktioniert und Regionen für die Variante vor FW2.1 (die noch leer sind)
Es betrifft den FB1000!
 
Zuletzt bearbeitet:
Zurück
Oben