ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

WinCC报表从原理到落地:变量归档、控件选型与脚本导出指南

2026/9/23 14:38:48 拓冰建站 浏览量
WinCC报表从原理到落地:变量归档、控件选型与脚本导出指南 简介一套面向西门子WinCC用户的报表制作PPT学习教案适合自动化工程师、HMI组态人员及工业现场运维人员。课件从报表编辑器基础元件入手讲解打印任务配置中的输出目标、打印作业名称、打印布局名称和F/P/RP选项并针对消息序列报表给出页式布局和行式打印机适配建议如HP、Canon BJC、Epson LQ等型号。消息归档报表部分说明如何筛选历史记录如设置100代表打印最后100条消息便于故障回溯测量值报表覆盖趋势图和表格两种形式演示通过快捷菜单调整趋势颜色、y轴比例和表格统计。还介绍画面区域拷屏函数与打印预览使用思路包内包含1个pptx文件约651KB配有示例代码和界面操作提示。该资源已有106人学习适合WinCC项目实施或培训参考。1. WinCC报表不是“画个表”先想清楚你要哪种报表做WinCC项目的人迟早会被“报表”两个字卡住。交接班要产量统计、月底要能耗曲线、客户要看报警汇总指标都不一样有的要看实时趋势有的要打印签字归档有的要拿去做Excel二次分析。同一个“报表”背后是三套完全不同的实现思路。很多工程师在趋势控件里硬做统计表或者在Excel里手动粘贴数据翻车是常态。WinCC报表能不能做出来九成不取决于报表控件本身而取决于你有没有先把数据归档这条链路想清楚。这篇文章把报表从原理到落地拆开讲新手照步骤能跑通熟手可以对照排查参数与边界。2. 先分清你要哪种WinCC报表画面控件、打印作业、还是数据导出WinCC报表这个需求真正问的是“历史数据怎么变成可读、可交付的产物”。而历史数据能不能查到、查得快不快、准不准全看WinCC变量归档的配置。所以先把原理立住再回到工具选型。2.1 报表的本质是“数据源、查询、呈现”三段式我见过太多人拿到报表需求就直接打开图形编辑器放一个表格控件开始拖列名。这个顺序是反的。WinCC报表的底层数据流其实非常固定现场变量先被WinCC采集进程读进来写入“变量记录”这个运行时组件再由变量记录组件把值落进WinCC自带的SQL Server数据库。之后趋势控件、报警控件、表格控件、VBS脚本本质上都在对着这个数据库做查询和呈现。理解了这条链路“报表做不出来”的排查思路就清晰了先看变量有没有进归档库再看查询有没有拿到期望时间段的数据最后才是控件、脚本或打印作业的表现形式。很多所谓的报表问题查到最后都是归档没开、存储周期不对或者时间基准没统一。我把这条链路上的关键检查和参数放在第3章先记住一个判断原则任何报表呈现层工具的查询速度都受制于归档数据的粒度和存储时长。原始值归档越密、存储越久查询越慢这不是控件能优化的。2.2 四种报表路径适用场景与门槛对比基于上面这条数据链路WinCC做报表的常见路径有四条我做项目时先在这些路径里选选定了再动手路径数据来源自动化程度典型场景门槛画面内趋势/报警控件WinCC归档库手动查询为主操作员在线查看运行趋势、报警历史低Print Job定时打印变量记录/画面快照按时间或事件自动触发交接班报表、值班记录签字归档中VBS脚本导出ExcelWinCC归档库/控件可定时、可二次加工产量统计、能耗分析、给管理层的日报中高外部报表工具帆软、锐浪、RDLC等WinCC SQL Server直连完整定时调度平台跨系统汇总、管理驾驶舱、多工厂合并报表高“组显示控件”也是一个容易被忽略的帮手——它可以把趋势控件、报警控件、表格控件按布局组合在一起配合页面切换做成一整块“报表页面”适合做操作站上的一键查看入口。但组显示控件解决的是“呈现层的组织方式”不能弥补后端归档的缺失这点要明确。顺着热词里反复出现的“帆软”“锐浪”“RDLC”这类外部报表工具再说一句它们能不能接WinCC取决于一件事——WinCC的归档数据库允许不允许外部账户以SQL方式访问。WinCC运行库的数据库实例默认在项目激活后对外提供SQL接口只要用有权限的Windows账户登录外部工具就能直连查询。但直连生产归档库有风险长时间复杂查询会拖慢WinCC自身归档写入。稳妥做法是建一个独立的报表服务器定时把WinCC归档库的数据同步出来再让帆软这类工具去读报表服务器的库不要直接怼着WinCC跑重查询。2.3 选型边界别拿趋势控件硬做统计报表我把选型边界压缩成一句话运行监视的画面报表用控件交接班签字用定时打印领导要的分析报表导出Excel或用外部报表工具。很多项目翻车就翻在越界——用趋势控件去展示“本月每天的平均产量”控件本身只擅长展示原始值或简单统计值随时间的变化跨天聚合、分组统计这些活它干不动。另一点边界是版本差异。WinCC V7.x经典版和WinCC Unified统一版的报表能力差别很大。V7.x用C脚本、VBS脚本、WinCC Online Trend Control这套成熟生态Unified则是基于Web的一体化环境控件体系不同脚本语法也变了。如果你手头是Unified项目直接照V7的教程写VBS导出Excel是走不通的需要改用其内部集成的报表组件或JavaScript方式。写PPT教案时这也是一个必须提前确认的版本前提不然现场演示会变成大型翻车现场。3. 用变量归档加控件做报表最小可用的完整套路把原理落到能操作的状态我按自己最常做的WinCC V7.x项目套路从零组一套能查历史趋势、能看报警、能导出Excel的报表页。这套动作大概占用一个半小时。3.1 先确认归档链路变量、采集周期、归档周期很多项目报表做不出来是因为变量根本没进归档。在WinCC项目管理器左侧右键“变量管理”找到你要归档的内部变量或外部连接变量确认它至少被勾选用于变量记录。然后打开“变量记录”编辑器新建一个归档数据窗口把需要归档的变量拖进去这时会遇到两个关键参数采集周期和归档周期。常犯的错是把两者理解成一个东西。采集周期是WinCC从PLC或内部读取变量值的间隔归档周期是变量记录把采集到的值写进归档数据库的间隔。典型设置是采集周期1秒、归档周期30秒也就是说每30秒在数据库里记一个值如果你需要秒级曲线归档周期就要压到5秒甚至1秒。但要注意归档越密数据库膨胀越快查询越慢。做报表查询时用得最多的不是原始值而是压缩归档——你只需勾选“平均值”“最小值”“最大值”这类压缩方式WinCC会自动把原始值按时间片聚合成一条统计曲线查询性能和曲线平滑度都会好很多。我常用的入门参数表供参考参数推荐初始值说明采集周期1s与PLC通信负载相关不要盲目加快归档周期30s日报、交接班报表够用秒级曲线再压到5s存储时长30天按项目要求调整注意磁盘占用压缩归档平均值最小/最大推荐开启省查询时间设置完记得右键“变量记录”→“运行系统”在“运行系统属性”里确认归档是在“运行期间创建”还是使用“项目内归档”。项目内归档适合做演示和教案数据可随项目复制运行期间创建适合长时间生产运行数据库文件独立管理。3.2 在画面里放趋势控件和报警控件三步接上数据源图形编辑器里新建页面从WinCC Controls工具箱拖入“WinCC Online Trend Control”趋势控件和“WinCC Alarm Control”报警控件。趋势控件默认是空的右键控件属性找到“曲线”配置页新建一条曲线把变量选为刚才已经归档的变量设置颜色、线宽。这一步有讲究新建曲线时弹窗里既能选变量也能选“归档变量”。报表查询必须选归档变量如果只选了普通变量在线运行时曲线是动态的一旦退出运行画面复盘历史数据就是空的。趋势控件工具栏上默认自带时间范围选择可以切换从“当前数据”回看“过去8小时”“过去24小时”也可以用工具栏的缩放按钮框选一段时间放大观察——这一步对报表来说就是“查询”动作。报警控件更直接拖入画面后右键属性在“消息列”里勾选时间、编号、消息文本、确认状态等显示列运行时会自动从归档报警表里读出历史报警。想要按特定时间段或特定条件筛选放在画面顶部的筛选工具栏里设置起止时间和优先级过滤即可。如果页面里有多个控件要联动把趋势控件和报警控件放进组显示控件做一个“报表页”切换时布局不散。3.3 用VBS导出Excel可复制的报表脚本控件适合看不适合交付。管理要Excel或者你想把多个变量按固定格式输出就得用脚本。WinCC V7里最成熟的是VBS脚本可以在画面按钮上绑“VBS动作”也可以做一个全局脚本定时触发。下面这份是我常用的导出产量汇总脚本逻辑清晰且能直接改参数用Dim objExcel, objSheet, objQuery Dim objTag, dblValue, strTime, nRow Dim strPath 配置区修改这一行即可改变导出位置 strPath D:\Reports\DailyReport.xlsx 创建Excel对象并设置为不可见模式避免画面卡顿 Set objExcel CreateObject(Excel.Application) objExcel.Visible False objExcel.DisplayAlerts False 新建工作簿取第一个工作表命名为“报表” Set objSheet objExcel.Workbooks.Add().Worksheets(1) objSheet.Name 产量报表 写标题行 objSheet.Cells(1,1).Value 时间 objSheet.Cells(1,2).Value 产量累计值 objSheet.Cells(1,3).Value 备注 从归档库按时间范围读取变量值写入Excel Dim objProvider, objCommand, objRecordset Set objProvider CreateObject(ADODB.Connection) objProvider.ConnectionString ProviderSQLOLEDB;Data Sourcelocalhost\WINCC;Integrated SecuritySSPI;Initial CatalogWinCC objProvider.Open 注意归档表名和变量名需与你的项目一致参考项目归档配置 Set objCommand CreateObject(ADODB.Command) objCommand.ActiveConnection objProvider objCommand.CommandText SELECT * FROM ArchiveTable WHERE ValueNameProductionCount AND TimeStamp BETWEEN 2025-06-01 00:00:00 AND 2025-06-01 23:59:59 Set objRecordset objCommand.Execute nRow 2 Do While Not objRecordset.EOF objSheet.Cells(nRow,1).Value objRecordset.Fields(TimeStamp).Value objSheet.Cells(nRow,2).Value objRecordset.Fields(Value).Value objSheet.Cells(nRow,3).Value 自动导出 nRow nRow 1 objRecordset.MoveNext Loop 保存并清理对象 objExcel.ActiveWorkbook.SaveAs strPath, 51 objExcel.Quit Set objExcel Nothing Set objSheet Nothing Set objRecordset Nothing Set objCommand Nothing Set objProvider Nothing脚本逻辑说明先创建Excel进程并在后台运行连上WinCC本机的SQL实例按条件从归档表取值逐行写入工作表最后另存为xlsx格式格式代码51代表xlsx。脚本里最需要改的是两个地方连接字符串里的数据库实例名通常是计算机名后加\WINCC以及归档表名和变量名的对应关系WinCC V7的归档表结构在不同版本里有差异最快确认方式是在SQL Server Management Studio里打开WinCC数据库看“Archive”开头的表里实际字段名。参数说明DisplayAlertsFalse用于关闭Excel弹窗避免自动运行脚本卡在“是否保存”对话框上SaveAs第二参数51表示xlsx若目标Excel版本较旧可改成56xls格式。脚本执行时间取决于查询区间大小和归档密度一次查一个月的数据可能要几十秒界面像卡住是正常的可以在脚本开头把鼠标改成等待状态提示操作员。3.4 定时打印与PDFPrint Job配置要点交接班报表最可靠的落地方式不是Excel而是定时把画面打印成纸质或PDF。在WinCC项目管理器的“打印作业”里新建作业选择要打印的画面或报表页模板触发方式选“时间触发”填入每班交班前15分钟的定时规则目标打印机填上PDF打印机或网络打印机。Print Job的触发条件有两种时间触发和事件触发。事件触发的典型误用是“报警确认时打印”实际运行中操作员忘记确认报警报表就永远打不出来。我的建议是交接班报表一律用时间触发别的场景再考虑事件触发。打印目标是一个物理打印机时注意WinCC运行服务器的实际连接情况——服务器在机房没有纸、打印队列堵塞这类问题会自动造成报表缺失没人知道少打了。稳妥做法是输出到网络共享的PDF打印机文件名带时间戳再让值长在交接班终端上确认文件生成。4. 把这套做法变成PPT学习教案培训时一定要演示的三个环节标题里有“PPT学习教案”说明这不是给自己用而是要培训别人、做成课件、让学员能照着学。课件怎么设计直接影响学员回去能不能复现。4.1 教案结构一个破冰、两个演示、一个排错我组织这类培训课件时常年的结构是四个环节破冰提出问题、演示正确路径、组织动手实操、设计一个可控故障点让学员排错。WinCC报表培训里破冰最好的素材就是“趋势控件只有实时曲线没有历史数据”的截图问学员原因通常能带出“归档没开”“时间段选错”“时间基准不一致”三种答案课堂气氛一下就活了。两个演示分别是“归档配置演示”和“控件组态导出Excel演示”。归档演示要做到在画面上看到一个变量从“有当前值无历史”到“回看24小时有曲线”的转变这个过程一分钟内可见教学效果最好。导出Excel演示要控制查询范围建议只查最近两小时数据让脚本在三五秒内跑完学员不会觉得“卡死”而分心。排错环节设计一个故障点就够了把某个关键变量的归档周期故意设成“从不”让学员在趋势控件上看到断线引导他们从数据链路上游到下游逐层排查。这不是考核是帮助他们建立排查顺序的记忆。培训教案的落地方案我一般做成一张速查表发给学员比PPT截图管用步骤检查点关键参数1. 建变量是否勾选“用于变量记录”采集周期1s2. 加归档是否添加归档变量归档周期30s开压缩3. 放控件曲线是否绑定归档变量时间范围选“过去8小时”4. 查数据能否看到历史曲线检查时间基准5. 出报表导出Excel或打印作业检查SQL连接字符串4.2 培训现场的版本与授权提前踩掉最大的坑WinCC培训最常见的翻车现场不是方案问题而是演示机的授权和版本问题。WinCC的报表、归档、打印作业这些功能在不同版本的授权包里覆盖范围不一样比如基础版可能没有报警归档或报表打印功能装的是“开发版授权”但运行时不覆盖“归档运行”的授权项激活项目时会卡在授权检查这一步。教案里必须加一张“课前检查清单”确认WinCC版本V7.x还是Unified、确认授权已安装且覆盖归档和打印功能、确认演示项目在目标机器上能正常激活运行、确认SQL服务启动状态。特别是SQL服务很多项目因为装过多个WinCC版本导致SQL实例名变化演示机上写着localhost\WINCC实际实例名可能是localhost\WINCCBINExcel导出脚本连不上数据库直接报错。把这些提前写进课件第一页比学员现场遇到再解决体面得多。4.3 让学员带走可复现的最小项目PPT只能给知识复现能力靠的是最小项目。我建议每次培训最后留20分钟让学员在机房WinCC环境里从零建一个“单变量归档趋势控件按钮导出Excel”的小项目。这个小项目就是前面第3章的最小版本不建多复杂画面不用连PLC用内部变量配合脚本制造一个锯齿波或正弦波作为模拟数据源学员能亲眼看到数据被归档、被查询、被导出。这样设计的理由是内部变量模拟没有硬件干扰任何人只要软件环境对就能跑通。跑通后学员才可以回去在生产环境里把内部变量替换成PLC变量掌握度比单纯看演示高很多。教案里注明如果机房机器没有WinCC授权就用教学试用授权配合项目内归档模式数据不落磁盘也能完成全流程演示。5. WinCC报表常见问题排查归档不落盘、查询不到、导出失败下面这几条是从做过的项目里攒出来的高频坑每一条都值得在排查时优先确认。5.1 现象趋势控件看不到历史数据只有实时曲线原因一曲线绑的不是归档变量而是实时变量退出运行再进历史自然消失。原因二变量记录运行组件没启动“开始”→“运行系统属性”→“是否需要启动变量记录”没有勾选数据从头到尾就没写进库。原因三时间基准问题——WinCC运行时使用的时区与SQL Server实例的时区不一致查询条件里的“今天0点”和库里值差了几个小时。解决趋势控件曲线属性里改绑归档变量确认变量记录组件启动在运行项目的机器上将Windows系统时区和SQL服务时区统一为东八区并在归档查询的SQL语句里用DateAdd(hour, -8, TimeStamp)这类方式显式校正UTC时间偏移。5.2 现象归档数据只存了一天重启后数据丢了原因归档存储配置成“运行时存储”WinCC运行停止后归档文件被重置或清理另一种是项目在开发机和生产机之间来回拷贝归档库路径对不上运行期写入了别的机器位置。SQL数据库文件膨胀后写满磁盘也会出现“今天的数据查得到昨天的查不到”的假象。解决在变量记录运行系统属性里选择“项目内归档”或指定固定数据库路径确保每次激活都写同一个库磁盘预留充足空间按每个归档值约72字节估算30天每秒1次24小时*3600秒的数据量要先算清楚关闭项目前做好数据库备份WinCC自带的项目备份功能会把归档连同组态一起打包。5.3 现象VBS导出Excel速度极慢甚至卡死原因脚本里逐单元格写入Cells(nRow,1).Value在数据量大时是主要瓶颈每写一个单元格就是一次COM跨进程调用几千行数据会拖出几分钟Excel进程弹出了“是否保存”之类的对话框脚本停在那里等待。解决用数组批量写入——先把查询结果存进一个二维数组再一次性赋给Excel的Range区域速度能提高一个数量级脚本开头加objExcel.VisibleFalse和objExcel.DisplayAlertsFalse如果脚本在画面上执行导致WinCC卡顿改用全局脚本配合定时器在后台执行操作员界面上不挂任何反馈动作。5.4 现象Print Job定时打印不触发或打印出来是空的原因触发条件设成了事件触发而事件从未发生打印模板里放置的是实时控件而非归档查询控件打印瞬间控件还没加载数据画面就已经快照了PDF虚拟打印机输出目录无写入权限。解决先改为时间触发做一轮测试确认打印作业本身通畅打印模板里用趋势控件时提前设置好时间范围属性并勾选“打开时自动刷新”也可以先打开该画面缓存后再打印PDF打印机输出目录统一规划为服务器本地固定路径不放在用户桌面。5.5 现象脚本编译报“语句未结束”或控件弹“握手错误”原因“语句未结束”绝大多数是C脚本的语法问题分号漏写、字符串引号不配对、中英文符号混入WinCC C编辑器对这类错误提示的行号有一定偏移越改越乱。“握手错误”则多是WinCC运行服务与控件库之间通信失败更换授权、误删系统组件后容易出现。解决C脚本一次只取消注释一段定位错误行先排除引号与分号再看函数名是否写全握手错误先重启WinCC项目再试严重的重启机器如果机器上装了多个版本的WinCC造成组件冲突直接在控制面板修复安装对应版本的运行组件。这个排查顺序能解决九成现场问题不神化也不硬猜。6. 把报表做成无人值守VBS定时任务与SQL直查归档库做到第5章为止报表还是“人要参与”的要么点按钮触发脚本要么手动查看打印输出。想真正省事就把整件事交给定时任务。常见做法是准备两个入口一是WinCC自带的全局脚本计划任务让VBS脚本在每天固定时间自动运行二是不依赖WinCC画面直接用Windows任务计划程序调用一个独立的VBS文件。后者的好处是WinCC项目是否打开都不影响报表生成。独立VBS里可以用ADODB连接WinCC的SQL实例直接查归档表做聚合把结果写入Excel后通过邮件或共享目录交付。关键改进点是把“逐行取值”改成“SQL聚合出结果再写表”比如SELECT ValueName, AVG(Value) AS AvgValue, MIN(Value) AS MinValue, MAX(Value) AS MaxValue FROM ArchiveTable WHERE TimeStamp DATEADD(day, -1, GETUTCDATE()) AND TimeStamp GETUTCDATE() GROUP BY ValueName这条SQL直接在SQL Server里完成了聚合VBS只需要把返回的记录集写入Excel省去几万行数据的传输。查询归档表时注意两点一是WinCC的归档表默认按时间分块长期运行后会有多张物理表直接查主表可能只覆盖最近一段需结合系统视图定位正确分表二是要留意ValueName字段在不同WinCC版本里的命名规则差异开发时先用一小段数据验证字段名再上全量逻辑。我个人的习惯是先在Excel里手工用数据透视表验证一次SQL聚合结果与手工统计一致再固化脚本。这个验证动作让我避免了太多次数据口径不一致的返工。“数据在哪、口径是什么、再决定工具”这个顺序是这些年做报表最值得养成的习惯。希望帮到你。本文还有配套的精品资源点击获取