TIA WinCC Runtime Advanced ohne Titelleiste starten

PN/DP

User des Jahres 2011-2013;2015-2017;2020-2022;2024
Beiträge
24.887
Reaktionspunkte
7.993
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Wie kann ich eine WinCC Runtime Advanced (pdata.fwc als Simulation eines TP1200 Comfort) starten, ohne dass die Fenster-Titelleiste (bzw. ohne das Schließen-X) angezeigt wird? Gibt es da evtl. einen Kommandozeilen-Parameter?
Windows 11, TIA V16
 
Nabend.

Ich kenne zwei Verhaltensweisen einer HMI-Simulation:
+ ohne Variablensimulator -> immer automatisch Vollbild-Darstellung
+ mit Variablensimulator -> Fensterdarstellung, wie von dir beschrieben

Dazu kommt noch das Starten der Runtime aus dem TIA-Portal heraus.
Das geht aber nur, wenn man neben dem Portal zusätzlich die Runtime installiert hat. Wie dann die Darstellung aussieht, weiß ich nicht.

Edit:
Gibt ja noch die Möglichkeit des "Startens" über Doppelklick auf die pdata.fwc.
Dann wird bei mir auch die Fensterdarstellung verwendet. Da ich aber keine Runtime parallel zum Portal installiert habe, vermute ich, dass die Simulations-Runtime verwendet wird, welche -soweit ich weiß- etwas anderen Behandlungsregeln folgt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nabend.

Ich kenne zwei Verhaltensweisen einer HMI-Simulation:
+ ohne Variablensimulator -> immer automatisch Vollbild-Darstellung
Vermutlich meinst du eine HMI, die als "WinCC RT Advanced" projektiert ist? Bei der kann man im Projekt in den Runtime-Einstellungen einstellen, dass die im Vollbildmodus laufen soll, was wohl standardmäßig aktiviert ist, aber auch deaktiviert werden kann.
Bei einer HMI, die als Comfort Panel projektiert ist, startet die Simulation bei mir nie im Vollbildmodus und lässt sich auch nicht in Vollbild schalten (jedenfalls weiß ich nicht wie). Die Runtime-Einstellung "Vollbildmodus" gibt es da nicht.

Gibt ja noch die Möglichkeit des "Startens" über Doppelklick auf die pdata.fwc.

Dann wird bei mir auch die Fensterdarstellung verwendet.
Genau darum geht es. Auf einem PC ist nur die WinCC Runtime Advanced installiert, und auf dem soll die pdata.fwc der Projektierung eines TP1200 Comfort gestartet werden. Das startet immer im Fenstermodus und lässt sich anscheinend nicht in Vollbild schalten.

Ob eine pdata.fwc in Vollbild startet, ist in der pdata.fwc hinterlegt - die zugehörige Runtime-Einstellung, mit der der Vollbildmodus eingestellt werden kann, gibt es allerdings nur, wenn man das HMI als "WinCC RT Advanced" projektiert - nicht bei Comfort Panels. Es soll aber nicht das Projekt des "TP1200 Comfort" zu "WinCC RT Advanced" extra umgestellt/konvertiert werden. Es soll auch nicht die pdata.fwc direkt manipuliert/gepatcht werden. Daher meine Hoffnung, dass man irgendwie unabhängig von der Projekteinstellung der HmiRTm.exe sagen kann, dass die die pdata.fwc im Vollbildmodus starten soll, oder die Titelleiste oder das Schließen-X verbergen soll.
Egal ob die HMI als "TP1200 Comfort" oder "WinCC RT Advanced" projektiert ist, bei beiden wird beim Übersetzen eine pdata.fwc erzeugt, die auch immer mit der HmiRTm.exe abgespielt wird - sie sind also grundsätzlich kompatibel und es sollte kein Problem sein, die pdata.fwc des TP1200 Comfort im Vollbild zu starten - wenn man das der HmiRTm.exe mitteilen könnte. Oder kann ich irgendwie mit Windows-Mitteln für die HmiRTm.exe einstellen, dass die im Vollbildmodus laufen soll?
 
