WinCC flex - KTP600 - Strings in Textlisten

Pico1184

Well-known member
Beiträge
327
Punkte Reaktionen
9
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen,

ich habe einen DB in welchem Werkstückdaten mit folgender Struktur stehen:

Code:
WKS_Name : String[50]
Abstand : Real
Toleranz_Plus : Real
Toleranz_Minus : Real

vorerst habe ich 10 Datensätze dieser Struktur im DB.

Habe mir gedacht, dass ich in WinCC flex ein symbolisches EA Feld anlege und dort den "WKS_Namen" auswählen kann.
Dann soll anhand der Auswahl an dem symbolischen EA Feld an drei EA Felder die zugehörigen Werte (Abstand etc..) erscheinen und geändert werden können.

Kann ich irgendwie die Strings (WKS_Name) in eine Texliste bekommen und dann anhand der ausgewählten Indexnummer auf die jeweilige Struktur zugreifen???

Grüße Pico
 

Blockmove

Supermoderator und User des Jahres 2019
Teammitglied
Beiträge
10.386
Punkte Reaktionen
3.028
Du kannst in jeden Eintrag einer Textliste ein Variablenfeld einfügen.
Drück einfach mal die rechte Maustaste im Eintrag einer Textliste.
Die entsprechende Variable sollte aber ständig eingelesenwerden.

Gruß
Dieter
 

Blockmove

Supermoderator und User des Jahres 2019
Teammitglied
Beiträge
10.386
Punkte Reaktionen
3.028
Ich hab noxh kein KTP verbaut, aber da diese Funktion ja sogar auf einem OP77B geht, geh ich mal davon aus, dass auch ein KTP funktioniert.

Gruß
Dieter
 
OP
P

Pico1184

Well-known member
Beiträge
327
Punkte Reaktionen
9
Nee also beim KTP600 geht da nix!

Nur bei den Bitmeldungen kann ich Variablen einfügen....bei den Textlisten aber nicht!

Grüße Pico
 

Sinix

Well-known member
Beiträge
1.588
Punkte Reaktionen
216
Zuviel Werbung?
->Hier kostenlos registrieren
Mit welcher Software arbeitest du WinCCflex 2008 oder TIA?

Wie der Name schon sagt: Textliste, können hier Texte eingegeben werden, allerdings werden diese einem Index (z.B. Integer) zugeordnet.
Ein Variablenfeld ist bei Basic-Panels definitiv nicht möglich.

Alternativ kannst du dir eine Indexvariable bilden, die über zwei Tasten um 62 (Strukturgröße) erhöht/verringert wird und entsprechend 4 Felder anzeigen.

[Name] DBnummer.[Index].0 Type String
[ Abstand] DBnummer.[Index].50 Type Real
[T Plus] DBnummer.[Index].54 Type Real
[T Minus] DBnummer.[Index].58 Type Real

[Taste Prev] [Taste Next]
(verringer Index um 62) (erhöhe Index um 62) (Indexgrenzen parametrieren)

mFG MK
 
OP
P

Pico1184

Well-known member
Beiträge
327
Punkte Reaktionen
9
Ich nutze WinCC flexible 2008.

Also ich habe es jetzt so gemacht:

- DB mit 20 Datenspeicher der Struktur
- ein Datensatz für aktuell ausgewählt
- je nach Auswahl (Indexvariable) kopiere ich dann über "Blokmove" den
Speicherplatz in den aktuell ausgewählten welchen ich dann im TP anzeige.

Jetzt habe ich nur ein Problem. Wie bekomme ich es hin das auch Daten über das TP geändert werden können???

Momentan kopiere ich ja die Daten aus den Speicherplätzen in den "aktuellen", d.h. ich kann im TP
nichts schreiben da der Blockmove dies immer überschreibt.

Wie bekommt man es hin das die Daten aus den Speicherplätzen in den aktuellen geschrieben werden, dann vom TP aus geändert werden können
und wieder zurück in den jeweiligen Speicherplatz kopiert werden.

Habe es über einen zweiten Blockmove probiert der umgedreht wie der erste kopiert, aber das funktioniert ja nicht, ist ja sozusagen eine Deadlock....

Und das alles ohne einen Button Werte übernehmen etc. drücken zu müssen!

Grüße Pico
 

volker

Supermoderator
Teammitglied
Beiträge
5.622
Punkte Reaktionen
976
führe den blockmove nicht permanent durch.
also nur mit der flanke zum blättern der datensätze.
nun kannst du die daten im arbeits-db ändern. schaltfläche 'Speichern' einfügen.
mit der pos-flanke vom speichern die daten in den daten-db kopieren.

