wincc客户端运行第三方程序

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 启动后,默认有三个特点:

  1. WinCC Client/Server 会以“全屏 + 置顶”方式抢占桌面

  2. WinCC Runtime 会持续保持焦点(Focus)

  3. 你用普通方式启动的外部程序(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(计算机属性)
  1. 找到:

“Start picture in full screen mode” / 启动画面全屏显示

👉 取消勾选

  1. 同时检查:

“Always on Top / 始终置顶”
👉 也取消

重启 WinCC Runtime。

📌 结果:

  • WinCC 变成普通窗口
  • 你打开的程序可以正常抢占桌面

⭐⭐⭐ 方案四(终极方案):

👉 在客户端用双屏(推荐给控制室)

很多工厂的标准做法是:

  • 屏幕 1:WinCC 画面(固定)
  • 屏幕 2:外部应用(电网软件、浏览器、报表等)

这样:

  • WinCC 继续全屏运行
  • 外部软件不会被遮挡

👉 如果你有条件,我强烈推荐这个方案


转载请注明出处:  https://www.cntworld.cn
智能工控 » wincc客户端运行第三方程序

发表回复

提供最优质的资源集合

立即查看 了解详情
文章加载时间:0.0043 秒