WinCC WinCC 7.4 Mehrmonitorbetrieb , Bildfenster

tarzipan7

Level-2
Beiträge
101
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen Habe bei 1 Monitorbetrieb folgenden Script zuweisen eines Fenster an Bildfenster und Aufruf: // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" #define ApcPic1 "CC_Sta" #define ApcPic2 "CC_StUp_OffBusy" #define ApcPic3 "Bf_CC_StUp" // next TagID : 4 // WINCC:TAGNAME_SECTION_END // WINCC:pICNAME_SECTION_START // syntax: #define PicNameInAction "PictureName" // next PicID : 1 // WINCC:pICNAME_SECTION_END SetVisible(ApcPic1,ApcPic3 ,0); SetPictureName(ApcPic1,ApcPic3 ,ApcPic2); SetVisible(ApcPic1,ApcPic3 ,1); Wie kann ich das realisieren bei 2 oder mehr Monitoren, so das die Fenster unabhängig zugewiesen werden? Danke und Gruss
 
Ein paar Sekunden zum formatieren deines Haufen-Posts hättest du dir schon nehmen können.
Für Code empfehlen sich die Code-Tags (Raute-Symbol im Beitragseditor). Bist ja schon lange genug dabei...
Code:
// WINCC:TAGNAME_SECTION_START 
//syntax: #define TagNameInAction "DMTagName" 
#define ApcPic1 "CC_Sta" 
#define ApcPic2 "CC_StUp_OffBusy" 
#define ApcPic3 "Bf_CC_StUp" 
// next TagID : 4 
// WINCC:TAGNAME_SECTION_END 


// WINCC:PICNAME_SECTION_START 
// syntax: #define PicNameInAction "PictureName" 
// next PicID : 1 
// WINCC:PICNAME_SECTION_END 


SetVisible(ApcPic1,ApcPic3 ,0);
SetPictureName(ApcPic1,ApcPic3 ,ApcPic2);
SetVisible(ApcPic1,ApcPic3 ,1);
ApcPic1 scheint ein Bildname (lpszPictureName) zu sein. Dein Grundbild?
ApcPic2 ebenfalls ein Bildname. Dein Bild auf das du das Bildfenster setzen willst?
ApcPic3 dagegen ein Bildobjektname (lpszObjectName). Das Bildfenster selbst?

Du schreibst Mehrmonitor. Wie ist dein Aufbau?
Ein Grundbild und 3 Bildfenster für jeden Monitor?

Erste Frage: Du schreibst dass du dein Skript beim Bildaufrauf (vom Grundbild?) dran hast.
Um dein Startbild beim Runtime-Start im jeweiligen Bildfenster aufzurufen? Warum nicht gleich statisch konfigurieren.
Dann starten die Bilder mit dem statischen Bildnamen, kannst dann immer noch per Skript ändern (Bildwechsel)

Noch ein paar Tipps:
Funktionen übergeben dir meist die Bildinformation in das Skript. Beispiel das Bildanwahl-Sktript.
void OnOpenPicture(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
lpszPictureName ist der Name des aufrufenden Bildes (gesamter Pfad)
Folgender Befehl würde in deinem Skript also auch funktionieren: SetPictureName(lpszPictureName, ApcPic3 ,ApcPic2);

Schau dir mal folgende Funktionen an. Sind nützlich wenn man mit Bildfenstern arbeitet.
GetLocalPicture(lpszPictureName);
GetParentPicture(lpszPictureName);
GetParentPictureWindow(lpszPictureName);
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
Hallo Ronin  das mit dem Code -Tags habe ich nicht gewusst, sorry.  
AppPic1 ist ein Bildfenster mit fixer Zuweisung "CC_Sta" welches im Grundbild über einen Button aufgerufen wird. 
Im AppPic1 "CC_Sta" ist ein Bildfenster AppPic3 "Bf_CC_StUp" welchem durch buttons verschiedene Fenster zugewiesen werden, hier ApcPic2 "CC_StUp_OffBusy" drin.  
Falls dieser Aufruf vereinfacht werden kann, ich bin immer offen für Verbesserungen.  

Zum Aufbau: Ich muss Erweiterungen machen in dieser Applikation Der Kunde hat 2 Monitore und im Projekt wurden SSM....Befehle benutzt. 
Ich kenne mich da gar nicht aus.
  Das Ziel ist es wenn ich auf dem ersten Monitor ein Fenster öffne dies nur auf dem 1 Monitor erfolgt, do beim 2 Monitor. Ich habe den Script von oben ausprobiert, aber mit dem geht das Fenster auf beiden Monitoren auf. 
Braucht es dazu spezielle Befehle?


Gruss und schönes Weend
 
Zuletzt bearbeitet:
Die Split-Screen-Manager SSM... Funktionen sind dafür vorgesehen wenn du die Option Basic Process Control (BPC) verwendest.
Ist das alles noch so wie es standardmäßig im BPC vorgesehen ist? D.h. auf jedem Bildschirm hast du eine eigene Kopf- und Fußnavigationsleiste?

Wenn du für Popups die TOP-Bildfenster verwendest, dann ist es normalerweise immer so, dass das Fenster auf dem gleichen Bildschirm geöffnet wird auf dem du ein Objekt anklickst. Und diese lassen sich auch nicht auf andere Bildschirme verschieben.
Was hast du denn vor: Wenn du auf Bildschirm 1 etwas anklickst dann soll es auf Bildschirm 2 geöffnet werden?
 
Guten Tag
Ja es sind noch eigene Kopf- und Fussleisten vorhanden, welche unabhängig voneinander funktionieren.
Ich möchte über Buttons einem Bildfenster verschiedene Fenster zuweisen, dies funktioniert mit oben aufgeführtem Skript einwandfrei, aber mit den 2 Monitoren nicht mehr. Die Fenster werden immer auf beiden zugewiesen und geöffnet.
Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei BPC und wenn das ein Popup-Fenster werden soll, dann würde ich das in die @TOP... Bildfenster des Standard-Bildes des BPC, d.h. @1001.pdl, hineinladen.
Das würde ich aber nicht hartcodieren, sondert aus dem jeweiligen Bild mir per ParentPicture das Elternfenster holen. Wie gesagt, das geht nur wenn man auch überall BPC konform arbeitet.

Wenn du das Bild im Arbeitsbereich austauschen willst, dann würde ich die passende SSM-Funktion dazu verwenden, damit das Bild auch auf dem Bildstack abgelegt wird damit Bild vor/zurück funktionieren.

Code:
BOOL bStore = TRUE; // Bild auf Bildspeicher-Stack ablegen
char chScreen = '?';
SSMChangeWorkField(chScreen, lpszPictureName, bStore);
 
Ich habe es jetzt mal so gemacht:

Code:
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
#define ApcPic1 "L700_CCCB_Sta"
#define ApcPic2 "bfCC_Sta"
#define ApcPic3 "L700_CCCB_StUp_OffBusy"
// next TagID : 4
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

static char szPicture[30] = ApcPic3;
static char* tmp = &szPicture[0];

char* PictureName;
PictureName=GetParentPictureWindow(ApcPic2);    //Return-Type: char* 
SetPropBOOL(ApcPic1,ApcPic2,"Visible",TRUE);
PDLRTSetPropEx(PDLRT_AM_PICTABS,ApcPic1,ApcPic2,"PictureName",VT_LPSTR,&tmp,NULL,NULL,0,NULL,NULL
);


Werde aber deinen Vorschlag ausprobieren.
Danke
 
Zurück
Oben