# WinCC flexible: Zeiger auf Strukturen/Multiinstanzen?



## Markus (29 Juli 2007)

Hallo,

folgendes Beispiel:

Ich habe einen FB100 mit Instanzdatenbaustein DB100.

Im FB100 habe ich 10x den FB41 (PID-Regler) als Multiinstanz drin.


In der Visu (WinCC flexible RT) möchte ich eine Seite machen wo ich die Parameter der Regler einstellen kann.

Ich will aber nur eine Seite machen wenn das geht.

Wie sieht die sauberste Lösung aus das mit Bildbausteinen oder Mux-Variablen oder sonst irgendwie zu realisieren?

Ich habe quasi ein DropDown Feld mit einer Textliste der verschiedenen FB41 Instanzen, und ja nach Auswahl steht in der Variabel der Textliste ein Wert.


Früher bei Protool habe ich den Wert der Variablen als DB-Nr für die andren Variablen genommen (natürlich ohne Multiinstanz). oder bei einer Multiinstanz mit einem Skript alle Pointer gerechnet.

Aber ich bin mir sicher das dass bei WinCC flex schöner und vor allem Symbolisch geht...

Danke für eure Anregungen!


----------



## Larry Laffer (30 Juli 2007)

Hallo Markus,
ich habe das bei einem ähnlichen Problem ungefähr so gelößt, wie du es geschreiben hast.
In meinem Fall wähle ich über 2 Buttons (+ und -) und dahinterliegendem Script den gewünschten Datensatz an, den ich zum Editieren auf der Seite freigebe. In dem Script bekommt dann jeder Datensatz auch eine Überschrift (String) zugeordnet. ARRAY_OF_STRING geht ja leider nicht.

Soweit ich bisher herausgefunden habe (!?) hat WinCCFlex diesbezüglich keine erwähnenswerten Mehr-Fähigkeiten ...


----------



## Markus (30 Juli 2007)

was ist mit bildbausteinen?
war da nicht was mit struktuvariablen?

geht da was?


----------



## Jochen Kühner (30 Juli 2007)

*ja schon...*

ja, aber strukturvariablen sind nicht indirekt adressierbar!


----------



## Ralle (30 Juli 2007)

Ich Handle das auch mit einem einzigen Fenster. Aber die Daten werden in der SPS entsprechend umkopiert, da noch eine "Datenbank" in einem Datenbaustein dahintersteht, die dann mehrerer Produkte zuläßt. Hat auch den Vorteil, daß Daten im Bild geändert werden können, aber erst mit einem extra "Save"-Button übernommen werden, also nicht gleich wirken, bzw. die aktiven Daten überpinseln.


----------



## Markus (30 Juli 2007)

Ralle schrieb:


> Ich Handle das auch mit einem einzigen Fenster. Aber die Daten werden in der SPS entsprechend umkopiert, da noch eine "Datenbank" in einem Datenbaustein dahintersteht, die dann mehrerer Produkte zuläßt. Hat auch den Vorteil, daß Daten im Bild geändert werden können, aber erst mit einem extra "Save"-Button übernommen werden, also nicht gleich wirken, bzw. die aktiven Daten überpinseln.


 

so mache ich das bei rezepturen wenn ich sei sps-seitig verwalte, ist eben alles schön symbolisch angebunden...

naja dann werde ich wohl ein bissel scripten...


----------



## Onkel Dagobert (30 Juli 2007)

Hallo,

vorweg, die derzeitige 5-Sterne-Bewertung kommt von mir (nicht etwa von Markus). Ich finde das Thema sehr interessant.

In meinen Anwendungen nutze ich so etwas auch z.Bsp. zur HMI-Anbindung von Regelkreisen. Ich nehme hierfür einen DB mit n Datensätzen. Der erste Datensatz im DB ist der, dessen Variablen in WinCCFlexible verwendet werden (u.a. auch als Struktur). Jeder Regelkreis bekommt eine ID. Diese wird bei Bildanwahl oder auch per Tastendruck entsprechend gesetzt. Anhand dieser ID werden die Daten in der Steuerung gemultiplext. Der größte Datensatz hat bei mir eine Länge von 100Bytes mit entsprechend vielen Variablen. Dazu gehören Reglerparameter, Betriebsarten, Sollwerte, Istwerte, Heizkennlinien, eine Schaltuhr usw., alles was man bei einer Regelung brauchen kann.


Drei gewaltige Vorteile rechtfertigen den Aufwand:


Variablen (es können hunderte sein) werden nur einmal im HMI angelegt und werden x mal genutzt.
Auf der HMI-Seite spart man enorm viele Power-Tacks, was beim Multiplexen unter WinCCFlexible nicht der Fall ist.
Fehlerfreies Hinzufügen eines Reglers ohne nenneswerten Aufwand.
@Markus,
was hast du mit Scripten vor?


Gruß, Onkel


----------



## Markus (30 Juli 2007)

@onkel dagobert
deine visu greift auf das erste element der struktur zu?

wenn sich die "ID" ändert werden alle daten von dem element das die id hat in das erste kopiert (einmalig mit flanke) ab dann wird nur noch von der ersten in die entsprechende mit der id geschrieben?

blockmove?


zu den skripten:
ich habe im HMI auch alle variablen nur einmal, die haben die db adresse fest drin, die wortadresse ist über eine HMI interne variable indirekt.

