# WinCC Automatischer Bildwechsel



## GoodOld (1 August 2012)

Hi,
kann mir jemand sagen wie ich bei WinCC per Knopfdruck einen Automatischen Bildwechsel starten kann.
Wir haben bei uns in der Firma eine Visu mit mehreren Bereichen, jetzt möchte ich das wenn ich einen Knopf drücke alle Bereiche nacheinander (sagen wir mal alle 5sek) durchgeschaltet werden, bis ich z.B. wieder auf die Taste drücke oder ähliches (damit die Funktion wieder angehalten wird).

Gruß
GoodOld


----------



## ducati (1 August 2012)

Welches WinCC? Auf jeden Fall mit Scripten. Hast Du schon mal Scripte geschrieben?

Gruß.


----------



## GoodOld (1 August 2012)

Hi,
WinCC 7.

Ne bin kein Programmieren bin Elektriker.
Ich habe hier 5 Bilder (*.PDL Dateien) und diese möchte ich per Mausklick auf ein Symbol im 5 Sek. abstand immer wieder durchschalten.


----------



## ducati (1 August 2012)

Hmm,

WinCC Scripte sind nicht mal eben geschrieben. Und wenn Du was falsch machst, stürzt auch mal eben WinCC ab.

Wenn Du Lust hast Dich einzuarbeiten, fang mit den Getting Starteds bzw. den Ausbildungsunterlagen von Siemens an. Da steht auch etwas zu Scripten.

Prinzipiell würd ichs evtl. so machen:

- interne Variable erstellen, welche durch den Button 0 oder 1 gesetzt wird
- in jedem Bild ein Script hinterlegen, welches bei Bildaufruf gestartet wird und bei interne Variable =1 die 5 Sekunden wartet und dann das nächste Bild aufruft.

eigentlich nicht schwierig...

wobei das mit der internen Variablen bei Server/Client zu beachten ist, das die lokal auf dem jeweiligen Rechner gesetzt wird...


----------



## GoodOld (1 August 2012)

Hmmm,
lust zu lernen ist da, Zeit aber nicht.
Das sollte doch nicht so schwerz sein... soviel Code kann das nicht sein.
Ist noch nur ein Timer/Delay, Loop und die Bildaufrufe.


----------



## ducati (1 August 2012)

GoodOld schrieb:


> Ist noch nur ein Timer/Delay, Loop und die Bildaufrufe.



jo, und eben die musst Du lernen, bzw. wie Du überhaupt ein Script in WinCC aufbaust, wo Du es einbaust, wie Du es startest, nimmst Du C oder VB-Script usw.

Ich beantworte Dir gern konkrete Fragen, aber ich mache nicht Deine Arbeit bzw. die Arbeit der Firma die Ihr eigentlich beauftragen müsstet.

Gruß.


----------



## GoodOld (1 August 2012)

firma kommt nicht in frage da es fuer die kollegen und mich ist ( evtl faul / bequem).
welche befehle muss ich mir in c ansehen weil vb in wincc kann ich nichts mit anfangen.
und fuer 10 zeilen programieren lernen macht keinen sinn.

wenn mir jemand die passenden befehle sagen koennte suche ich mir die weiteren infos zusammen, bze. wie die zusammengehoeren.


----------



## ducati (1 August 2012)

SetTagBool GetTagBool SSMChangeWorkField ...

fang erstmal mit dem Button an, der eine interne VAriable setzt bzw. wieder rücksetzt. Der Befehl dafür: SetTagBool.

wenn Du das hast, sehn wir weiter.


Ich hoffe Ihr probiert nicht an der Produktivanlage rum...

Gruß



GoodOld schrieb:


> firma kommt nicht in frage da es fuer die kollegen und mich ist ( evtl faul / bequem).
> und fuer 10 zeilen programieren lernen macht keinen sinn.



Autofahren zu lernen macht keinen Sinn, ich will ja nur 10km fahren. Taxi bezahlt mein Chef nicht, da es ja ne Privatfahrt ist.

Viel Erfolg.


----------



## Mark aus P (1 August 2012)

GoodOld schrieb:


> Hi,
> kann mir jemand sagen wie ich bei WinCC per Knopfdruck einen Automatischen Bildwechsel starten kann.
> Wir haben bei uns in der Firma eine Visu mit mehreren Bereichen, jetzt möchte ich das wenn ich einen Knopf drücke alle Bereiche nacheinander (sagen wir mal alle 5sek) durchgeschaltet werden, bis ich z.B. wieder auf die Taste drücke oder ähliches (damit die Funktion wieder angehalten wird).
> 
> ...




Hallo GoodOld,
es gibt von Siemens eine Tool was diese Aufgabe übernimmt. Habe ich glaube ich mal von 10 Jahren benutzt.
Schau ich morgen mal nach wie das heißt bzw wie man es startet.
Gruß
Mark


----------



## GoodOld (8 August 2012)

