多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

WinCC报表制作全攻略:从变量归档到脚本报表及常见问题排查

WinCC报表制作全攻略:从变量归档到脚本报表及常见问题排查 干工控这些年凡是跟WinCC打过交道的人迟早都要面对一个问题报表怎么做。产线要日报、月报领导要看产量、能耗、报警统计产品追溯要导出历史数据——这一堆需求最后几乎全落在WinCC的报表功能上。很多人一开始觉得报表就是“打印个表”真上手才发现WinCC报表牵扯到变量归档、报警记录、脚本触发、打印布局、数据库查询一套组合拳下来没点底子根本玩不转。但换个角度说正因为这套功能覆盖面广把报表学明白了你的WinCC水平能直接上一个台阶它是名副其实的学习利器。这篇博文不打算照着帮助文档念我想站在实际用过的角度把WinCC报表从功能架构、数据来源、报表类型到实操步骤、常见坑位完整拆一遍。不管你是刚摸WinCC的新手还是已经在做集成项目的工程师按这篇的思路去理报表这条线能少走很多弯路。1. WinCC报表到底能做什么为什么值得系统学1.1 报表模块的功能全貌WinCC的报表功能官方名称叫“报表编辑器”Report Editor它不是一个孤立的工具而是跟WinCC的变量记录、报警记录、用户归档、脚本系统深度绑定的一个综合模块。你可以在项目树里找到“报表”节点里面有布局Layouts、运行报表Runtime Reports、打印作业Print Jobs等子项。布局就是报表的“模板”决定表格长什么样、哪些列、哪些数据运行报表是实际生成的数据文件打印作业则负责把报表按时按量地送出来。日常生活中最容易理解报表的方法是把它类比成Excel布局就是Excel的模板运行报表就是用当前数据填好的Excel文件打印作业就是定时帮我按模板填数、打印的那个人。WinCC报表的强大在于它不需要你每次手动导数据而是能在运行时自动按周期、按事件生成报表并且支持多种输出形式——预览、打印、导出PDF或CSV、存成CSV文件供外部系统读取。这里面有一个很核心的设计思路WinCC报表的底层数据来自数据库SQL Server或Sybase报表本质上是“数据库查询 模板填充”的封装。理解了这个你就能明白为什么报表经常跟变量归档质量、数据库连接状态强相关很多报表异常根子其实在数据源头报表本身只是“背锅的”。1.2 为什么说它是学习利器我见过不少工程师学WinCC就是拖几个变量、连一下PLC、做个画面动画然后就觉得学完了。这种水平做演示还行做真实的产线项目就会露馅——因为产线离不开数据追溯和统计报表。报表功能恰恰把WinCC的几个核心子系统串在了一起变量记录Tag Logging没有归档报表就是无米之炊这是数据的地基。报警记录Alarm Logging报警统计、报警摘要都靠它这是事件数据源。全局脚本C/VBS报表的自动触发、数据整理、文件导出全要脚本驱动。数据库知识报表查询本质是SQL写报表就是写数据库查询逻辑。所以我的观点很直接如果你能把WinCC报表从头到尾吃透你的变量归档配置能力、脚本编写能力、数据库理解能力、项目调试能力都会跟着涨。报表功能是WinCC的“综合体”啃下来就是一次完整的进阶训练。这个模块还特别适合做练习因为报表结果看得见、摸得着。变量归档配没配好报表马上就反映出来脚本写错没写错运行报表直接告诉你。这种强反馈特性比干看文档学习效率高得多。2. 报表的数据从哪来掌握三大数据源2.1 变量记录报表的“原料仓库”WinCC的变量归档可以理解成把过程值按一定时间周期存进数据库。归档分为周期性归档和非周期性归档。周期性归档就是按固定扫描周期采集比如每秒、每10秒、每分钟存一次非周期性归档则是当变量值变化时才记录。做报表之前第一件事必须确认你的变量都建了归档。操作路径是“变量管理 → 选中变量 → 右键属性 → 归档”。这里有两个关键参数采集周期和归档周期。采集周期决定数据采得密不密归档周期决定数据落库的节奏。原则上采集周期越短数据越细但数据库压力越大。一般模拟量按秒级或分钟级采集即可开关量可以按变化归档来减少数据量。我踩过的一个坑是早期做项目为了数据“准”把所有变量都设成1秒采集结果变量一多数据库暴涨SQL Server空间一满整个WinCC项目运行卡顿报表也开始丢数据。后来改成重要变量1秒一般变量10秒次要变量变化时归档问题才解决。报表的精度永远要跟归档的精度对齐归档没配好报表再花哨也是白搭。2.2 报警记录事件数据的核心来源报警记录是报表的另一大主力数据源。停机统计、故障频次、报警时长这些报表全都要从报警记录里取数。WinCC报警记录会记录报警发生的时刻、到达时刻、确认时刻、离开时刻这些时间戳是后续做停机分析报表的核心依据。配置报警记录时要注意消息类别和消息类型。举例来说可以用“故障”类别和“警告”类别分别对应不同级别的报警报表条件查询时按类别过滤这样统计口径才统一。报警文本也要规范因为报警报表最终要把文本打出来如果报警文本本身写得混乱报表再漂亮也救不回来。报警报表最常见的需求是“统计某段时间内每种报警发生了多少次”“哪些报警最频繁”“停机总时长多少”。这些需求WinCC自带的报警报表布局就能做也可以通过SQL自定义查询。关键在于理解报警记录数据库里各字段的含义比如“到达时间”和“离开时间”用于统计时长“消息文本”和“编号”用于分组计数。2.3 外部数据OPC通讯与KepServerEX的补充实际项目里经常有这种情况报表需要的数据不全在WinCC里有一部分在PLC里、第三方设备里甚至MES/ERP系统里。这时候就得通过外部接口把数据引进来。KepServerEX是典型的OPC服务器能把各种品牌的PLC数据统一采出来再通过OPC接口发到WinCC。WinCC做OPC客户端读到的数据就可以参与变量归档进而进报表。用KepServerEX与WinCC通讯时有几点值得注意OPC UA和OPC DA的选择新版WinCC建议用OPC UA跨平台、安全性好且支持复杂数据类型老项目里OPC DA还常见但只支持Windows通讯稳定性在跨网段时也差一些。服务器和客户端的DPUData Processing Unit要配对好KepServerEX侧要启用对应通道WinCC侧的OPC条目管理器里要能找到变量。通讯状态要监控外部数据源一断归档的就是“坏值”报表数据就没有意义。建议把通讯状态做成一个变量也参与归档方便事后追溯。外部数据这块是很多报表项目的难点。曾经做一个动力监控项目电表数据不从PLC走而是从电表网关Modbus读到KepServerEX再转发到WinCC。中间试了UDP直连、OPC DA连接都不稳定最后换成OPC UA配好安全策略通信连续跑了一个月没掉线。从此我的对外通讯首选基本都是OPC UA。提示报表最终输出的内容只取决于数据源里有什么。数据质量差、口径不统一、时间戳对不齐做出来的报表就是错上加错。做报表之前先花时间把数据源捋清楚比急着拖表格重要十倍。3. 从入门到进阶四种报表类型逐一拆解3.1 变量记录报表基础但绝对核心变量记录报表专门输出变量归档的数据比如温度趋势、压力曲线、产量累计。WinCC里最常见的变量记录报表分为表格型和趋势型。表格型报表就是把归档值按时间列出来适合要明细数据的场景。Excel导出后还能二次处理。趋势型则是把历史数据画成曲线这就是大家常说的“历史趋势曲线”。WinCC的在线趋势控件能看实时数据但要看历史曲线底层其实还是靠变量归档。我分享一下历史趋势控件显示历史数据的几个关键配置点控件要绑定归档变量不是绑定普通过程变量。绑错了历史曲线就是空的。时间范围、曲线颜色、上下限范围要提前设置好运行时用户才能切换。想实现“按钮点击就显示最近24小时曲线”可以在控件的VBS/C脚本里调用HMIRuntime.Trends(历史趋势).ActivateTimeRange之类的方法。实际调试时很多人说“历史曲线显示不出来”我排查的第一件事永远是去WinCC的变量归档里看有没有数据。如果在归档编辑器里能看到数据但曲线不显示那就是控件配置问题如果归档就是空的那是采集或归档配置的问题跟曲线控件无关。这样一分排查范围直接砍掉一半。3.2 报警记录报表统计分析的利器报警记录报表的价值在于统计分析。最常见的功能有报警频次统计按消息文本、报警类别分组统计出某段时间内每种报警出现了多少次。报警时长统计计算报警从发生到确认的时间、从发生到恢复的时间用于分析设备故障时长。报警摘要报表把一段时间内的报警全部列出来按时间排序用于生产交接班。创建一个报警统计报表基本思路是新建布局 → 选择“报警记录”作为数据源 → 在表格列里配置要显示的字段如消息文本、到达时间、离开时间、确认时间→ 用“汇总”功能配置分组和统计字段。这里非常有用的一个技巧是如果要做某个班次比如早班8点到16点的报警统计就在报表的数据源里设置时间过滤器不要等报表生成了再手工筛。WinCC的报警报表支持两种输出方式一种是通过布局直接预览打印另一种是通过脚本查询数据库再生成自定义报表。前者适合标准报表后者适合特殊格式。做自动化上下料产线的时候客户要求按“停机故障TOP10”做月报标准布局实现不了最后是写了一个VBS脚本轮询报警记录数据库按报警次数统计排名再填入Excel模板。这种方式灵活度高但需要一定的数据库查询能力。3.3 用户归档最容易忽略的报表数据源用户归档User Archive在WinCC里是一个特别的存在它更像一张你自己定义的数据库表可以存放配方、产品信息、操作记录、质检结果等结构化数据。报表需要这些数据时可以直接关联用户归档。用户归档的典型用途配方表每种产品的配方参数存在用户归档里报表打印当前产品配方。操作日志操作员登录、修改参数、切换画面的动作记录。生产批次记录批次号、生产时间、操作员、关键工艺参数一次生产一条记录。实操中用户归档和变量归档有个明显的分工变量归档存“连续变化的过程值”用户归档存“离散的业务记录”。比如蒸汽灭菌设备温度压力曲线是变量归档灭菌批次、灭菌时间、操作员、合格与否就放用户归档。报表打印时上半部分是配方信息和批次信息下半部分是温度曲线这种报表才真正贴近生产管理需求。用户归档还有一个优势——它是WinCC里少数可以直接通过数据库SQL查询的数据分区理解它的结构后写脚本做自定义报表会顺畅很多。3.4 脚本报表深度定制的终极手段当标准报表满足不了需求时就必须上脚本。WinCC支持C脚本和VBS脚本报表相关的操作大多可以通过脚本实现自动化。脚本报表能实现的高级功能包括定时自动导出CSV/PDF存到指定文件夹。自动发送邮件报表把日报发到管理者邮箱。通过ADO访问SQL Server直接查询WinCC历史数据库按业务逻辑处理数据。将报表数据写入Excel模板生成符合公司格式要求的报表文件。我举个实际的例子一个造纸车间的日产量报表需求每天早上6点自动统计前一天从6:00到次日6:00每台纸机的产量、良品率、停机时间生成Excel发到管理层邮箱。这个需求完全用WinCC自带报表布局实现很麻烦但脚本可以实现。脚本的核心是ADO数据库连接。WinCC历史数据存储在SQL Server里可以通过SQL查询变量归档表按时间段聚合处理。比如SELECT * FROM LC_LINK..TAG:R WHERE ...这类SQL语句来取数。脚本写法并不复杂难点在于理解WinCC数据库表结构。注意写脚本报表的前提是数据库连接和访问权限正确。跑脚本的用户需要具备访问SQL Server对应数据库的权限。很多脚本“没反应”的问题不是逻辑不对而是权限不够或连接串写错了。4. 实操一条龙手工打造一张带趋势的生产日报表理论讲再多不如做一遍。接下来我完整演示一遍从零创建一张“生产日报表”的实操流程这张日报包括三个部分顶部是产量统计汇总中间是几个关键参数的历史趋势底部是报警摘要。4.1 建变量归档和报警记录首先在变量管理里确认关键变量已建归档。演示场景是两个产量累计变量产量A、产量B、一个温度变量、一个压力变量。打开变量记录的“定时器”和“过程值归档”把温度、压力设为10秒采集周期产量变量设为100毫秒采集或变化时归档。报警记录里建立两个客户端报警一个“温度超限”一个“压力超限”作为报警统计的数据来源。这一步千万别急着做报表布局。先打开变量记录编辑器等一会儿看看表格里有没有数据在刷。确认数据没问题再往下走。如果这里没数据后面全白做。4.2 创建报表布局在项目树里找到“报表”右键“新建报表”。布局此时是一个空模板需要插入表格和控件。在布局页面上插入一个“表格”对象数据源选“变量记录”在“列”里配置时间、产量A、产量B、温度、压力。再插入一个“趋势”对象数据源同样选“变量记录”绑定温度、压力两个变量设置不同的曲线颜色。在页面顶部插入静态文本框填写报表标题、日期等静态信息。插入报警表格数据源选“报警记录”配置报警时间、报警文本、确认状态等列。布局设计有一个经验先考虑纸张方向和幅面。现场报表一般A4横向因为趋势图横向显示效果好。布局页面大小要和打印机匹配否则打印出来老是被切边。4.3 配置打印作业和定时器报表布局做好后要让它按周期自动出来。在“报表”下新建一个打印作业作业里指定要运行的布局设置有效的打印机并配置触发条件为“周期”。打印作业触发条件有三种常用方式按时间周期触发比如每24小时触发一次适合日、周、月报。按WinCC变量触发用一个Bool变量控制工程师上位机点按钮就能触发打印。按报警触发报警发生时自动打印当前报表适合故障记录。我这个日报表选择“时间周期”触发同时设置报表输出方式为“打印到PDF文件”这样可以先出PDF留档再按需纸面打印。4.4 用脚本让报表数据自动对账一个自动报表如果只把“当前时间往前24小时”打出来口径上容易出错。比如早班报表应该统计7点至15点而不是“运行报表那一刻之前8小时”。这里必须通过脚本控制数据范围。脚本里可以这样处理在报表触发时计算上一个班次的起止时间。通过报表对象的方式设置数据源过滤器或直接通过数据库查询对应时间段的数据。把时间段写入静态文本框或表格里的日期字段。写脚本时需要注意脚本运行时机要对比如用变量触发时可以在变量变化事件里写脚本用周期触发时可以在打印作业的输出前事件里写脚本。我以前写过一个失误版本把脚本写在变量初始值事件里结果每次启动项目报表数据范围都不对。踩过这个坑之后我对脚本运行时机越来越敏感。4.5 验证和微调最后一步是验证。手动触发一次打印作业查看PDF输出。检查报表标题、日期是否正确。数据时间范围是否符合预期。趋势曲线是否完整有没有长时间断线。报警统计是否只包含选定时间段内的事件。验证环节最容易发现“时间偏移”问题比如报表显示的最后一笔数据和实际时间差了几分钟这通常是因为触发电平领先于报表取数时刻或者数据库查询参数时区错了。微调方式一般是在脚本里把查询结束时间往后延长一个采集周期保证能取到完整数据。提示报表调试阶段不要直接在正式生产环境里反复打印先建一套测试环境和模拟数据把逻辑跑通了再部署到运行系统。5. WinCC报表常见问题与排查技巧实录5.1 历史趋势曲线显示不出来这个现象出现频率极高。排查思路按顺序走检查变量归档有没有数据打开变量记录编辑器看最近一段时间是否有归档值。检查趋势控件是否绑定了“归档变量”而不是“过程变量”。检查趋势控件的时间范围和当前时间是否匹配如果控件默认显示的时间窗口太窄曲线会被“挤”出可视区域。检查控件“在线”和“离线”模式历史曲线要用“离线”数据源如果用“在线”模式只能看实时数据。我见过一个最调侃的案例工程师把趋势控件的时间范围设成了1分钟然后看24小时的曲线怎么看都是空白还非说是WinCC的Bug。改成“最近24小时”后一切正常。这类基础配置错误占历史曲线排查的大头。5.2 报表预览无显示或打印空白预览无显示问题多半出在数据源或者权限。排查点当前用户是否对报表模块有执行权限。WinCC的权限体系里如果用户没有“报表运行”权限打开预览就是空白。报表布局中数据源是否配置正确尤其检查“数据源类型”是变量记录还是报警记录选错类型表格没数据。打印作业或报表运行时数据库连接是否有问题。SQL Server服务停了报表也会“听不到数据”。5.3 打开工程“无显示”有朋友遇到过WinCC flexible打开工程时“无显示”以前正常某天突然不行了。这种情况通常在WinCC flexible和WinCC之间需要先区分如果整个运行系统启动后无画面先检查运行系统的图形运行器和项目激活状态。如果是WinCC flexible打开工程文件时界面空白多数是软件版本兼容性和画面对象的字体、图形库缺失问题。之前正常、后来异常优先考虑系统更新导致的控件注册失效重装对应版本的WinCC flexible或补装图形运行库能解决。写到这里多说一句很多“无显示”的问题其实是WinCC和Windows补丁更新打架了。工控机Windows更新要严格控制我都是直接关闭自动更新只在维护窗口期手动挑选关键补丁。这不是小题大做现场一台机器蹦了产线数据全停代价太大了。5.4 拷贝工程后报表数据丢失这是WinCC项目最常见的迁移坑。直接把项目文件夹复制到另一台电脑打开后报表里一片空白原因是变量归档数据还在原机器数据库里没有跟随项目文件一起走。正确的迁移方式是使用WinCC自带的“项目复制器”它会连同数据库一起打包或者用“备份/恢复”功能。如果你只是复制了工程文件那就只有报表布局和配置没有历史数据。明细确认一下报表布局、变量归档配置、历史数据是三个不同的东西迁移时缺一不可。5.5 报表服务进程不工作有些项目用了WinCC的“Report Manager”相关功能会遇到报表进程被禁用或服务未启动的问题。在WinCC服务器架构里报表服务依赖多个Windows服务比如SQL Server服务、WinCC Runtime服务。检查顺序Windows服务管理器里查看SQL Server服务是否运行。检查WinCC的服务进程是否正常启动若停止手动启动后测试打印。确认运行系统用户账号对报表服务有启动权限权限不足时服务会“闪退”。在多人协作项目里如果报表服务部署在服务器上要给每个客户端用户分配合理的权限。权限过大不安全权限过小报表功能残缺需要权衡。5.6 数据“对不上账”的报表公式问题有不少人做SAP扣账报表、MES对账报表时发现WinCC统计的产量和SAP系统扣账数量对不上。这个问题的根源通常在统计口径不一致时间口径SAP按订单批次扣账WinCC按自然时间累计同一个产品横跨两个时段时就会对不上。定义口径WinCC里产量变量可能是“理论产量”SAP里是“合格入库量”中间剔除了废品数字当然不一样。单位口径吨、千克、件之间的转换系数没对齐也是常见原因。解决思路是统一时间基准、统一数据定义、统一单位换算三者缺一不可。最好的做法是在WinCC脚本里做一次数据“清洗”按订单号、批次号对齐后再输出报表而不是直接拿原始累计变量写死上去。这几类问题看起来各不相同但根本思路是一致的先查数据源头再查中间链路归档、数据库、脚本最后查展示层。从头查到尾80%的报表问题都能定位剩下的20%就是数据库连接和权限这种环境问题。报表排查从来不是一个点的事而是一条链的事。6. 一些扩展思路报表功能背后的学习价值报表表面上是“打印一张表”实际上它是WinCC综合素质的试金石。刚开始做报表的时候你可能只需要会配置布局和数据源做多了就会发现自动化、参数化、异常处理才是报表真正花时间的地方。我建议有精力的朋友往这几个方向扩展学习SQL基础报表查询、统计、分组、连接这些SQL能力在WinCC报表里能直接复用。学习VBS脚本WinCC的VBS能操控报表对象也能操作Excel和文件系统灵活度远超标准布局。学习打印和PDF流程工控环境里打印机和打印服务经常出问题掌握PDF输出能规避掉大量现场麻烦。学习大数据量归档的规划归档周期、数据库归档策略、存储空间计算这些在报表性能优化时特别有价值。只要你把报表这条线打通你在WinCC项目里就不再是“画画面的人”而是能解决业务数据需求的人。这两者的价值差距在项目验收和后续维护阶段会体现得特别明显。我自己带新人时也喜欢从报表入手先让他配归档再让他做一张日报表最后让他写一个自动邮件发送脚本。三关过了WinCC的基础功就扎实了。这个方法我试过好几轮效果都很稳定比干讲理论快得多。报表这件事刚开始上手会有一堆琐碎的坑要踩但每踩一个坑你都会对WinCC的数据体系理解深一层。等你把数据源、布局、脚本、打印作业都摸透了再回头去看当初觉得“高不可攀”的需求会发现其实都是纸老虎解法就在你已经掌握的这些模块组合里。
返回列表