wincc客户端运行第三方程序
现在的现象:
- ✅ 服务器端(Engineering + Runtime):按钮能打开外部软件 ✔
- ❌ 客户端(WinCC Client Runtime):同样的按钮点了没反应 ✘
👉 核心原因通常是以下四点之一(或多个叠加):
原因1 :客户端没有安装该应用软件
很多项目里:
- 服务器上装了“XX软件” ✅
- 客户机 根本没装这个软件 ❌
👉 你在服务器上用:
Shell "C:\Program Files\xxx\xxx.exe"
服务器能打开,但客户端根本没有这个路径,自然打不开。
原因 2:路径在客户端不一致
比如服务器是:
C:\Program Files\SmartGrid\grid.exe
但客户端安装路径是:
D:\SmartApp\grid.exe
你的脚本仍然写:
Shell "C:\Program Files\SmartGrid\grid.exe"
→ 服务器 OK,客户端失败 ❌
✅ 方案(最推荐 ⭐⭐⭐):在客户端本地启动程序(标准做法)
思路(最专业)
👉 不要让服务器去替客户端打开程序,而是:
客户端自己打开本地软件
实现步骤
1️⃣ 在客户端电脑上安装同样的软件
在 每一台 WinCC Client 电脑 上安装:
- 你的“XX软件”
- 确保路径和服务器一致(推荐统一)
例如:
C:\Program Files\SmartGrid\grid.exe
2️⃣ WinCC 画面按钮脚本(客户端可执行)
在按钮的 C-Action 或 VBScript 里写:
👉 推荐用 VBScript:
Dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.Run """C:\Program Files\SmartGrid\grid.exe"""
Set objShell = Nothing
👉 优点:
- 客户端本地执行 ✔
- 不受 WinCC Server 影响 ✔
- 稳定、推荐 ✔
解决抢占资源的问题
✅ 一、为什么现在打不开到“最前端”
WinCC Runtime 启动后,默认有三个特点:
-
WinCC Client/Server 会以“全屏 + 置顶”方式抢占桌面
-
WinCC Runtime 会持续保持焦点(Focus)
-
你用普通方式启动的外部程序(Shell / Run):
- 会被后台打开
- 或被 WinCC 窗口覆盖
👉 所以即使你的程序成功启动了,你也“看不到”,以为没打开。
✅ 二、解决思路(推荐顺序)
⭐⭐⭐ 方案一(最推荐、最稳妥):
👉 用脚本强制把窗口置顶 + 激活
适用场景
- 软件已经成功启动
- 但被 WinCC 遮挡 / 在后台
按钮脚本(VBScript,直接可用)
Dim objShell
Set objShell = CreateObject("WScript.Shell")
' 打开程序
objShell.Run """C:\Program Files\SmartGrid\grid.exe"""
' 等 1 秒,让程序窗口加载出来
WScript.Sleep 1000
' 把窗口切换到前台
objShell.AppActivate "智能电网软件"
Set objShell = Nothing
👉 关键点:
"智能电网软件"= 窗口标题栏的名字- 你需要打开软件,看一下窗口最上方的标题文字,然后替换掉这里。
✅ 如果你不知道窗口标题,我可以帮你写“通用版”
Dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.Run"""C:\Program Files\SmartGrid\grid.exe"""
WScript.Sleep 1500
objShell.SendKeys "%{TAB}" ' 切换到最近的窗口
Set objShell = Nothing
👉 作用:
- 模拟 Alt + Tab
- 强行把新程序切到前台
⭐⭐⭐ 方案二(更强力):
👉 用批处理 + 最前端启动
1️⃣ 创建一个批处理文件(推荐)
在服务器或客户端(看你用哪种方式)新建:
📄 C:\WinCC_OpenApp.bat
内容:
start "" "C:\Program Files\SmartGrid\grid.exe"
2️⃣ WinCC 按钮脚本
Dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.Run "C:\WinCC_OpenApp.bat"
Set objShell = Nothing
[/code/
<p>👉 优点:</p>
<ul>
<li>Windows 原生窗口管理</li>
<li>更不容易被 WinCC 覆盖</li>
</ul>
<hr />
<h1 id='⭐⭐⭐-方案三工业级做法最专业)'>⭐⭐⭐ 方案三(工业级做法,最专业):</h1>
<h2 id='👉-让-wincc-退出独占桌面模式'>👉 <strong>让 WinCC 退出“独占桌面模式”</strong></h2>
<p>如果你希望:</p>
<ul>
<li>WinCC 不完全霸占桌面</li>
<li>外部软件可以自由弹出、切换</li>
</ul>
<h3 id='在-wincc-runtime-属性中修改'><strong>在 WinCC Runtime 属性中修改</strong></h3>
<ol>
<li>打开 <strong>WinCC Explorer</strong></li>
<li>进入:</li>
</ol>
[code lang="shell"]Computer → Properties(计算机属性)
- 找到:
“Start picture in full screen mode” / 启动画面全屏显示
👉 取消勾选
- 同时检查:
“Always on Top / 始终置顶”
👉 也取消
重启 WinCC Runtime。
📌 结果:
- WinCC 变成普通窗口
- 你打开的程序可以正常抢占桌面
⭐⭐⭐ 方案四(终极方案):
👉 在客户端用双屏(推荐给控制室)
很多工厂的标准做法是:
- 屏幕 1:WinCC 画面(固定)
- 屏幕 2:外部应用(电网软件、浏览器、报表等)
这样:
- WinCC 继续全屏运行
- 外部软件不会被遮挡
👉 如果你有条件,我强烈推荐这个方案。