Hi,
wie ein Button funktiniert bzw. man diesen ansteuert ist mir bekannt.
brauche nur den Sleep ähnlichen befehlt oder was auch immer, das ich auf jedem Bildschirm etwas programmieren muss bzw. diese Variable abfrage, währe auch kein ding.

@Mark
hast du was gefunden

Gruß


----------



## ducati (8 August 2012)

evtl. kannst ja auch das Script als lokale oder globale Aktion erstellen und zyklisch (5s) triggern.

Gruß.


----------



## GoodOld (8 August 2012)

So habe mal einen Butten erstellt und in diesem Bei Mausklick folgenden Code in C eingetragen.

```
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("Kernel32.dll")
void Sleep(int Milliseconds);
#pragma code()

SetTagBit("TestDurchschalten",1);    //Return-Type: BOOL 

Sleep(5000); //Zeitangabe in Millisekunden 
OpenPicture("S_Test1.pdl");
}
```

Das ganze löse ich per Mausklick aus, das Bit wird auch gesetzt.
Wie frage ich jetzt das Bit auf der anderen Seite wieder ab, kann es ja nicht wieder mit einem Mausklick auslösen.

Gruß


----------



## GoodOld (8 August 2012)

Das sagt mir nichts!



ducati schrieb:


> evtl. kannst ja auch das Script als lokale oder globale Aktion erstellen und zyklisch (5s) triggern.
> 
> Gruß.



Bedenkt bitte ich bin Betriebstechniker und kein Programieren.


----------



## GoodOld (8 August 2012)

so habe es auf dem zweiten Bild so gemacht.

```
#include "apdefap.h"
 BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("Kernel32.dll")
void Sleep(int Milliseconds);
#pragma code()

if( GetTagBit("TestDurchschalten")==0)    //Return-Type: BOOL 
return 0;
else
Sleep(5000); //Zeitangabe in Millisekunden 
OpenPicture("S_test.pdl");
}
```


----------



## ducati (8 August 2012)

Hmm, ich würde Sleep nicht verwenden. Hab grad mal geschaut und meine Befürchtungen haben sich bestätigt. Deshalb meine Empfehlung mit dem Trigger:


> *Achtung*:
> Die Funktion "Sleep()" hat einen äußerst
> negativen Einfluss auf die Performance der Aktionsbearbeitung. Bitte beachten
> Sie daher unbedingt die folgenden Punkte, wenn Sie diese Funktion einsetzen
> ...



Im Script am Button würde ich erstmal nur die Variable setzen bzw. bei nochmaligem Click wieder rücksetzen.

Die Bildumschaltung würde ich in einer lokalen Aktion ausführen. diese wird zyklisch ausgeführt.
Darin fragst Du zuerst die Variable ab, wenn die 1 dann nächstes Bild, ansonsten nix.

Gruß.


----------



## ducati (8 August 2012)

GoodOld schrieb:


> Das sagt mir nichts!
> Bedenkt bitte ich bin Betriebstechniker und kein Programieren.



Hilfe im Scripteditor!



> Merkmale von lokalen Aktionen
> 
> Lokale Aktionen ...
> werden von Ihnen selbst erstellt
> ...


----------



## GoodOld (8 August 2012)

Hi,
ich habe mir 3 Buttons gemacht.
Einer Startet die Aktion, auf der Hauptseite.
Eine Beendet die Aktion indem er das Bit auf Null setzt.
Der andere Butten zeigt an das das Script aktiv ist und dient halt als aufruf für das nächste bild.

Das mit der Programmunterbrechung hatte ich schon vorher gelesen, aber das spiel keine Rolle.

Das mit dem Trigger bin ich mir nicht sicher ob das das richtige ist, da wir einen Server / Client Visu haben.

Gruß


----------



## ducati (8 August 2012)

GoodOld schrieb:


> Das mit der Programmunterbrechung hatte ich schon vorher gelesen, aber das spiel keine Rolle.
> 
> Das mit dem Trigger bin ich mir nicht sicher ob das das richtige ist, da wir einen Server / Client Visu haben.
> 
> Gruß



Naja, wenn Du der Meinung bist, das es nicht schlimm ist, wenn alle Scripte die durch Dich, den Programmierer oder WinCC angelegt wurden oder noch werden, nicht richtig funktionieren... Genau aus dem Grund sagte ich mal irgendwann, Scripte sind nicht mal eben programmiert...

Die lokale Aktion ist genau das richtige. die legst Du im Client an. Dann hast schonmal den Vorteil, dass das Script nur auf den Clients läuft und nicht auf den Servern.

Gruß.


----------



## GoodOld (8 August 2012)

Hi,
also das mal richtiger Bahnhof für mich!
Habe einen Trigger erstellt, habe ihm einen Namen gegeben und 5 Sec eingestellt.
Habe die Aktion auf dem PC erstellt, aber dann hört es auch schon auf. Verstehe nichts mehr, wie soll ich ihm den sagen das er die Bilder durchschalten soll.


