TIA Array of bool in Array of word schreiben TIA v18

Smarty160484

Level-2
Beiträge
191
Reaktionspunkte
8
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.:



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


oder selbst einen erstellen


und dann verwenden
 
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.
 
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:

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





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:



Die Array-Zugriffe: ja,
die unterschiedlichen Slice-Zugriffe (*.%X0, *.%X1 usw.): nein.
Deswegen hat @Michitronik auch den fertigen Baustein dafür mit aufgezeigt.



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.

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.
 
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.
 
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.
 

Wird bei der 6ES7 511-1AK00-0AB0 V1.6 aber doch von TIA angeboten (im Gegensatz zu GATHER_BLK)?!

Oh, wie wahr !

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 . 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:
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…