"Arrayverwaltung" in WinCC flexible, machbar?

KarlOtto

Level-1
Beiträge
29
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forummitglieder,

ich habe hier eine CPU 315-2DP (v1), die via PROFIBUS-DP mit einem TP177B verbunden ist, das ich mit WinCC flexible 2008 (ich meine SP2) projektiere.

An besagtem TP soll der Bediener eine alpanumerische Zeichenfolge (nicht mehr als 8 Zeichen) aus einer Vorgabe von ca. 60 Stück auswählen können.
Das ist aktuell wie folgt realisiert: In der WinCC-Projektierung gibt es eine Textliste. Die Namen der Einträge dieser List sind identisch mit den Vorgaben.
Mit einem EA-Feld wählt der Bediener einen Eintrag und in einer Variablen (die via PROFIBUS-DP an die CPU kommuniziert wird) wird der
Index des Eintrags hinterlegt. In der CPU (genauer: in einem Instanz-DB) liegt ein 2-dimensionales Array aus Bytes, aus dem dann
an der Stelle [Index][0-7] die Zeichen ausgelesen und im weiteren Programmablauf verwendet werden.

Mein Anliegen ist, eine Änderung des Arrays (Einträge hinzufügen, entfernen) über das TP zu implementieren, die zur Laufzeit ohne die Verwendung eines
PGs durchgeführt werden kann. Habt ihr eine Idee?

Den Teil in der CPU müsste ich hinbekommen. Ich würde das Array größer als notwendig auslegen, sagen wir 100x8 Bytes und neben den Bytes die
aktuelle Länge hinterlegen.
In einem EA-Feld am TP gibt Fachpersonal eine Zeichenfolge ein und betätigt entweder die Schaltfläche Entfernen oder die Schaltfläche Hinzufügen,
woraufhin in der Steuerung eben diese Eingabe entfernt oder hinzugefügt wird. Oh ich sehe noch ein Problem: Wie ermögliche ich die Eingabe von
bspw. 00OQLRP1?

Wie passe ich dem das Auswählen durch den Bediener an, der ausdrücklich wählen soll und nicht selber eingeben!?

Das Array muss zwingend aus Bytes bestehen, String bringt nichts. Möglich währe ein Struct-Array, die Zeichen müssen aber
zeichenweise zur Verfügung stehen.
 
Verstehe ich nicht was du mit Löschen meinst?Du kannst doch keine Variable löschen vom Panel.Du könntest höchstens mit Löschen in den entsprechenden Index
Null schreiben.Das bedeuted die Adresse wäre wieder frei für Daten.Desweiteren wäre hinzufügen eine Adresse mit Null suchen und dort was eintragen.

Oder verstehe ich das nicht richtig?Das muss zuerst geklärt werden.Die Anzahl der Array-Elemente bleibt.Ein nicht mehr benötigter Eintrag wird mit Null besetzt in dem entsprechendem Index.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also verstehe ich das richtig...

Du hast eine Textliste mit 60 Einträgen (immer fix). Diese Textliste wird in ein 2D Array geladen (2x Anzeige der Textliste auf je 1 Index des Arrays).
Du willst nun bis zu 100 statt 2 Felder haben.

Mein Ansatz wäre:

Eine Textliste mit den 60 Einträgen auf eine ArrayOfByte[0..7] zeigen lassen.
Eine Textliste oder Numerische Eingabe vorsehen für Auswahl des Index des Zielarrays[0..100][0..7] (Natürlich auch 0-100 begrenzen)
Einen Button zum "laden" des Wertes

Beim Laden Inhalt von dem Eintragsarray in den ausgewählten Index im Zielarray.

Anzeige der einzelnen Inhalte durch EA Feld möglich. (ggf. Multiplexvariable) (Das wäre der zweite Ansatz, Textliste auf Multiplexvariable und "durchschalten" des Index 0-100)

Grüße

Marcel
 
Entschuldigung, dass mein Anliegen nicht klar wurde.In der Steuerung gibt es ein Array a la "einArray: ARRAY[ 0 .. 99 ][ 0 .. 7 ] OF BYTE".Die Bytes (ASCII-Zeichen) einArray[ einIndex ][ 0-7 ] sind eine Identnummer.Es müssen nun am TP zwei Funktionalitäten gewährleistet werden.1. Der Anlagenbediener muss eine dieser Identnummern auswählen können. Das nach Möglichkeit einfach (also nicht bspw. "Arrayelement 3", sondern eher "Identnummer BlaBlaBla").2. Das Wartungspersonal muss zur Laufzeit über das TP (ohne PG) Identnummern in das Arrayaufnehmen können (oder auch entfernen), die der Bediener dann natürlich auch wählen können muss.Was ich mit Löschen meine: Sei das Array wie beschrieben. Aktuell gibt es aber nur knapp 60 IDs. Also kann ich am Index 61 noch eine Hinzufügen, zur Laufzeit, einfach zeichenweise reinschreiben. "Löschen" würde ich, indem ich die Variable, die die aktuelle Länge hält, um 1 verringere und ggf. die auf die zu entfernende ID folgenden IDs um 1 aufrücke.Eben an diesen Vorgang muss sich die WinCC-Projektierung "anpasen".
 
Irgendwie kommt mir deine Aufgabenstellung eher wie eine Rezeptfunktion vor.Du wählst aus vorhandenen Datensätzen was aus und schickst es an die SPS herunter.Auch wenn es in diesem Fall nur eine Nummer ist.Datensatz löschen und Datensatz neu anlegen sind typische Standartfunktionen eines Rezepteditors.
Die Indexnummer ist eigentlich konstant.
Allerdings weiss ich jetzt nicht viel darüber was das WinnCC flexible alles für Rezeptfunktionen kann.War aber nur so laut gedacht jetzt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja das klingt wirklich nach der Rezeptur.

Du kannst als Variable eine Fortlaufende Nummer oder den Namen als String (auf 7 Zeichen begrenzbar) anlegen und dann Datensätze anlegen.
Guck Dir das doch einfach mal an, wenn das TP das unterstützt!

Grüße

Marcel
 
Ich glaube KarlOtto meint, wie kann man variable textlisten realisieren, deren Inhalt sich zur Laufzeit ändern lässt.
Oder lieg ich da falsch? Würde mich jedenfalls auch mal interessieren, ob es da was im WinCCflex gibt oder jetzt im TIA.
 
Zurück
Oben