TIA Nichtoptimierter DB mit Bits in ein Array konvertieren

Pikador

Level-2
Beiträge
249
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
an mehreren Anlagen die Weltweit zerstreut sind gibt es jeweils ein DB mit Meldebits. Der DB ist nicht optimiert und die Anzahl der Bits variiert. Ich Schätze zwischen ca. 2 bis 8 Tausend. Die Bausteine dürfen nicht geändert/optimiert werden.
Ist es folgendes möglich bei TIA und S7-1500:
Die Anzahl der Bits auslesen und in ein Array kopieren?
Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Anzahl der Bit-Variablen kann man nicht auslesen, aber aus Anfangs- und Endadresse des belegten Speicherbereichs berechnen.
Vermutlich kann man Deinen Quell-Speicherbereich auch quick'n'dirty als Block in das Bool-Array kopieren. Oder als Bausteinparameter mit AT überlagern. Oder mit der Anweisung SCATTER kopieren. Hatten wir gerade vor ein paar Tagen hier im Forum.

Harald
 
Die Anzahl der Bit-Variablen kann man nicht auslesen, aber aus Anfangs- und Endadresse des belegten Speicherbereichs berechnen
Gute Idee. Die Größe bekomme ich mit ATTR_DB raus. Laut Doku, gibt die Funktion die Länge des DB's, wenn er nicht optimiert ist, aus.
Da man bei Siemens die Array Länge nicht zur Laufzeit definieren kann, muss ich einen großen erstellen in dem auf jedem Fall alle Bits passen. Wenn aber nur wenige Bits benutzt werden, ist es unschön jedes Mal den Kompleten Array zu iterieren. Deshalb die Anzahl wäre schon gut.

Quick'n'dirty bekomme ich den DB in einen Array mit (U)BLKMOV kopiert. Alles auf einem Rutsch.
SCATTER? Damit muss man wieder den DB häppchenweise lesen.
Danke!
 
Darf man fragen, warum Du einen nicht-optimierten DB mit Bits in ein Bool-Array kopieren willst? Damit die Verwendung der Symbol-und Kommentarfreien Bits viel unverständlicher wird? ;)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Bits in dem nicht optimierten Baustein sind Störmeldungen. Die Aufgabe ist, die Meldungen auszuwerten. Steht eine Meldung an, ist eine gekommen, gegangen, Anzahl der Anstehenden Meldungen, Anzahl Meldungen pro Schicht, wie lange dauert es bis Meldung quittiert ist usw. Quasi statistische Auswertung in SPS! Ob das sinnig oder unsinnig ist, na ja. Für mich absoluter Unsinn. Mit Python und Dash über OPC UA hätte ich das viel eleganter, effizienter, umfangreicher und, und, und an einem Tag gemacht. Der Kunde, große Maschinenbauer, möchte es aber so haben. Also machen wir es.
Gruß
 
Aha, ok, und Du möchtest das nun vermutlich in Schleifen abhandeln. Verstehe. Da ist ja einiges dabei was nicht mit Word/DWord für viele Meldungen gleichzeitig geht.

Harald
 
Da man bei Siemens die Array Länge nicht zur Laufzeit definieren kann, muss ich einen großen erstellen in dem auf jedem Fall alle Bits passen. Wenn aber nur wenige Bits benutzt werden, ist es unschön jedes Mal den Kompleten Array zu iterieren. Deshalb die Anzahl wäre schon gut.

Ich habs zwar noch nicht probiert, sollte aber ab V17 möglich sein.

Gruß

A.
 
Da man bei Siemens die Array Länge nicht zur Laufzeit definieren kann, muss ich einen großen erstellen in dem auf jedem Fall alle Bits passen. Wenn aber nur wenige Bits benutzt werden, ist es unschön jedes Mal den Kompleten Array zu iterieren. Deshalb die Anzahl wäre schon gut.
Wenn aber nur wenige Bits benutzt werden bzw. überhaupt zum Array gehören, dann wäre das Iterieren über die nicht dazu gehörenden Bits alles andere als quick, sondern unnötig slow und trotzdem extrem dirty. ;)
 
Zurück
Oben