Vermutlich meinst du eine HMI, die als "WinCC RT Advanced" projektiert ist?
Ich war schon versucht, mit "Nein" zu antworten, habe es aber nochmals getestet:
Du hast recht, eine Projektierung für Comfort-Panels startet immer im Fenstermodus.
Beim Simulieren über das TIA-Portal wird sogar zusätzlich der Geräterahmen mit angezeigt und beinhaltet bei Tastengeräten auch diese "Schaltflächen".

Ohne es jetzt ausprobiert zu haben:
Wäre eventuell der Windows-Kioskmodus für dich interessant?
 
Beim Simulieren über das TIA-Portal wird sogar zusätzlich der Geräterahmen mit angezeigt und beinhaltet bei Tastengeräten auch diese "Schaltflächen".
bei Öffnen/Doppelklick der pdata.fwc direkt mit der WinCC Runtime Advanced (nicht aus TIA ES) wird dieser Geräterahmen nicht mit angezeigt (sinnvoll platzsparend bei der Simulation von reinen Touchpanels). Wenn man den Geräterahmen angezeigt haben will, dann mit dem Kommandozeilen-Parameter /showlayout öffnen.


Wäre eventuell der Windows-Kioskmodus für dich interessant?
Problem ist, dass auf die PC Runtime mit VNC-Viewer zugegriffen wird, und dann oft beim Beenden der VNC-Verbindung das [X] der WinCC Runtime geklickt wird, anstatt das [X] des VNC-Viewers zu suchen. Deshalb muss das [X] des Runtime-Players HmiRTm.exe weg. Die HmiRTm.exe kann das ja, macht das aber nur beim Abspielen einer pdata.fwc einer "WinCC RT Advanced" Runtime mit aktivierter Einstellung "Vollbildmodus".


Meine Frage ist nach wie vor:
Wie kann ich eine WinCC Runtime Advanced (pdata.fwc als Simulation eines TP1200 Comfort) starten, ohne dass die Fenster-Titelleiste (bzw. ohne das Schließen-X) angezeigt wird? Gibt es da evtl. einen Kommandozeilen-Parameter?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Problem ist, dass auf die PC Runtime mit VNC-Viewer zugegriffen wird, und dann oft beim Beenden der VNC-Verbindung das [X] der WinCC Runtime geklickt wird, anstatt das [X] des VNC-Viewers zu suchen.
Ohne dies ausprobiert zu haben:
Soll(te) der Kiosk-Modus nicht genau dies verhindern? Sonst könnte ja ein Benutzer trotzdem einfach die angezeigte App beenden, und dann landet er auf dem Desktop/auf Betriebssystemebene (wo er ja nicht hin soll!).
 
Der Windows-Kioskmodus verhindert, dass der Benutzer die WinCC Runtime beenden kann?? :unsure:
Dann muss ich mir das morgen mal anschauen. Mit dem Windows-Kioskmodus hatte ich noch nichts zu tun.
Oder wie meinst du das bitte?
 
Moin,

du kannst ja mal AutoHotkey angucken https://www.autohotkey.com/

damit kannst du ein Script anlegen, dass das Fenster erkennt und den Rahmen und das (x) entfernet. Schließen kannst du dann per Alt+F4
Ich habe es gerade mal getestet, funktioniert bei mir.

AutoHotkey v2 installieren.
Code als z.B. WinCC_borderless.ahk speichern.
Rechtsklick auf die Datei → Als Administrator ausführen.
Runtime starten → nach <1 s ist sie ohne Titelleiste/X im Vollbild auf dem aktuellen Monitor.
Beenden: ganz normal mit Alt+F4.
Du kannst das Script auch noch in den Start Ordner packen, damit du es bei Windows Start aktiv hast.

Code:
#Requires AutoHotkey v2.0
#SingleInstance Force

; === Ziel-Fenster aus Window Spy ===
Sel := "ahk_exe HmiRTm.exe ahk_class HmiRTm"

; Skalierung (0.85 = 85 % der Arbeitsfläche)
Scale := 0.85

