# Flexible Befehle ausführen



## M.R. (29 Januar 2010)

Hi !!!

System: Wincc Flexible 2008 
Panel: TP277B

Problem:
Ich möchte in einem Bild 13 Lüfter darstellen.
Jetzt habe ich 13 Button eingefügt über die Ich jeweils eine Bedienmaske Sichtbar mache wo ich den Lüfter über 3 Button Schalten kann. H-0-A.
Ich habe diese Button Einmal angelegt und will sie jetzt über Multiplexvariablen anbinden. Das Funktioniert aber nich da ich die Variable nicht auswählen kann. kann mir jemand helfen???

Vielen Dank


----------



## Larry Laffer (29 Januar 2010)

Hallo,
dafür ist die MUX-Variable nicht gemacht ... sorry.

Gruß
LL


----------



## MatMer (29 Januar 2010)

Hallo,

ich kenne mich mit den Mulitplexvarialben nicht aus, aber alternativ kannst du in dem H-0-A Bild interne Variable nutzen und denen mit den 13 Aufrufbuttons das jeweilige Bit zuweisen...


----------



## M.R. (29 Januar 2010)

Ja aber wenn ich das intern mache klappt das doch nicht weil ich dann ja erst den Button Hand betätigen muss damit er das bit in die Interne Variable schreibt und dann wieder den Button z.B. Lüfter 4 drücken muss damit der wert in die Steuerung übernommen wird.

Hat hier jemand keinen guten Lösungsvorschlag???


----------



## Larry Laffer (29 Januar 2010)

Nochmal dazu,
die MUX-Geschichte ist dazu gedacht (z.B.) um mit Hilfe einer "+ / -" Auswahl alle oder bestimmte Objekte im Bild neu zuzuordnen. 
Eine MUX-Variable hat aber nur einen MUX-Zeiger.
Für deine 13 Objekte mußt du also 13 MUX-Variablen mit unterschiedlichen Zeigern erzeugen - da kannst du sie m.E. viel besser (und auch übersichtlicher) gleich direkt adressieren ...

Gruß
LL


----------



## KG_TC (29 Januar 2010)

natürlich kann man die MUX dafür verwenden, man muss es nur richtig machen...

ich nehme mal an das er einfach nur den falschen Datentyp verwendet wenn ich mich recht entsinne kann man Bit nur in word bzw int setzen

ich würde so auf die schnelle so vorgehen

Anlegen einer internen variable MUX vom typ INT
dann mit jeder Taste einen Wert zuweisen, sagen wir 0...12
dann schnell einen DB angelegt
Jeweils ein BYTE für jeden Lüfter anlegen
dann gibt es folgende MUX  DB Name DBB[MUX] und darin kann man dann jeweils das entsprechende BIT setzen.


----------



## Waelder (29 Januar 2010)

Wie wärs mit Script und "Case" 

Führe mit Tastendruck ein Script aus und mache Cases


```
Select Case SmartTags("LUEFTERNUMMER")
Case "0"
SetBit Case SmartTags("LUEFTER0")
Case "1"
SetBit Case SmartTags("LUEFTER1")
Case "2"
SetBit Case SmartTags("LUEFTER2")
 usw..
End Select
```


----------



## Paule (29 Januar 2010)

Was Du brauchst sind Array Felder für die Betriebsarten.
Pro Lüfteranwahl wird das entsprechende Bit angewählt.
Eventuell kann die Multiplexvariable dann das Array Element auswählen.


----------



## Sinix (29 Januar 2010)

Ich finde den Vorschlag von MatMer garnicht schlecht, habe es für ein ähnliches Problem in dieser Art gemacht.

Für das Problem würde ich eine jeweils eine interne Variable für DB und DBW anlegen. Den entsprechenden Wert bei drücken der Lüftertaste setzen. Für H und A wird eine Variable angelegt und unter Eigenschaften/Adressierung bei DB und DBW die interne angegeben. Sind alle Lüfter in einem DB, dann kann DB als Konstante angelegt werden, sind Lüfter in verschiedenen DBs kann DBW konstant sein und man hat nur einen Übergabeparameter am Taster Lüfter.


----------



## M.R. (29 Januar 2010)

Zu KG_TC

Wie meinst du das???
Hab das nicht ganz verstanden!


----------



## KG_TC (29 Januar 2010)

Als erstes legst du einen DB an,

Sagen wir "DB70"
der Sollte in etwa so aussehen


```
0.0 Dummy    Byte  B#16#0
1.0 Luefter1  Byte  B#16#0
2.0 Luefter2  Byte  B#16#0
.
.
.
13.0 Luefter13  Byte  B#16#0
```
auf den Dummy komme ich noch mal...

nun legst du fest welches Bit für was zuständig ist
sagen wir BIT x.0 wäre ein BIT x.1 ist Auto

jetzt legst du eine interne Variable (auf dem Panel natürlich) vom Typ INT an, nennen wir sie "MUX"

Jetzt löst du das Ereignis Wert zuweisen bei Tastendruck (lüfter1 bis 13) aus angefangen bei 1 bis 13, und schreibst das auf die Interne Variable MUX.

Natürlich musst du mit Tastendruck auch dein Faceplate sichtbar machen 

Deine Tasten musst du jetzt natürlich auf das richtige Bit schreiben lassen, dazu musst du nun deine Multiblexvariable (das heißt bei Siemens nun mal so) anlegen
die erste wäre 
lüfter ein diese muss mit der Steuerung verbunden sein, vom Typ BOOL und aussehen würde sie jetzt wie folgt "DB70 DBX [MUX].0"

