Flex - mehrere Textlisten -> 1 Anzeigefeld ?

rs-plc-aa

Level-1
Beiträge
727
Reaktionspunkte
57
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

kann man in WinCC flexible einem symbolischen E/A Feld mehrere (falls 32 Bit nicht ausreichen) Textlisten zuweisen ?

Die Antwort ist NEIN - ich weiß, aber was gibt es sonst für Möglichkeiten ?

Vielleicht übereinander legen und transparent machen oder so was ähnliches ?

Ich habe auch gesehen daß der Textliste statt Bit 0..31 ein Bereich (... - ...) vorgegeben werden kann - allerdings streikt hierzu die Hilfe ein wenig.

Wo würde dieser Bereich definiert ?

Also konkret: Mein Problem ist daß ich in einem Symbolischen E/A Feld eine Textliste anzeigen will die 64 Einträge umfasst. Die 64 Bits dazu liegen in einem DB (fortlaufend).

Falls wer nen Tip hat...
 
Du kannst doch bei symbolischen Textlisten (wie auch in ProTool) mit Dezimalwerten arbeiten. Jeder Text hat einen Dezimalwert (1, 2, 3, ...) und ja nachdem, welcher Dezimalwert anliegt wird der dazugehörige Text eingeblendet. Wenn ich mehrere Teile benötige, dann teile ich das auf,

Hier mal für ProTool 1 Byte High, 1 Byte Low.
Für Low ergeben sich 255 Texte.

Also

1. Block: High = 0, Low = 1..255
2. Block: High = 1, Low = 256-511
3. Block: High = 2, Low = 512-767

usw.

Mit dem High-Wert wähle ich den Block, mit dem Low-Wert dann die Textnummer.

Leider ist das in ProTool ziemlich anstrengend, da man die Textnummer dezimal vorgeben muß und keine Symboltexte imortieren/exportieren kann.
Aber WinCCFlex ist da ja bestimmt besser :ROFLMAO:!

PS: Aber für 64 Texte fortlaufend ist das eigentlich nicht das Hauptproblem, du mußt das Ganze nur umrechnen. In deinem Feld darf ja immer nur ein Bit gesetzt sein, also Bit-Nummer 1 bis Bit-Nummer 64, das kannst du z.Bsp. per Schleife durchlaufen lassen, bis zum ersten gesetzten Bit, der Zählwert kommt an die Symbolliste.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber WinCCFlex ist da ja bestimmt besser :ROFLMAO:!
Ja Ja -> Ärger mich halt :-D (ich habe ProTool nie ernsthaft kennengelernt - daher bin ich als "Unbefangener" wahrscheinlich der "etwas tolerantere Flexible-User")
PS: Aber für 64 Texte fortlaufend ist das eigentlich nicht das Hauptproblem, du mußt das Ganze nur umrechnen. In deinem Feld darf ja immer nur ein Bit gesetzt sein, also Bit-Nummer 1 bis Bit-Nummer 64, das kannst du z.Bsp. per Schleife durchlaufen lassen, bis zum ersten gesetzten Bit, der Zählwert kommt an die Symbolliste.

Kannst du das bitte noch ein wenig "anders" erklären ?

Du meinst mit "Schleife durchlaufen lassen" eine kleine FC die jeweils das gesetzte Bit rausfiltert und die Zahl daraus bildet ?

Ich bin dummerweise erst im Zuge einer Erweiterung an diese "Hürde" gestossen sonst hätte ich das von Anfang an vielleicht anders gemacht - z.B. statt eines Bit zu setzen eine INT-Zahl in immer die selbe Variable schreiben...

Ich habe auch gerade etwas experimentiert und habe 2 Felder übereinander gelegt und mit einem Bit das darüberliegende sichtbar/unsichtbar gemacht -> gefällt mir aber nicht so da eben in der Projektierung das darunterliegende leicht (vor allem später mal) übersehen werden kann...
 
Ja Ja -> Ärger mich halt :-D (ich habe ProTool nie ernsthaft kennengelernt - daher bin ich als "Unbefangener" wahrscheinlich der "etwas tolerantere Flexible-User")
Das konnte ich mit glatt nicht verkneifen :ROFLMAO:!

Kannst du das bitte noch ein wenig "anders" erklären ?

Du meinst mit "Schleife durchlaufen lassen" eine kleine FC die jeweils das gesetzte Bit rausfiltert und die Zahl daraus bildet ?