; Win32-Flags
GWL_STYLE := -16
WS_CAPTION := 0x00C00000
WS_THICKFRAME := 0x00040000
WS_SYSMENU := 0x00080000
WS_MINIMIZEBOX := 0x00020000
WS_MAXIMIZEBOX := 0x00010000
SWP_FRAMECHANGED := 0x0020
SWP_NOZORDER := 0x0004

; alle 500 ms prüfen
SetTimer(Monitor, 500)

; Tray-Menü
A_TrayMenu.Delete()
A_TrayMenu.Add("Script beenden", (*) => ExitApp())
return

Monitor() {
    static lastHwnd := 0, lastMon := 0
    global Sel, Scale
    hwnd := WinExist(Sel)
    if !hwnd
        return

    ApplyBorderless(hwnd)

    mon := GetMonitorFromWindow(hwnd)
    if (hwnd != lastHwnd) || (mon != lastMon) || NeedResize(hwnd, mon, Scale) {
        CenterToPercentOfWorkArea(hwnd, mon, Scale)
        lastHwnd := hwnd, lastMon := mon
    }
}

ApplyBorderless(hwnd) {
    global GWL_STYLE, WS_CAPTION, WS_THICKFRAME, WS_SYSMENU, WS_MINIMIZEBOX, WS_MAXIMIZEBOX
    global SWP_FRAMECHANGED, SWP_NOZORDER
    style := DllCall("GetWindowLongPtr", "ptr", hwnd, "int", GWL_STYLE, "ptr")
    if (style & (WS_CAPTION|WS_THICKFRAME|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX)) {
        style &= ~(WS_CAPTION|WS_THICKFRAME|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX)
        DllCall("SetWindowLongPtr", "ptr", hwnd, "int", GWL_STYLE, "ptr", style)
        DllCall("SetWindowPos", "ptr", hwnd, "ptr", 0
            , "int", 0, "int", 0, "int", 0, "int", 0
            , "uint", SWP_FRAMECHANGED|SWP_NOZORDER)
    }
}

GetMonitorFromWindow(hwnd) {
    WinGetPos &x, &y, &w, &h, "ahk_id " hwnd
    cx := x + w/2, cy := y + h/2
    cnt := MonitorGetCount(), mon := 1
    loop cnt {
        MonitorGet A_Index, &L, &T, &R, &B
        if (cx >= L && cx <= R && cy >= T && cy <= B) {
            mon := A_Index
            break
        }
    }
    return mon
}

NeedResize(hwnd, mon, scale) {
    WinGetPos &x, &y, &w, &h, "ahk_id " hwnd
    MonitorGetWorkArea mon, &L, &T, &R, &B
    NW := Round((R-L) * scale), NH := Round((B-T) * scale)
    NX := L + (R-L-NW)//2, NY := T + (B-T-NH)//2
    tol := 2
    return (Abs(w-NW) > tol) || (Abs(h-NH) > tol) || (Abs(x-NX) > tol) || (Abs(y-NY) > tol)
}

CenterToPercentOfWorkArea(hwnd, mon, scale) {
    global SWP_NOZORDER, SWP_FRAMECHANGED
    MonitorGetWorkArea mon, &L, &T, &R, &B
    NW := Round((R-L) * scale), NH := Round((B-T) * scale)
    NX := L + (R-L-NW)//2, NY := T + (B-T-NH)//2
    DllCall("SetWindowPos", "ptr", hwnd, "ptr", 0
        , "int", NX, "int", NY, "int", NW, "int", NH
        , "uint", SWP_NOZORDER|SWP_FRAMECHANGED)
}
Code:
; === Ziel-Fenster aus Window Spy ===
Sel := "ahk_exe HmiRTm.exe ahk_class HmiRTm"
Hier musst du mit Window Spy (enthalten in AutoHotKey) mal herausfinden wie dein Fenster heißt. Einfach Window spy ausführen und mit der Maus über das Fenster fahren, dann steht es dort.

1757313469349.png

1757313502531.png

Code:
; Skalierung (0.85 = 85 % der Arbeitsfläche)
Scale := 0.85
Hier kannst du die Fenstergröße einstellen.