----------



## Markus Rupp (8 August 2012)

in dem du einen array anlegst der id und name speichert, eine for-while schleife programmierst und aus dem array via id den aufzurufenden bildnamen einließt, danach kommt der befehl OpenPicture


----------



## GoodOld (8 August 2012)

alles klar!!
ich glaube ich lass es sein, wie es ist.
ihr erklärt mir sachen die ich noch nie gehört habe. Zeigt doch mal wie so ein code aussehen könnte, ihr müsst ihn mir ja nicht komplet schreiben aber. aber mir zu schreiben du brauchst ein 4 reifen, paar glasscheiben  und ein motor usw. und dann kannst du dir ein auto bau hmm. so wird das nichts auch wenn man ein buch über mechanik liest.


----------



## ducati (8 August 2012)

Nen Grudlagenkurs in C sowie WinCC-C-Script können wir hier im Forum nicht geben. Im Übrigen würden wir dann die 100te Seiten Gettings Started, Hilfe usw. abschreiben. Die könntest Du aber auch so lesen. Dann würdest Du auch mehr verstehen. Da sind jede Menge Codebeispiele drin...

Wir haben Dir nie versprochen, dass Du das Auto bauen könntest, im Gegenteil. Ich hab Dir geraten erstmal Grundlagen in C und C-Script zu lernen oder ne Firma zu beauftragen.

Gruß.


----------



## GoodOld (8 August 2012)

nen Grundkurs will ich gar net für was auch, bin und will ja kein richtiger programmierer werden.
Wenn es so viele Codebeispiele gibt dann sei doch so net und sag mir wo genau, macht ja keinen sinn mehrere hundert seiten durchzulesen wenn mir 10 reichen würden.
Irgednwie habe ich das Gefühl das Programmieren nicht gerne ihr wissen preisgeben. In anderen Foren obs nun Auto, Elektrik oder was auch immer, wird gleich mit Beispielen,Bilder anleitungen geholfen.
Ihr habt doch auch alle nur Programmieren gelernt wenn ihr hilfe für Mechanik haben wollt, währe es euch doch auch lieber ihr würde nicht auf ein Buch verwiesen werden wo ihr euch zuerst mal 3wochen damit beschäftigen müsst umd den luftfilter am auto zu wechseln. euch interessiert euch doch dann auch net wie der motor funktioniert.


----------



## repök (8 August 2012)

GoodOld schrieb:


> nen Grundkurs will ich gar net für was auch, bin und will ja kein richtiger programmierer werden.



das ist dein erster fehler. du weist schon, dass du deine ganze anlage mit deinem gefährlichen halbwissen abschiessen kannst?

Es sieht so aus, als ob du hinter einem Button eine C-Aktion hinterlegen kannst. jetzt denk doch erstmal einen kleinen schritt weiter:
bei knopp gedrückt muss das nächste pdl aufgerufen werden. dazu benötigst du einen zähler, der dir jeden knopp-druck einemal mitzählt. dann brauchst du nur noch auswerten wo du stehst und dann das pdl aufrufen.
also ungefähr so:

```
zähler+1
wenn zähler==1, dann 
  OpenPicture"bla.pdl";
ansonsten wenn zähler==2, dann
  OpenPicture"bla2.pdl";
ansonsten wenn zähler==3, dann
  OpenPicture"bla3.pdl";
usw.
ansonsten  // irgenwann hast du ja alle durch
zähler = 0;
```
und ich würde dir unbedingt anraten diesen sleep() da wegzumachen. das hält alles auf.


----------



## GoodOld (8 August 2012)

Da muss ich dir wiedersprechen, ich weis genau was ich machen und ja habe nur ein halbwissen oder noch weniger  aber bin nicht blöd 
die Test mache ich nicht auf dem Produktiv Server und auch nicht mit der Originalen Projekt (bzw. mit einer Kopie), deswegen kann ich alles test 
ohne das eine gefahr besteht. 

Das mit dem Zähler muss ich mir morgen nochmal ansehen ob mir das weiterhilft, bzw. ist eigentlich genau das was ich wollte kleine code schnipsel! 
habe schon weit aus schwerere Scripte/Programme geschrieben ohne es gelernt zu haben, nur durch testen und versuchen.
Ich hatte mal vor es zu lernen aber ich benötige es viellllllll zu selten das es sich lohnen würde.


----------



## ducati (9 August 2012)

Würdest Du den Informatiker an Deine 5kV Schaltanlage ranlassen?

:roll:

Um um beim Beipspiel mit dem Auto zu bleiben. Wenn jemand nicht weiss, was ein Schraubenzieher ist und nicht weiss in welche Richtung man eine Schraube drehen muss, dann wirds schwierig mit dem Luftfilter wechseln... Und in dieser Situantion sind wir hier...


----------