Ich bin dummerweise erst im Zuge einer Erweiterung an diese "Hürde" gestossen sonst hätte ich das von Anfang an vielleicht anders gemacht - z.B. statt eines Bit zu setzen eine INT-Zahl in immer die selbe Variable schreiben...

Ich habe auch gerade etwas experimentiert und habe 2 Felder übereinander gelegt und mit einem Bit das darüberliegende sichtbar/unsichtbar gemacht -> gefällt mir aber nicht so da eben in der Projektierung das darunterliegende leicht (vor allem später mal) übersehen werden kann...

Es darf ja auch für das jetzige Textfeld, daß jeweils mit einem Bit aus 32 einen Text aufruft, nur immer ein einziges gesetztes Bit enthalten.

Du nimmst ein DBD und läßt es in einer LOOP bitweise durchlaufen (indirekte Adressierung muß hier leider sein). Für jede Null eins hochzählen und weiter, bei einer 1 eins hochzählen und raus aus der Loop. Ist das 1. DBD leer gehst du in das nächste und zählst das durch. So bekommst du die Nummer der Bits, das gesetzt ist. Diese legst du dann an die Symbolliste als Textnummer an.

Hatte Volker nicht einen Baustein auf seiner HP???, Weiß nicht mehr genau, kannst ja mal nachschauen.
 
Zuletzt bearbeitet:
Danke schon mal. Es wird sich zwischen 2 Lösungen entscheiden.

1.) Dein Vorschlag mit den Bits zählen (was ich noch genauer recherchieren muß)

-> Vorteil: Der biterzeugende Baustein muss nicht geändert werden.

2.) Umbau des biterzeugenden Bausteins auf "Zahl in INT schreiben"

-> Vorteil: keine zusatzprogrammierung (wenn dann mal geändert) notwendig / Nachteil: wahscheinlich mehr Aufwand

Gemeinsamer Nachteil: Umstellung der Liste in Flex (aber da komme ich ja bei mehr als 32 Einträgen sowieso nicht drum rum)

Ich schau jetzt noch kurz bei Volker vorbei, dann iss gut für heute...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo RS,

ist doch alles nicht soo schlimm. Wenn du die entsprechenden Bits schon hast, kannst du die Textausgabe auch wie folgt steuern:

Code:
//*** 1 == Störung
      L     1
      U     #SM_PUMPE
      SPB   STPU
//*** 5 == Betrieb
      L     5
      U     #K_PUMPE
//    U     #PUMPE_TAGBETRIEB
      SPB   STPU
//*** 4 == AUS
      L     4
      UN    #K_PUMPE
      SPB   STPU
//*** Textausgabe "???"
      L     0
STPU: T     #P.HMI.OUT.STATUS_PUMPE
Der Vorteil ist, du kannst die Priorität anhand der Reihenfolge festlegen. Je nach Anwendung kann das von Vorteil sein. Meistens ist es von Vorteil.


Gruß, Onkel
 
Ok, nach ner Nacht drüber schlafen sehe ich das so:

Code:
FC "HMI_Statuszeile"
 
DB Nr. mit den Bits übergeben
 
AUF DB[DB_Nr]
L 0
CLR
 
U DBX4.0
INC 1
SPB exit
 
U DBX4.1
INC1
SPB exit
 
...
 
exit: nop 0
T "HMI_Statuswort"
BE

So bald das Bit mit "1" erreicht wurde gehts zum Ausgang. Bis dahin wird immer um 1 inkrementiert und an exit der Akku reinkopiert. Ich muß nachher nur noch schnell schauen ob der erste Listeneintrag 0 oder 1 ist - wenn 0 dann muss ich bei der ersten Und Abfrage das INC weglassen...

Das wäre in einem Rutsch erledigt (Ohne Schleife - das habe ich jetzt sowieso noch nicht verstanden wofür die gewesen wäre, aber die Inspiration war goldrichtig...)

@ Onkel Dagobert: Dein Vorschlag bestätigt das, nur in meinem Fall ist es einfacher nur hochzuzählen da die Stuktur der Bits bereits festgelegt ist - ich brauche also nur die passende "Zeilennummer scharf machen"...
 
Ok, nach ner Nacht drüber schlafen sehe ich das so:

Code:
FC "HMI_Statuszeile"
 
DB Nr. mit den Bits übergeben
 