Beenden kannst du das Script über:

Unten rechts in der Taskleiste auf den Pfeil „^“ klicken → beim grünen H-Icon (AutoHotkey) Rechtsklick → „Script beenden“

Vielleicht ist das ja etwas für dich
 
Hier ist noch ein besserer Script für AutoHotKey, da wird das Bild normal mit Leiste oben angezeigt, aber der (x) Button ist deaktiviert. Alles andere funktioniert. Du kannst auch das Bild verschieben, minimieren etc.. Um den Blocker für 5 Sekunden auszuschalten einfach Strg+Alt+B, danach kannst du über (x) ausschalten. Nach 5 Sekunden ist der Blocker wieder aktiv. Das Script kannst du auch über Strg+Alt+Esc beenden

Code:
#Requires AutoHotkey v2.0
#SingleInstance Force

; ===== Steuerung =====
^!Esc::ExitApp()            ; Strg+Alt+Esc = Script beenden
^!b::ToggleBlocker()        ; Strg+Alt+B   = X-Blocker an/aus

; ===== Ziel-Fenster (WinCC Runtime Advanced) =====
Sel := "ahk_exe HmiRTm.exe ahk_class HmiRTm"

; Maus absolut (für optionale Erweiterungen)
CoordMode "Mouse", "Screen"
; ===== Auto-Rearm-Konfig =====
ReArmMs := 5000     ; nach 5 s automatisch wieder einschalten
gRearmToken := 0    ; Zähler für gültige Timer
; ===== Watch-Timer =====
BlockerOn := true
SetTimer(WatchWinCC, 300)
return

WatchWinCC() {
    global Sel, BlockerOn, gBlock, gHwnd
    hwnd := WinExist(Sel)
    if !hwnd {
        gHwnd := 0
        if IsSet(gBlock) {
            try gBlock.Destroy()
            gBlock := unset
        }
        return
    }
    gHwnd := hwnd
    if !BlockerOn {
        if IsSet(gBlock)
            try gBlock.Hide()
        return
    }

    ; Fenster-Position/-Größe holen
    WinGetPos &x, &y, &w, &h, "ahk_id " hwnd
    if (w<=0 || h<=0)
        return

    ; Größe der Titelleisten-Schaltflächen (Windows-Metriken)
    cx := DllCall("GetSystemMetrics","int",30,"int")   ; SM_CXSIZE
    cy := DllCall("GetSystemMetrics","int",31,"int")   ; SM_CYSIZE
    pad := DllCall("GetSystemMetrics","int",92,"int")  ; SM_CXPADDEDBORDER
    btnW := cx + pad*2
    btnH := cy + pad*2

    ; Block-Bereich: nur das Close-Button-Rechteck, leicht großzügig
    bw := Round(btnW * 1.2)          ; Breite des Overlays
    bh := Round(btnH * 1.2)          ; Höhe  des Overlays
    bx := x + w - bw - 2             ; rechts oben im Fenster
    by := y + 0

    if !IsSet(gBlock) {
        ; Overlay-Fenster: topmost, ohne Caption, als Layered-Window
        gBlock := Gui("+AlwaysOnTop -Caption +ToolWindow +E0x80000")
        gBlock.BackColor := "010101"
        WinSetTransparent(1, gBlock.Hwnd)   ; praktisch unsichtbar, aber klick-blockierend
    }
    gBlock.Show("x" bx " y" by " w" bw " h" bh " NoActivate")
}

ToggleBlocker() {
    global BlockerOn, gBlock, ReArmMs, gRearmToken
    gRearmToken++  ; neue „Generation“ – entwertet ältere Timer

    if (BlockerOn) {
        ; AUS schalten + Auto-Rearm in 5 s
        BlockerOn := false
        if IsSet(gBlock)
            try gBlock.Hide()
        ToolTip("X-Blocker: AUS (Auto in 5 s)")
        SetTimer((*) => ReArmBlocker(gRearmToken), -ReArmMs)
    } else {
        ; manuell wieder AN
        BlockerOn := true
        if IsSet(gBlock)
            try gBlock.Show("NoActivate")
        ToolTip("X-Blocker: AN")
    }
    SetTimer(() => ToolTip(), -900)
}

