WinCCflexible mehrdimensionales Arrays

Matze001

Level-3
Beiträge
2.814
Reaktionspunkte
573
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,


mal eine für mich etwas komplexere Frage zu WinCCflex!


Ich möchte ein Array anlegen. Alles halb so wild, so lange es eindimensional bleibt.
Wünschenswert wäre ein dreidimensionales Array, also Array{X,Y,Z}.


Der Hintergrund ist folgender: Ich muss eine Palette visualisieren, und habe dabei von Projekt zu Projekt andere Ebene, Reihen und Spaltenanzahlen, und würde es gern so flexibel wie möglich halten. Somit fällt ein eindimensionales Array flach.


Bisher gibt es für jeden Platz einen Zustand, was natürlich nen Arsch voll Powertags verbrät!
Daher würde ich gern mit einer Rangiervariable und ner Schleife mein Array füllen!


Also viel Blabla um eine kleine Frage zu stellen:


Ist es Möglich?


Wenn ja -> wie?
Wenn nein -> sinnvolle Alternativen?


Grüße


Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch wenn du nicht auf die Problemstellung eingehst, erkläre ich dir die Hintergründe (auch wenn es egal ist ob es nun eine Palette, ein HRL, oder sonst was ist.

Wir haben mehrere Konstellationen:

eine Palette mit nur einer Ebene, und X Reihen und Y Spalten.
Mehrere Paletten übereinander mit X Ebenen, Y Reihen, Z Spalten
Regale mit X Ebenen, Y Reihen... manchmal sogar Z Spalten (mehrere Teile hintereinander)...

Da die Palettierung so universell wie möglich sein soll, möchte ich als Ebenen, Reihen und Spalten damit abdecken.

So da du das nun weißt können wir uns dreidimensionalen Arrays zuwenden ;)

Grüße

Marcel
 
So ich pushe das ganze mal.

Ich habe ein wenig experimentiert (Danke Dalbi für die Anregung) und habe festgestellt das eine Struktur quasi ideal für mich ist.
Das war super, bis zu dem Moment an dem ich realisiert habe das jede Variable in der Struktur einen PT verbraucht, und ich damit also nichts gewonnen habe.

Es wäre so geil gewesen. Einen Bildbaustein erstellen, und dann immer nur eine Struktur dranklatschen, fertig!

Es gibt sicher keine Chance eine Struktur so hinzubiegen, dass sie nur einen PT verbraucht?

Gibt es alternativen, zu den 1D-Arrays und Script (Pointer), oder der Struktur?

Grüße

Marcel
 
Wäre es den nicht möglich ohne Structur zu Arbeiten und nur ein Array an den
Bildbaustein zu binden. So ein Bildbaustein wird ja nicht ständig bearbeitet und
könnte ja somit als abgeschlossenes Objekt gesehen werden.
1 Array entspricht ja nur 1PT.
 
Ich weis es, aber das problem ist:

Beispielhaft habe ich 2 reihen und 2 spalten!

Dann hab ich nen Datensatz:

DATEN.REIHE1.SPALTE1
DATEN.REIHE1.SPALTE2
DATEN.REIHE2.SPALTE1
DATEN.REIHE2.SPALTE2

Bei 3 wäre das

DATEN.REIHE1.SPALTE1
DATEN.REIHE1.SPALTE2
DATEN.REIHE1.SPALTE3
DATEN.REIHE2.SPALTE1
DATEN.REIHE2.SPALTE2
DATEN.REIHE2.SPALTE3
DATEN.REIHE3.SPALTE1
DATEN.REIHE3.SPALTE2
DATEN.REIHE3.SPALTE3

Somit rutscht dir etwas dazwischen, wenn du mehr Plätze bekommst.
Bisher errechne ich mir die Pointer mir einem Script, und ich komme immer mehr dazu zu glauben das es anders nicht einfacher wird.

Grüße

Marcel
 
Ich mache es ja bisher so. Ich errechne mit einem Script die Adresse der gewünschten Variable(n) und nutze diese Pointer dann für den Aufruf der Variablen. D.H. aber ich habe pro Palettenplatz einen Powertag (Da die Datensätze nicht nur einen INT-Wert beinhalten, sondern einen ganzen STRUCT mit verschiedenen Variablentypen die aber nicht alle für die Visu relevant sind)