oder du machst ein weiteres feld mit anderen variablen und kopiers diese dann in den daten-db
 

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.148
Punkte Reaktionen
2.745
Zuviel Werbung?
->Hier kostenlos registrieren
Also ich habe es jetzt so gemacht:

- DB mit 20 Datenspeicher der Struktur
- ein Datensatz für aktuell ausgewählt
- je nach Auswahl (Indexvariable) kopiere ich dann über "Blokmove" den
Speicherplatz in den aktuell ausgewählten welchen ich dann im TP anzeige.

Hallo,
ich würde mir hier den Blockmove komplett (er-)sparen sondern eher mit den Möglichkeiten der Visu arbeiten.
Es gäbe da z.B. die Multiplex-Variablen. Hier kannst du deinen E-A-Feldern die MUX-Variablen zuordnen und über deine Button-Anwahl selektierst du den gewünschten Datensatz ... Nun kannst du auch editieren :p

Gruß
Larry
 

Tigerente1974

Well-known member
Beiträge
1.816
Punkte Reaktionen
290
Ich mach das genauso wie Pico.
Um sicherzugehen, dass der Pointer immer stimmt, sieht das bei mir etwa so aus:

Daten-Struktur:
-Programmname
-Daten
-...

1. Seite für Auswahl des Parameters. Per Pfeiltasten oder Direkteingabe kann der Zeiger (INT-Variable) verändert werden. Bei Aufruf dieser Seite wird der Zeiger einmalig mit dem Wert des aktuell gewählten Programms geladen. Auf der Seite führe ich den Blockmove immer mit Loslassen der Pfeiltasten oder Bestätigen der Direkteingabe durch. Der Blockmove kopiert die Daten des Feldelements in einen Edit-DB, der die Datenstruktur genau 1x hat. Ich zeige auch gleich den String mit dem Namen an. So sieht der Bediener immer, wie das jeweilige Programm heißt.

2. Der Bediener drückt einen "Edit-Button". Ich springe einen Seitenbereich an, in dem die Elemente aus der Struktur per Ein-/Ausgabefeld verändert werden können. Hier befinden sich natürlich die Variablenzugriffe auf den Edit-DB.

3. Dieser Seitenbereich kann nur über eine Seite feste verlassen werden. Hier befinden sich die Buttons für "OK" (speichern) oder "Abbruch". Bei Loslassen von "OK" schreibe ich wiederum einmalig per Blockmove vom Edit-DB zurück in den Daten-DB. Weil der Zeiger seit dem Aufruf nicht mehr verändert worden sein kann, benutze ich diesen beim Speichern um auf das korrekte Feldelement zu zeigen. Bei Abbruch wird der Editierbereich halt verlassen ohne etwas zu schreiben.

Vorteil: Man kann noch einmal "abbrechen". Das geht nicht, wenn man direkt auf den Daten-DB zugreift.
Nachteil: Das Prozedere mit dem Umkopieren.
 
OP
P

Pico1184

Well-known member
Beiträge
327
Punkte Reaktionen
9
Bei Aufruf dieser Seite wird der Zeiger einmalig mit dem Wert des aktuell gewählten Programms geladen.

Wie machst du das?? Benutzt du eine Trigger Variable um dann den Blockmove aufzurufen??
Wie lange lässt du das Bit (den Trigger) dann gesetzt???

Grüße Pico
 

Tigerente1974

Well-known member
Beiträge
1.816
Punkte Reaktionen
290
Zuviel Werbung?
->Hier kostenlos registrieren
Das ist ja nicht wirklich kriegsentscheidend sondern nur ein kleines feature.

Bei dem Aufruf der Seite, wo die Programmauswahl für die Editierung gemacht werden kann geschieht folgendes:

An der Bildwechseltaste hängen folgende Aktionen bei Loslassen der Taste:

Setze Bit für "Daten lesen" - vom Daten-DB zum Edit-DB
Setze Wert "Pointer" = "aktuelles_Programm" - beides sind INT-Werte

Wegen Aktion bei Loslassen wird das Setzen auf der HMI-Seite ja nur einmal gemacht. Direkt nach dem Blockmove wird das gesetzte Bit im Programm auch wieder zurückgesetzt. Das Gleiche passiert bei den Pfeiltasten/Direkteingabe auf der Auswahlseite.
 
Oben