bei wertänderung oder seitenaufruf berechnet ein skript abhängig von der "ID" die zeiger im HMI...


----------



## Onkel Dagobert (30 Juli 2007)

Hallo Markus,



Markus schrieb:


> ...wenn sich die "ID" ändert werden alle daten von dem element das die id hat in das erste kopiert (einmalig mit flanke) ab dann wird nur noch von der ersten in die entsprechende mit der id geschrieben?...


Im Prinzip ja, in der Wirklichkeit ist es noch etwas komplexer, es geht im FC noch einmal einen Weg über temporäre Lokaldaten. Ich schreibe später gerne mehr dazu, im Moment habe ich sehr wenig Zeit.



Markus schrieb:


> ...blockmove?..


Nein, in einer FC mit Pointer über AR1/AR2. Bevor ich einen Pointer move, habe ich die Daten schon kopiert. Wenn ich's noch mal neu anfangen würde, wären es ANYs.


```
//*** 100 Byte vom Datenfeld in Lokaldaten kopieren
      LAR1  P##P
      L     25
LOO4: T     #TEMP_INT
      L     DBD [AR2,P#0.0]
      T     LD [AR1,P#0.0]
      +AR1  P#4.0
      +AR2  P#4.0
      L     #TEMP_INT
      LOOP  LOO4
ACTI: NOP   0                           //Bild ist am OP aktiv
```
 


Markus schrieb:


> ...
> zu den skripten:
> ich habe im HMI auch alle variablen nur einmal, die haben die db adresse fest drin, die wortadresse ist über eine HMI interne variable indirekt.
> 
> bei wertänderung oder seitenaufruf berechnet ein skript abhängig von der "ID" die zeiger im HMI...


Mit Scripten kenne ich mich nur sehr wenig aus. Ich versuche, so etwas immer zu umgehen. Bedenke, dass du mit Scripten eng an das Bediengerät gebunden bist. Meine Variante habe ich ursprünglich mit OP7/OP17 verwendet. Damals war die Bildnummer die ID. Die Bausteine nutze ich noch heute unverändert unter WinCCFlexible.


Gruß, Onkel


----------



## Larry Laffer (31 Juli 2007)

Hallo,
das Problem, dass ich hier sehe (das hat mir auch schon mal jemand vorgeworfen) ist, dass du nicht auf die Änderung der Struktur automatisch reagieren kannst. Ansonsten finde ich persönlich die Variante mit dem Index-Pointer von der Visu und ggf. auch den Index-DB von der Visu nicht so schlecht. Bei meinen Applikationen gibts damit auch keinen Ärger ...
Man braucht auch nicht zwingend ein Script für den Pointer, Wert setzen ginge auch, ist halt nur nicht so elegant ...
Der Nachteil dieses Konzeptes ist m.E. nur das dann direkt auf die addressierten Variablen zugegriffen wird. Die von Ralle angesprochene "Save"-Funktion hat auch was für sich. Läßt sich natürlich über den Script-Umweg auch hier erreichen (ohne die SPS dafür mit ins Boot zu nehmen).


----------



## Jochen Kühner (31 Juli 2007)

Onkel Dagobert schrieb:


> Hallo Markus,
> Mit Scripten kenne ich mich nur sehr wenig aus. Ich versuche, so etwas immer zu umgehen. Bedenke, dass du mit Scripten eng an das Bediengerät gebunden bist. Meine Variante habe ich ursprünglich mit OP7/OP17 verwendet. Damals war die Bildnummer die ID. Die Bausteine nutze ich noch heute unverändert unter WinCCFlexible.
> 
> 
> Gruß, Onkel



Wir verwenden auch die indirekte adressierung, aber wir verwenden zur adressberechnung lineare skallierung! diese gibt es auf jedem wincc flexible gerät!


----------



## RMA (31 Juli 2007)

Ich habe auch vor ein paar Jahren was ähnliches gehabt. Da hatte ich ein Testbild (unter anderen), wo ich 21 identische Module ansteuern wollte, mit Multiplexen im ProTool realisiert. Als die Anzahl Tags > 2800 wurde kriegte ich langsam Angst, obwohl alles noch funktionierte (irgendwo habe ich gelesen dass es ein 8000 Tag Lizenz für ProTool geben sollte, oder mindestens ursprunglich vorgesehen wurde) darauf hin habe ich das ganze umgebaut und das Multiplexen im Program gemacht. Damit konnte ich meine Tags auf ca. 700 reduzieren.


----------



## Ralle (31 Juli 2007)

Onkel Dagobert schrieb:


> Hallo,
> 
> vorweg, die derzeitige 5-Sterne-Bewertung kommt von mir (nicht etwa von Markus). Ich finde das Thema sehr interessant.
> 
> ...



Jep, so in etwas mach ich das auch. Ich mag auch der Visu irgendwie nicht zuviel Aufgaben übertragen.


----------



## Jochen Kühner (31 Juli 2007)

*also...*

also wenn ich in wincc flexible adressmultiplexen mache, brauchen wir bei unseren projekten gerade 2 mal so viele variablen wie für das einzelne bild (eine für den wert, die zweite für die adresse!) wir hatten früher auch alles in der steuerung, brauchten aber selbst füre kleinanlagen eine 315 cpu! nun haben wird eine mehlwaage, eine tischwaage, einmal kleinkomp, wasserdossierung und einen sauerteig alles auf einer 313 cpu...
und für jede waage können 100 komp verwendet werden!


----------

