十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

WinCC 7.x报表、全屏轮播与Web发布组合方案实战

WinCC 7.x报表、全屏轮播与Web发布组合方案实战 值班室的LED大屏需要每天按固定节奏自动切换显示各工段的关键画面车间主任要在办公室通过网页远程查看实时趋势而月底的产量报表还要能按班组自动统计、导出Excel——这三个需求单独拎出来都不算难但当它们同时出现在一套WinCC 7.0-7.5的画面上时细节问题就一个接一个地冒出来了。这篇文章把我在实际项目里做的这套“报表全屏轮播WEB发布”组合方案完整拆开讲包括脚本怎么写、全屏怎么做到“真全屏”、Web Navigator发布要踩哪些坑以及没有Web授权时的替代思路。整套方案适合有WinCC基础、正在做监控大屏或远程浏览项目的工程师参考看完可以直接拿去用。1. 项目整体设计与方案定位1.1 这个方案到底要解决什么问题很多厂里的WinCC项目最开始只有一两台操作员站画面自己看、报表月底手工从变量记录里导出。但做到第二期就变了领导要看大屏车间要看远程班次要对比产量这些都是很现实的需求。具体到我这个项目需求可以拆成三条独立的线报表线把WinCC采集到的变量历史数据按日/周/月汇总自动生成表格支持导出Excel最好能进一步写入外部数据库供MES调用。大屏线在控制室或展厅的大屏上WinCC运行系统启动后自动全屏多个画面按设定时间循环切换不需要人干预。远程线通过局域网或互联网让其他电脑用网页浏览器直接打开WinCC画面和报表不安装完整WinCC客户端。这三条线在技术上是相对独立的但都要挂在同一套WinCC 7.x项目上所以规划时要统一架构避免后面反复返工。1.2 为什么选WinCC 7.0-7.5而不是其他方案选型的时候我也考虑过用组态软件自带的冗余功能、单独开发Web系统、或者直接用第三方报表工具但最终都否掉了原因很直接WinCC 7.x的归档系统本身就是一个SQL Server数据库7.0-7.4是内置的SQL Server7.5使用SQL Server 2019/2022数据基础已经具备做报表不需要额外建库。画面轮播用WinCC自身的VBS脚本就能实现不需要外部调度软件可靠性足够不依赖第三方服务。Web发布用官方Web Navigator是最稳妥的路径画面和变量直接复用不需要重做网页前端。相比之下如果另起炉灶做一套B/S系统画面要重新画、变量要重新对接工期至少翻一倍而且跟WinCC原生画面的一致性很难保证。对于大多数工厂场景在WinCC基础上扩展是性价比最高的路线。1.3 版本差异与授权问题的提前确认这里要先把丑话说在前面WinCC 7.0到7.5跨越了非常多版本7.0和7.5的Web Navigator在安装方式、授权类型和浏览器兼容性上有明显差异。我做项目时用的主力版本是WinCC 7.4 SP2和7.5 SP2这两个版本在功能上比较接近下面的方案也是基于这两个版本写的。如果你还在用7.0或7.2整体思路一致但有些菜单位置、脚本API会有区别。授权方面Web Navigator是需要单独授权的而且授权是按连接数算的比如Web Navigator 5客户端、10客户端。这一点投标和采购的时候要提前讲清楚不然后期交付时会非常被动。报表和全屏轮播不需要额外授权只用WinCC的标准功能就能实现。2. 报表系统的设计与实现2.1 数据归档链路从变量采集到数据库落地要做报表先得有历史数据。WinCC里的变量分为原始变量和归档变量两类。原始变量就是你在变量管理里建的连接变量它只有当前值要形成历史趋势、能查过去某一天的数据必须给变量创建“过程值归档”。归档的本质是往SQL Server数据库里持续写入数据。以WinCC 7.5为例数据库名一般是项目名WinCC例如CC_ProjectName_24_01_01_01_01_01这样的格式。过程值归档的存储方式有两种周期性归档按固定时间间隔采样存储。变化归档只在数值变化时存储。做报表常用的产量、温度、压力、流量这类变量我一般建议用周期性归档采集周期根据工艺要求定比如1秒、5秒或1分钟。这里有个经验积累的归档数据会越来越大WinCC默认的数据库存储上限大约是2GB老版本或更多新版本超了之后旧的归档段会被自动覆盖。如果要做月度报表建议至少每季度做一次归档数据导出备份否则数据丢了找不回来。2.2 报表设计用控件还是用外部ExcelWinCC自带报表能力比较尴尬它有一个“报表编辑器”Report Editor但在7.x里主要用来生成项目文档和数据库报表做运营类的数据报表并不是它的强项。我实测下来运营报表最好用的有两种实现方式。第一种是在画面上放WinCC的在线表格控件WinCC TableControl或趋势控件WinCC OnlineTrendControl直接显示实时/归档数据操作员在屏幕上就能看。这种方式适合做日查询面板比如选择起始时间和结束时间表格控件会自动查归档数据显示出来。第二种是把数据导出到Excel用Excel做二次汇总和图表。这需要在VBS脚本里用ADODB连接WinCC的归档数据库把查询结果写到一个临时CSV或直接操作Excel对象。这第二种方式我后面会给一个简化的代码示例。两种方式各有用处画面控件适合日常点选查看Excel导出适合月度统计和汇报材料。如果厂里要求自动生成PDF报表并定时发送邮件那就要再加第三方工具了比如VBS调用PDF打印机或对接邮件服务这个不在本文展开。2.3 用VBS把归档数据导出到Excel先声明一下这个方法是基于我自己的项目实践总结的WinCC 7.x的VBS可以通过ADODB组件直接查询数据库查到的数据再写入Excel。核心步骤如下获取当前项目的数据库连接字符串。通常可以在WinCC的“文档/数据库”信息里看到格式大致是ProviderSQLOLEDB;Data Source计算机名\WINCC;Initial CatalogCC_项目名_xxx;Integrated SecuritySSPI。在VBS里创建ADODB.Connection和ADODB.Recordset。用SQL语句从AIM_Archive相关视图中查询归档数据。WinCC归档数据的底层视图名在不同版本里略有出入比较常用的是AIM_xxx系列视图和RTE_xxx系列表。举一个简化示例请在WinCC VBS编辑器中视情况调整Dim conn, rs, sql, fso, ts Set conn CreateObject(ADODB.Connection) conn.ConnectionString ProviderSQLOLEDB;Data Source ComputerName \WINCC;Initial Catalog DBName ;Integrated SecuritySSPI conn.Open sql SELECT ValueDateTime, RealValue FROM ArchiveTable WHERE ValueName产量1 AND ValueDateTime startTime AND ValueDateTime endTime Set rs conn.Execute(sql) Set fso CreateObject(Scripting.FileSystemObject) Set ts fso.CreateTextFile(D:\Report\data.csv, True) Do While Not rs.EOF ts.WriteLine rs.Fields(0).Value , rs.Fields(1).Value rs.MoveNext Loop ts.Close conn.Close这里有几个坑直接查WinCC的归档库时表结构比较复杂我建议先通过SQL Server Management Studio连接上去查看确认表名和字段名。不同项目的变量ID对应的实际表记录可能不同需要根据ValueName或变量ID来过滤。查询时间范围不能太长几个月的数据一次性查出来很容易超时建议按月查询或者按批次查询。Excel写入如果数据量大用CSV格式再导入Excel比直接操作Excel对象快一个数量级。2.4 与Access/MySQL外部数据库交互的补充思路有些场景要求把WinCC的数据同步到外部数据库比如Access、MySQL给MES或报表系统用。WinCC本身不直接提供MySQL连接器但可以通过VBS的ADODB或ODBC驱动实现。我做过一个项目是把产量数据每班结束写入Access数据库用的是类似下面这个思路Dim conn2 Set conn2 CreateObject(ADODB.Connection) conn2.ConnectionString ProviderMicrosoft.Jet.OLEDB.4.0;Data SourceD:\DB\report.mdb conn2.Open conn2.Execute INSERT INTO 产量表(班次, 产量, 日期) VALUES(甲班, totalValue , Now() ) conn2.CloseMySQL也可以只要装了MySQL的ODBC驱动连接字符串换成Driver{MySQL ODBC 8.0 Unicode Driver};Serverxxx;Databaseyyy;Userroot;Password***就行。需要注意的是Windows服务运行环境下32位和64位ODBC驱动要装对版本VBS在WinCC里默认可能是32位环境如果你只装了64位ODBC驱动连接会直接报错。3. 画面自动全屏轮播的实现3.1 轮播逻辑用全局脚本定时切换画面画面轮播在WinCC里实现方式不止一种最省事、最稳定的是用全局脚本Global Script配合时间触发器定时调用SetPictureName或OpenPicture函数切换画面。先说整体思路新建一个全局VBS脚本在里面维护一个当前画面索引每次执行时判断当前时间然后切换到下一个画面。同时用一个触发周期为几十秒的触发器如10秒、30秒周期触发这个脚本。以两张画面循环为例Dim screenIndex If screenIndex 1 Then screenIndex 0 Else screenIndex screenIndex 1 Select Case screenIndex Case 0 SetPictureName NewPdl0.pdl, 画面窗口1, 画面1.PDL Case 1 SetPictureName NewPdl0.pdl, 画面窗口1, 画面2.PDL End Select这里用画面窗口Picture Window承载要轮播的画面外层有一个固定的框架画面比如带标题栏、时间显示框架画面里只放一个画面窗口控件运行时切换画面窗口的PictureName属性即可。这个方案的好处是外层框架可以一直显示当前时间、日期、报警指示灯等公共信息不管画面怎么轮播值班员都能看到统一的信息。如果要整屏完全切换可以直接用OpenPicture打开独立画面但这样公共信息每张画面都要做一遍维护成本高我不推荐。3.2 全屏的实现真全屏和假全屏的区别标题里特别强调“是全屏哦”说明很多人在全屏这里栽过跟头。WinCC运行系统全屏分为两种情况假全屏窗口标题栏还在或者任务栏还露出来画面看似放大了但没铺满整个显示器。真全屏整个显示器只显示WinCC画面没有任何系统窗口元素操作员无法通过AltTab或任务栏切走。真全屏的实现通常有两种做法第一种做法是在WinCC项目的“计算机属性” - “图形运行系统”里设置窗口属性关闭标题栏、关闭边框、设置窗口大小为显示器分辨率。这种方法对单台显示器比较有效但遇到多屏大屏或分辨率不一致时容易出错。第二种做法是用运行系统的全屏参数。在“计算机属性” - “启动”里设置运行参数或者在图形运行系统的启动命令行中加入/F参数不同版本有差异强制全屏运行。我实测7.4版本可以通过在运行系统启动对象的属性里设置“全屏幕”选项来实现。另外还有一个很实用的小技巧用VBS在画面加载时调用HMIRuntime.Window相关的属性控制窗口状态比如Dim Wnd Set Wnd HMIRuntime.Window Wnd.Height Screen.Height Wnd.Width Screen.Width Wnd.Top 0 Wnd.Left 0这样可以在运行系统启动的第一张画面里执行一次强制把窗口铺满屏幕。不过不同版本的属性名略有差异要根据实际环境微调。3.3 轮播时间与刷新策略的取舍轮播间隔设置多少合适取决于具体场景。如果是展厅大屏30秒或60秒切换一次比较合适如果是控制室值班大屏建议10-20秒太慢了操作员觉得卡太快了看不清。我一般把切换时间设置成可配置的放在一个文本变量里这样现场调试时可以随时改不用重新编译脚本。这里有个容易忽略的问题WinCC的脚本触发器和画面刷新是两套机制。即使脚本每10秒触发一次切换画面画面里的变量刷新周期是另外设置的。如果归档变量的采集周期是5秒而画面3秒就刷新一次那画面上看到的数据其实是没有变化的给人以“系统卡了”的错觉。实际调试时可以把画面刷新周期和轮播周期对齐或者稍微错开避免视觉误导。另外画面切换时会重新加载画面的所有对象如果某张画面包含大量历史曲线查询加载会比较慢甚至出现闪白。解决办法是把历史查询放在画面加载完成事件里异步执行或者把查询逻辑放到画面窗口中的子画面里切换时先显示框架子画面数据逐步加载。3.4 模板画面与变量管理让轮播画面维护更轻松随着轮播画面越来越多维护成本会明显上升。如果10张画面每张都独立做后面修改公共布局就要改10遍。我建议用“模板画面变量前缀替换”的方式。具体做法是在框架画面中放一个画面窗口轮播的画面都基于同一个模板复制生成。模板里只放各种趋势控件、表格控件控件的变量连接使用相对变量名而不是绝对变量名。这样新建一张车间的画面时只需要复制模板、改显示标题和变量前缀即可。WinCC里变量前缀可以在画面窗口的“变量前缀”属性中设置例如框架画面里画面窗口的TagPrefix设为车间1_那么画面窗口内的所有相对变量都会自动加上这个前缀访问车间1_温度1。这个功能在轮播场景下特别好用因为我只需要维护一组控件模板然后为每个车间设置不同的变量前缀和显示名称就能快速生成大量轮播画面。实际部署的时候要注意变量前缀是运行时动态添加的如果变量不存在或者连接断了画面上的控件会显示########或无效调试时要用WinCC的变量模拟器Variable Simulator提前验证前缀是否正确。4. WEB发布与远程浏览4.1 Web Navigator安装与授权WinCC的Web发布官方组件叫Web Navigator也叫WebUX或Web Navigator Client。它的原理是在服务器端安装Web Navigator Server通过IISInternet Information Services把WinCC项目发布成Web应用客户端不需要安装WinCC只要浏览器访问服务器地址就能看到并操作画面。安装时有几个前置条件容易出错服务器上必须安装并启动IIS功能在Windows“启用或关闭Windows功能”里勾选IIS相关选项包含IIS 6 Management Compatibility、ASP.NET等。Web Navigator的版本要和WinCC主版本严格对应比如WinCC 7.4配Web Navigator 7.4尽量不要跨版本用。服务器上必须安装Web Navigator Server授权并且客户端连接数量不能超过授权数量。如果服务器开着防火墙要放行80端口或443端口如果启用HTTPS。这里我要特别提一句Web Navigator配置过程中最麻烦的不是软件本身而是IIS与WinCC之间的权限问题。Web Navigator的应用程序池默认使用Windows身份验证如果当前用户没有WinCC项目的访问权限网页打开就是空白页或登录失败。建议在IIS中把Web Navigator应用池的标识设置为一个有WinCC权限的域账号或本地账号并确保该账号在WinCC用户管理器中存在且分配了相应的角色。4.2 项目发布与客户端访问配置Web Navigator的使用流程大概是这样的在服务器上安装并授权Web Navigator Server。在Web Navigator的“Web发布器”工具里选择要发布的WinCC项目。设置发布的起始画面比如大屏轮播的框架画面。启动IIS站点确认Web服务正常。客户端通过IE兼容模式或Edge浏览器的IE模式访问http://服务器IP/WebNavigator/地址。客户端首次访问时Web Navigator通常会要求安装一个ActiveX控件或Web组件这是正常现象需要在浏览器设置里允许运行ActiveX控件WinCC 7.x时代主要依赖ActiveX新版WebUX逐渐转向HTML5不需要ActiveX。有一点要提前跟用户说明Web Navigator的网页画面和原始WinCC画面在控件渲染上是有差异的。复杂控件比如某些ActiveX插件、第三方控件在网页端可能显示不全或无法交互。我做过一个项目画面上放了一个第三方视频控件在大屏端正常但通过Web Navigator浏览时视频区域就是黑块。所以规划画面时如果确定要Web发布尽量使用WinCC自带的标准控件。对于只要看画面、不做操作的用户可以给Web Navigator客户端配置“只读”权限需要登录时把用户添加到只读角色中防止误操作。这在远程监看的场景里非常重要。4.3 没有Web Navigator授权时的替代思路Web Navigator授权不便宜而且有些老项目采购时根本没有预算。如果只是想要“网页能浏览”这个效果我试过几条替代路径这里分享一条最靠谱的用远程桌面服务Windows RDP做中转或者用第三方的可视化转发工具如某些支持HTML5的远程桌面网关把服务器桌面或某个窗口发布到网页上。这种方式的好处是零开发、不需要改WinCC项目Web端看到的画面和操作员站完全一致。坏处也很明显并发用户数多了会卡而且安全性需要自己把控不适合作为正式的对外发布方案。另外远程桌面转发方案对屏幕分辨率要求高如果服务器分辨率是1920x1080客户端是1366x768画面会被压缩体验不佳。我的建议是如果是临时给领导展示一下用远程桌面方案就够了如果是正式的对外远程监控需求还是老老实实买Web Navigator授权别在这个环节省钱不然后面无数个加班夜会找上你。4.4 服务器端运行与客户端浏览的分工Web发布方案落地后服务器端实际上承担了WinCC运行系统和Web服务双重压力。如果服务器本身还在做数据归档和报表导出性能很容易成为瓶颈。我的经验是如果项目规模小变量数量在1000以内、同时在线Web用户不超过5个一台高性能服务器能扛住如果变量过了5000或者并发用户比较多建议把Web Navigator单独部署到一台Web服务器上通过WinCC的C/S架构连接到主服务器获取数据。这样Web服务器只负责转发画面和数据主服务器专注采集和归档稳定性和响应速度都能提升。WinCC的C/S架构本身就支持多客户端会话这是官方推荐的做法。5. 常见问题与排查技巧实录5.1 一个可直接对号入座的问题速查表做这种综合项目最容易遇到的问题我整理成了一张表都是我实际碰见过的现象可能原因解决办法WinCC运行系统手动启动正常但开机不自动运行未设置项目自动启动或Windows服务被禁用在WinCC项目管理器里设置项目为“自动启动”或使用Windows计划任务启动运行系统报表导出Excel时提示“无法创建对象”Excel未安装或VBS权限不足在服务器上安装完整版Excel或改用CSV导出查询归档数据结果为空查询时间格式不对或变量未加归档检查变量是否已创建过程值归档确认时间格式WinCC里常用MM/DD/YYYY HH:MM:SS格式画面轮播时大屏短暂黑屏画面切换时加载过重使用画面窗口轮播避免整页OpenPicture全屏后任务栏还看得到窗口属性未正确设置检查图形运行系统属性中的窗口边框和标题栏设置或使用VBS强制调整窗口大小Web网页打开后登录失败用户未在WinCC用户管理中创建或IIS应用池权限不足在WinCC用户管理中创建同名用户并分配角色调整IIS应用池标识Web网页画面中视频控件黑块第三方控件不被Web Navigator支持替换为WinCC标准控件或独立提供视频Web端32位/64位ODBC连接外部数据库失败ODBC驱动版本不对分别安装32位和64位ODBC驱动并在VBS环境中验证归档数据量过大导致数据库膨胀未做归档分段或未定期清理在WinCC归档配置中设置合理的分段周期定期备份清理历史段这张表不能覆盖所有情况但覆盖的场景已经能解决大多数调试中的“怎么都不行”的绝望时刻。5.2 几个必须重点留意的细节坑第一个坑是WinCC 7.5的英文时间格式问题。项目里如果服务器区域设置为英文WinCC的原始时间和显示时间格式会不一致报表查询时用YYYY-MM-DD HH:MM:SS可能查不到数据而WinCC内部记录的是MM/DD/YYYY HH:MM:SS格式。建议在服务器上统一区域为中文中国或统一使用ISO 8601格式字符串拼接查询条件。第二个坑是WinCC运行系统的“无法连接到服务器”。这个报错经常在启动运行系统时出现原因可能是SQL Server服务未启动、项目文件被占用、或者用户权限不足。排查顺序先检查Windows服务中的“SQL Server (WINCC)”和“SIMATIC Shell”服务是否正常运行再确认当前Windows用户是否有WinCC操作权限最后检查项目管理器打开的项目是否和运行系统一致。第三个坑是开机自动启动。很多工程师以为把WinCC运行系统快捷方式放到“启动”文件夹就行但实际运行系统加载需要数据库服务先起来。如果数据库服务还没有完全启动运行系统会报错。正确做法是在WinCC项目管理器中设置“计算机属性” - “启动” - 勾选“运行系统”这样WinCC会自动等待SQL服务就绪后再启动。或者写一个批处理脚本先启动SQL服务再延时30秒最后启动运行系统。5.3 调试环境与生产环境的差异调试时WinCC项目可能跑在自己的笔记本上环境是Win10 WinCC 7.5 SP2但生产环境可能是Windows Server 2019或2022安装路径、用户名、权限策略都不同。我强烈建议在项目交付前按生产环境重新完整走一遍发布流程特别是Web Navigator的IIS配置。我在一个项目里就踩过这样的坑笔记本上Web发布一切正常换到服务器上后IIS缺少ASP.NET功能角色网页直接500错误折腾了一个晚上才定位到原因。另外生产环境服务器的Windows更新策略也要注意。有些安全补丁会重置IIS配置或影响SQL Server认证方式导致WinCC运行系统或Web服务突然中断。建议在服务器上做好例外策略重要补丁在测试环境验证后再打。6. 我的一些个人经验补充项目做下来最大的感受是这套方案最值钱的部分不是某个脚本或某个配置而是“把三条需求统一规划”的思路。如果一开始就只做报表后面加轮播要改画面结构如果一开始只做轮播后面加Web发布又遇到控件兼容问题。我建议任何做WinCC项目的朋友在项目启动前就先问清楚将来有没有大屏轮播和远程浏览的需求哪怕这次不做也在画面设计时用标准控件、变量命名做好前缀规划这样以后扩展就不至于推倒重来。最后再分享一个小技巧如果现场调试轮播画面时经常要改切换时间可以不用每次都编辑脚本再激活项目直接把切换时间做成一个WinCC内部变量比如Screen_Switch_Seconds然后在全局脚本里通过HMIRuntime.Tags(Screen_Switch_Seconds).Read读取这个变量然后用Timer或者循环检查变量变化来决定是否切换。这样现场工程师只需要在操作员画面上修改这个数值就能调整轮播速度不需要碰任何代码省了很多沟通成本。这套组合方案我已经在两个项目里完整落地过稳定运行超过半年。如果你们的工厂也正好有类似需求照着这个思路去搭大概率能把踩坑时间从两周压缩到两三天。
返回列表