nun kannst du die Ein Taste entsprechent zuweisen 
wie und wann du welches bit setzt und rücksetzt ist dir überlassen, ich würde das in diesem Fall aber im Panel machen...

Und nun noch zum Dummy, der ist nur dafür gedacht das du mit 1 beginnst
erstens kannst du mit Schließen den Wert in "MUX" immer auf 0 zurück setzen und du kannst die Variable auch Gleich als Anzeige nutzen welcher lüfter grad aktiv ist.

Hoffe das hilft dir weiter


----------



## Larry Laffer (29 Januar 2010)

@KG-TC:
Du hast sicherlich bemerkt, dass M.R. alle 13 Objekte gleichzeitig (über einen MUX indiziert) auf einer Bildschirmseite anzeigen will und nicht mit der gleichen Seite mal die Station 01 und mal die Station 08 (oder so) ...?


----------



## KG_TC (29 Januar 2010)

LL

nein hab ich nicht bemerkt, und es steht auch nicht so da bzw, zeigt mir die Grafik auch das was er will...

und so groß ist das Display auch nicht das alles gleichzeitig draufpassen würde


----------



## PN/DP (29 Januar 2010)

*nur Schalter können Variablen-Multiplex*

@LL
Ich verstehe M.R. so, daß er für 13 Lüfter nur ein einziges Bedienfeld (Faceplate) im Bild haben will.
Mit den 13 Buttons "Lüfter x" wählt er aus, welchen einen Lüfter er bedienen will.

@M.R.
Leider hast Du den Screenshot so unglücklich gemacht, daß man nicht sehen kann, was Deine 
"Lüfter x Befehle"-Variablen für ein Datentyp sind. Ich nehme jetzt mal an, das soll BYTE oder INT sein.

Deine Idee mit dem Variablen-multiplexen ist gut und bis jetzt hast Du eigentlich alles richtig gemacht.

Allerdings geht die *Variablen-multiplex*-Geschichte in WinCCflex (zumindest bis WCF2007) aus Siemens-Gründen 
*nicht als Funktionsargument* und *nicht mit Schaltflächen*, sondern *nur mit Schaltern*.
Deshalb kannst Du die Multiplexvariablen nicht an Deine 3 Bedien-Buttons anbinden.

Du kannst 3 Bedien-*Schalter* machen mit direkter Anbindung der Multiplex-Variable:
[ .EIN. ] = Schalter, Wert EIN: 1 //toggelt Bit .0 und rücksetzt alle anderen Bits
[ AUTO ] = Schalter, Wert EIN: 2 //toggelt Bit .1 und rücksetzt alle anderen Bits
[ .AUS. ] = Schalter, Wert EIN: 4 //toggelt Bit .2 und rücksetzt alle anderen Bits

Das funktioniert nun fast wie Radio-Buttons. Dummerweise kann man aber einen Schalter auch *ausschalten*,
so daß Deine Lüfter ausgeschaltet werden, wenn Du einen schon gedrückten Schalter nochmal drückst!
Deshalb muß noch unter "Animation -> Bedienbarkeit" die Bedienung der Schalter deaktiviert werden,
wenn die Schalter "Ein" sind. Also:
[ .EIN. ] = Bedienbarkeit deaktiviert bei Integer Bereich: 1 bis 1
[ AUTO ] = Bedienbarkeit deaktiviert bei Integer Bereich: 2 bis 2

Im SPS-Programm müsste nun noch eine kleine Hilfe programmiert werden, die bei gesetztem Bit .2
das ganze Byte oder Word auf 0 schreibt.

So richtig gefällt mir die Variante mit den 3 Schaltern auf eine BYTE- oder INT-Variable aber nicht.
(aus vielen Gründen, die ich hier jetzt nicht alle aufzählen will)


Ich mache das immer so:
Ich nehme 3 Schalter auf 3 BOOL-Multiplexvariablen, denen ich dann je 13 Bits (DBX) zuordne.
(bei Index 0 kommt jeweils eine Zuordnung auf eine Panel-interne Dummy-Variable)
Die DBX-Bits verknüpfe ich dann im SPS-Programm wie richtige Hardware-Taster und am Ende vom OB1 
lösche ich dann den gesamten DB-Bereich mit meinen Taster-Bits (L 0, T DBD x, T DBD x+4, ...).

Nun kann ich am Panel so einen gemultiplexten Schalter drücken, das Panel setzt mir entsprechend
dem Index das richtige DBX, was ich im SPS-Programm verarbeite und am Ende des OB1 rücksetze.
Das Panel liest automatisch nach knapp 1 Sekunde dieses DBX (das nun 0 ist) und der gedrückte Schalter
"schnappt" zurück in die ungedrückte Stellung. 
Verbleibt der Schalter am Panel in der gedrückten Stellung, dann ist die Verbindung zur SPS unterbrochen.

Gruß
Harald


----------



## Larry Laffer (30 Januar 2010)

@KG_TC und PN/DP:
ihr habt natürlich Recht ...
Ich hatte das in Erinnerung :


M.R. schrieb:


> Problem:
> Ich möchte in einem Bild 13 Lüfter darstellen.


und das folgende wohl irgendwie überlesen ...


M.R. schrieb:


> Jetzt habe ich 13 Button eingefügt über die Ich jeweils eine Bedienmaske Sichtbar mache wo ich den Lüfter über 3 Button Schalten kann. H-0-A.
> Ich habe diese Button Einmal angelegt und will sie jetzt über Multiplexvariablen anbinden.


Diese Aufgabenstellung ist natürlich (da habr ihr vollkommen Recht) für die MUX_Geschichte absolut prädestiniert ... Also auf jeden Fall so machen.

Gruß
LL


----------