In der Hoffnung es eleganter lösen zu können wollte ich es halt mit 3D-Arrays machen, aber das geht ja wohl leider nicht so wirklich. Schade eigentlich.

Grüße

Marcel
 
Ich weiß ja warum du auf deiner PT achtest, da 128 schnell Verbraucht sind. Kannst du den nicht dafür sorgen das die Variablen im gleichen Format rüberkommen, am besten in Doppelwort. Das wandeln auf Steuerungsebene ist doch bei deiner Basis nicht relevant.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe 512 Powertags, aber wenn ich 128 einsetzen könnte, sind mal eben 500€ EK gesparrt, daher ein wenig aufwand treiben und gucken was geht.

Ich könnte die Variablen Doppelwortweise rüberschaufeln, aber das macht mein Ziel nicht einfacher. Der Plan ist auf das Script so gut es geht zu verzichten, nicht noch mehr Scriptarbeit zu leisten.

Nehmen wir mal an ich schaufel alles als DW rüber. Dann mache ich ein Script mit einer Schleife, die mir brav die Variablen zerpflückt, sortiert und in Flex bereit stellt.
Auf Variablen die ich immer Angucken will, muss ich dann direkt zugreifen, weil sie sonst nur aktualisiert werden wenn das Script durchlaufen wird. Somit wird das wieder ein riesen gebastel.

Siemens weis schon warum ein Struct nicht nur 1PT hat, weil wenn das so wäre, würde ich alles in einem riesen Struct rüber kopieren und könnte sehr günstig Visualisieren.
(Naja, ich würde sinnvolle Structs bilden, es war natürlich übertrieben dargestellt).

Ich lasse es also wie bisher. Ich errechne mir die Anfangsadresse meines Datensatzes, und baue mir Pointer für Bits (Die werden Byteweise geholt), Bytes, Integer und Real und zeige dann direkt darauf. (Das macht 26PT).
Für jeden Platz wo ich den Status anzeigen will (Integer) brauche ich einen weiteren Powertag. Macht bei einer 12x12 Palette schon 144PT aus. Weitere Statusanzeigen (auch integer) kann ich mir dann aber holen indem ich dem ersten Integer mehr Arrayelemente gebe, brauche also nicht mehr Powertags. Da die größte Palette bisher 20x20 war (400PT + 26PT Datensatz) habe ich noch genug Variablen für die restliche Visualisierung.

Grüße

Marcel
 
Sag mal wäre es nicht eine Möglichkeit Vaiablen per OPC abzuholen, ich meine
nur die Palette, den OPC Server hat du ja dabei. Ein Kollege macht seine Visus nur mit .net
und die Anbindung über OPC. Wie er das genau macht weiß ich jetzt nicht, müsste ich mal
fragen.
Wenn es Funktionieren sollte, möchte ich pro eingesetzten PC 250,-€, den Rest kannst du
mit deiner Fa teilen ;)
 
OK Freizeit-Wochendaufgabe... OPC...

Werd ich mal verfolgen, könnte was werden.

Grüße

Marcel

Edit: Show Canceled... OPC-Variablen brauchen auch PTs...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So auch wenn es ein Doppelpost wird! Dumm sterben lassen will ich niemanden!

Ich habe dank des super Tipps von Thomas_V2 (DANKE nochmal an dieser Stelle) folgendes umgesetzt:

In der SPS habe ich ein dreidimensionales Array, welches meine Daten enthält.
Außerdem habe ich ein Eindimensionales Array OF INT, in das ich meine Zustandsdaten kopiere, damit ich einen zusammenhängenden Block bekomme.
Dieses Array habe ich in WinCCflex angebunden und benutze es in der Visu zum Anzeigen der Zustände.

Editieren tue ich wie schon vorher über ein "Popup", und zeige mit Pointern direkt auf die einzelnen Datensätze in der SPS (Pointerberechnung in einem Script).

Somit habe ich folgende Powertagnutzung:

1PT für Zustände (Array)
1PT für Anzahl (Array)
2PT für Popup und Datenmanipulation (Zustände + Anzahl)
8PT für Variablen welche die Palette definieren (Anzahl Ebenen, Reihen, Spalten, Blabla)

Somit habe ich mit 12PT eine komplette Palette abgebildet, für die ich vorher rund 400PT benötigt hätte.

Grüße

Marcel
 
Zurück
Oben