ReArmBlocker(expectedToken) {
    global gRearmToken, BlockerOn, gBlock
    ; Nur den aktuellsten Timer ausführen
    if (expectedToken != gRearmToken)
        return
    if (!BlockerOn) {
        BlockerOn := true
        if IsSet(gBlock)
            try gBlock.Show("NoActivate")
        ToolTip("X-Blocker: AUTO-AN")
        SetTimer(() => ToolTip(), -800)
    }
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Windows-Kioskmodus verhindert, dass der Benutzer die WinCC Runtime beenden kann?? :unsure:
Dann muss ich mir das morgen mal anschauen. Mit dem Windows-Kioskmodus hatte ich noch nichts zu tun.
Oder wie meinst du das bitte?
Genauso meinte ich das:
Der Bediener sollte die ausgewählte Applikation (hier: der Runtime in Fensterdarstellung) nicht beenden bzw. das zugehörige Fenster nicht minimieren/schließen können.

Wie gesagt habe ich dies aber auch noch nicht ausprobiert.

Die folgende Seite gibt mehr Infos zu Windows-Kiosk-Optionen:
Übersicht über Konfigurationsoptionen für Windows-Kioske
 
Danke für die Vorschläge. Mit den üblichen Windows-Mitteln lässt sich die Adv. Runtime nicht in den Vollbildmodus "zwingen", die HmiRTm.exe unterstützt das anscheinend nicht (und kann echten Vollbildmodus vermutlich auch gar nicht und tut nur so, indem das Fenster sich auf den gesamten Bildschirm ausbreitet und die Titelleiste und Rahmen verbirgt?).

Ohne es jetzt ausprobiert zu haben:
Wäre eventuell der Windows-Kioskmodus für dich interessant?
Ich habe das auch (noch) nicht ausprobiert, nur mal quergelesen. Allerdings nölt unsere IT und will den Kioskmodus nicht, weil dann das Management des PC und des Windows/Domänen-Benutzers "viel" aufwendiger wäre ...

Hier ist noch ein besserer Script für AutoHotKey, da wird das Bild normal mit Leiste oben angezeigt, aber der (x) Button ist deaktiviert. Alles andere funktioniert. Du kannst auch das Bild verschieben, minimieren etc..
Wenn Siemens keinen offiziellen Weg vorgesehen hat und verrät, wie man die HmiRTm.exe auch bei Simulation von Comfort Panels in den wie Vollbild aussehenden Modus bringt, dann wäre das wohl die Lösung, die das kann, was mir vorschwebt. (y)

Allerdings habe ich mittlerweile festgestellt, dass das Umstellen des Bediengerätetyps von TP1200 Comfort zu WinCC RT Advanced PC Station ("Gerät ändern/tauschen" von TP1200 Comfort nach "PC Allgemein > PC-Station > SIMATIC PC-Station V1.0") in meinem Projekt einfacher geht als gedacht. Im Moment habe ich das so gelöst. Bei WinCC RT Advanced ist die "Vollbildmodus"-Option verfügbar.
 
PS: gegen den Windows-Kioskmodus spricht vermutlich auch, dass die WinCC Runtime bei mir weiterlaufen muss, wenn sich der Windows-Benutzer abmeldet (oder nach einiger Zeit Zwangs-abgemeldet wird bzw. der Bildschirm gesperrt wird).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
..., die HmiRTm.exe unterstützt das anscheinend nicht (und kann echten Vollbildmodus vermutlich auch gar nicht und tut nur so, indem das Fenster sich auf den gesamten Bildschirm ausbreitet und die Titelleiste und Rahmen verbirgt?).
Da könntest du recht haben:
Ich meine mich zu erinnern, dass ich bei einer Monitorkonstellation "2. Monitor OBERHALB des Laptop-Displays" den Fensterrahmen mal gesehen habe.
 
Zurück
Oben