AUF DB[DB_Nr]
L 0
CLR
 
U DBX4.0
INC 1
SPB exit
 
U DBX4.1
INC1
SPB exit
 
...
 
exit: nop 0
T "HMI_Statuswort"
BE
So bald das Bit mit "1" erreicht wurde gehts zum Ausgang. Bis dahin wird immer um 1 inkrementiert und an exit der Akku reinkopiert. Ich muß nachher nur noch schnell schauen ob der erste Listeneintrag 0 oder 1 ist - wenn 0 dann muss ich bei der ersten Und Abfrage das INC weglassen...

Das wäre in einem Rutsch erledigt (Ohne Schleife - das habe ich jetzt sowieso noch nicht verstanden wofür die gewesen wäre, aber die Inspiration war goldrichtig...)

@ Onkel Dagobert: Dein Vorschlag bestätigt das, nur in meinem Fall ist es einfacher nur hochzuzählen da die Stuktur der Bits bereits festgelegt ist - ich brauche also nur die passende "Zeilennummer scharf machen"...

Code:
      AUF   DB[DB_Nr]

      L     P#0.0
      L     #Start_DW                   // Startnummer des 1. Datenwort, als INT in IN deklariert
      ITD                               // 16 Bit in 32Bit
      SLD   3                           // ins Pointer-Format
      +D                                // dazurechnen
      T     #pointer_1                  // als DWord in Temp deklariert

      L     0                           // Ergebnis vorbelegen mit Null
      T     #ergebnis

      L     64                          // Anzahl zu zählender Bits
SC01: T     #zaehler                    // als Int in Temp deklariert

      U     DBX [#pointer_1]            // Datenbit
      SPB   RAUS                        // Bit ist 1, also rausspringen aus der Schleife
      L     #ergebnis                   // bei Bit = 0, Ergebnis
      L     1                           // um 1 erhöhen
      +I    
      T     #ergebnis

      L     #pointer_1                  // Zeiger erhöhen auf nächstes Bit
      L     P#0.1
      +D    
      T     #pointer_1

      L     #zaehler
      LOOP  SC01                        // Schleife solange, bis #zaehler auf 0

      L     0                           // wenn die Loop-Schleife ohne Sprung
      T     #ergebnis                   // verlassen wurde, ist kein Textbit gesetzt
      SPA   KTXT

RAUS: L     #ergebnis                   // wenn über "RAUS" hierhergesprungen wurde
      L     1                           // nochmal um 1 erhöhen, weil das gesetzte Bit
      +I                                // noch nicht gezählt wurde
      T     #ergebnis

KTXT: NOP   0

      L     #ergebnis
      T     #Textnummer                 // als Int in OUT deklariert

Mit der Schleife könnte das so gehen, probiers mal.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Ralle...

Ohne daß ich es jetzt schon testen konnte würde ich sagen das geht.
Die FC ist fertig !

Jetzt habe ich aber den dumpfen Verdacht daß mir jetzt alle Texte falsch angezeigt werden da die Liste die aus den 2*32 Bits zu einer verschmolzen ist so sortiert ist wie es von ProTool her auch schon üblich war -> nicht Bit für Bit ab der Startadresse sondern High/Low Wort mäßig :twisted:

Kann ich jetzt bedenkenlos die Sortierung linearisieren oder habe ich jetzt irgendwas noch übersehen ?

edit: Im Prinzip wäre es sogar ein Segen nun endlich eine fortlaufende Liste zu haben ...
 
Zuletzt bearbeitet:
Es wäre auch kein Problem vor dem Zählen, die Bytes zu vertauschen, so daß es paßt, aber wie du schon angemerkt hast, hat alles eine Für und Wider!
 
Ja klar - aber ich freu mich ja daß ich es gemerkt habe bevor ich es gemerkt habe :D

Wenn alle Listen die gleiche Reihenfolge haben ist das *denke ich* schöner...

Auf jeden fall auch zum Hinzufügen -> es wird einfach nur noch fortlaufend angehängt.

Habs bereits umnummeriert, jetzt fehlt nur noch der Test.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es funktioniert !

Test erfolgreich absolviert...

Einzig das Beobachten (online) der FC fällt ein wenig schwer bzw. ist nicht so ganz nachvollziehbar - aber er spuckt stets die richtige Zahl aus *GanzArgFreu*

Danke nachgeholt...
 
Zurück
Oben