ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

WinCC报表实战:打印、查询与导出全解析

WinCC报表实战:打印、查询与导出全解析 简介面向西门子WinCC V7.x与博途WinCC的自动化和PLC工程师这份控件资源省去了复杂脚本编写通过图形化配置即可生成专业生产报表适用于经典版软件与TIA Portal集成环境两大平台。包体共15个文件、约10.94MB既有运行所需的DLL、EXE与配置文件也有XML数据定义便于理解报表结构和数据绑定方式附带的PDF使用手册与MP4入门视频覆盖从安装、配置到实际调用的全流程适合快速上手当前已有6713人学习下载。借助该控件使用者可灵活选择曲线图、柱状图、饼图等图表类型实现动态数据绑定、定时触发与打印导出并能集成报警记录与权限管理确保敏感生产数据安全其中的EXE可执行文件即控件主体配合DLL组件即可在目标工程中直接引用。掌握这套工具后能显著缩短报表制作时间将精力放在生产分析上对提升工业数据可视化与智能监控水平很有价值。 搞WinCC项目的人十有八九会被“报表”两个字缠住。操作员要产量报表设备要停机统计领导要交接班记录最后这些需求全压到组态工程师一个人头上。WinCC自带的报表控件并不像想象中那么顺手现场真正要凑出一套能用的报表往往要同时用好Report Designer、Online Table控件、脚本导出Excel甚至直接去翻归档数据库。这篇文章就把WinCC报表这条线上的实现思路完整理一遍顺带把开发报表时经常碰到的画面跳转、二次确认、按钮打印、全局脚本、版本迁移这些高频问题一起串成实战经验。无论你是刚接手WinCC项目的新手还是被报表需求来回折腾的老工程师应该都能在里面找到几条能立刻用上的东西。1. 先分清你要的是“打印”还是“数据导出”1.1 需求类型决定技术路线WinCC里的报表需求看着多本质上只有三类打印归档型、屏上查询型、对外导出型。判断标准非常朴素这份报表最终是给人签字用的还是给另一个系统做数据用的是需要固定格式的纸面输出还是只要能查到某个时间段的数据就行答案不同技术路线天差地别。我见过不少项目一上来就装Report Designer结果最后要的是给Excel二次加工的日报表白白浪费了两天组态时间。我自己的习惯是拿到报表需求先填一张表明确四件事给谁看、什么格式、多久生成一次、需不需要打印签字。这么一理选型基本就出来了根本不会纠结。1.2 打印归档型纸面输出和签字是核心交接班记录、报警签名单、成品抽检单这类报表最典型的特点就是格式固定、重复性高必须落纸经常还要现场签字。这类需求用WinCC自带的Report Designer就能对付核心是“布局页动态表格”把变量归档、文本列表、时间戳这些信息排进页里最后投给打印机或者PDF生成器。1.3 屏上查询型Online Table Control能顶一半活儿操作员只想在运行画面上查一下“昨天下午三号机组的产量是多少”这类属于屏上查询。我用得最多的是Online Table Control在图形编辑器的控件面板里就能找到。它可以绑定到变量归档或用户归档运行时让操作员自己选时间范围不用为这种小需求专门开发一整套报表界面。Online Table Control有个短板导出的CSV格式可控性很弱表头、列顺序基本由控件默认逻辑决定所以它只适合内部确认数据不适合直接拿去给客户或者进归档系统。1.4 对外导出型别在报表控件里耗时间如果报表要进Excel模板、要发给MES系统或者要做OEE、良率这类复杂统计就果断放弃WinCC报表控件。最靠谱的路子是直接读归档数据库然后自己写Excel、CSV或者让第三方报表工具直连数据库。WinCC的数据最终都落在归档库里读出来的数据反而最原始、最干净怎么做统计都行。这部分细节比较多放到第3节单独讲。三种需求在真实项目里经常混着出现交接班用打印型屏上查看用Online Table给生产管理部门的日报Excel则从外部生成。所以投项目前花半小时梳理一遍报表清单比急着打开Report Designer有用得多。2. Report Designer官方报表组件的拿手活与软肋2.1 打开方式先确认装没装组件很多工程师一听到Reports第一反应是在图形编辑器里找但Report Designer其实是个独立工具。它是WinCC的一个扩展组件安装时如果没勾选装完之后在开始菜单里根本找不到入口。WinCC装好后Report Designer一般在开始菜单的SIEMENS WinCC Tools目录下。项目规划阶段就确认下这个组件到底装了没有后期补装非常折腾我和同事就吃过这个亏连续被安装界面卡了两个小时。2.2 布局页和动态表格的组态套路Report Designer的设计思路和Excel有些像核心对象是“布局页”。基础操作流程是这样的新建一个布局页确定纸张大小和页边距。在布局页里放置页头、时间范围、动态表格、签名栏这些元素。动态表格需要绑定打印作业指定数据来源是变量归档还是报警消息归档。调整行高、列宽、字体然后把布局页分配给具体的打印作业。这里有个概念容易绕晕布局页和打印作业不是一回事。打印作业定义了“打印什么数据”布局页定义了“数据在纸上长什么样”。一个布局页可以被多个打印作业复用反过来一个打印作业也能关联不同的布局页。项目里经常有人问“为什么打印出来的格式不对”十有八九就是打印作业和布局页的关联关系弄错了。2.3 按钮触发打印和定时打印的实现“WinCC怎么设置按钮打印”这类问题我见得太多了。其实只是不知道触发函数叫什么。在画面按钮的鼠标事件里调用Report Designer的打印函数就行最基础的C脚本是这样#include apdefap.h void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { // 触发名称为ShiftReport的打印作业 PrintReport(ShiftReport); }写这脚本有个细节必须注意PrintReport里面的字符串必须和Report Designer里打印作业的名称完全一致包括大小写。我排查过的“按钮点了没反应”案例里这个原因占了很大比例。定时打印则要放到全局脚本里处理。新建一个全局脚本动作用定时器做周期触发到整点判断系统时间再调用同一个打印函数。这里有个从我踩坑里总结出来的原则不要在画面脚本里用Sleep之类的延时等待它会直接卡死画面刷新线程整个HMI界面都会变得非常迟钝。2.4 什么时候果断放弃它Report Designer处理格式简单的固定报表很顺手但一旦涉及“动态表格跨页重复表头”“循环行内做复杂计算”这类需求就非常痛苦。我花时间最多的就是行高和字体调整有些版本的行高设置奇奇怪怪的调一次要重新编译一次打印作业。所以报表格式频繁变化、统计逻辑复杂的时候我不会硬磕它直接就转去读库加Excel导出的方案。3. 读归档数据库、写Excel才是报表自由的大门3.1 别直接去翻归档库的表结构WinCC的历史归档数据库底层是SQL Server或者SQL Anywhere时间一长很多工程师会冒出“直接从库里取数”的想法。这个思路没错但千万别直接跨库写SQL查表因为不同版本的表名、字段名并不统一直接依赖表结构的查询脚本等升级或者换项目之后大概率会跑挂。推荐的方式是走WinCC提供的OLEDB Provider也就是WinCCOLEDB这个访问层。它把归档数据的底层结构封装起来了不同版本的差异由Provider自己消化脚本端反而不用怎么改。我很多项目从7.0升到7.5报表脚本只改过连接串的Catalog名称查询语句基本没动。3.2 查询语句的基本思路用ADO组件连接数据库之后核心工作就是构造查询语句。查询时必须带上时间范围和变量编号过滤否则一次把整个归档库拉出来现场工控机的负担会非常大。这里给一个VBS骨架方便理解整个流程Set conn CreateObject(ADODB.Connection) conn.Provider WinCCOLEDB conn.ConnectionString Data Source主机名;Catalog归档库名; conn.Open Set rs conn.Execute(SELECT ... WHERE ... 时间范围条件 ...) Do Until rs.EOF 逐行处理查询结果 rs.MoveNext Loop rs.Close conn.Close上面这个连接串和查询语句都得根据现场实际情况调整别指望照抄能跑。每个项目的归档库名、变量名都不一样这部分必须自己对着WinCC的项目属性去核对。3.3 全局脚本是报表服务最好的容器差不多每个做WinCC的人都会问“全局脚本怎么写”。我的回答是把全局脚本当成你项目里的公共函数库报表这种业务逻辑特别适合放在这里。原因有三条画面按钮只管调用不用在几十个画面里重复粘贴大段代码。全局脚本可以被周期触发定时报表轻松实现。后期改SQL逻辑只需要改一个地方不用满项目找按钮里的脚本。实际项目中我习惯把报表查询、文件导出、日志写入这些公共操作全部收敛到全局脚本里。画面动作里只保留一行调用语句看起来干净调试的时候也省心。3.4 写CSV和Excel时容易翻车的细节导出CSV时建议用Stream方式写文件编码务必选带BOM的UTF-8否则Excel打开文件后中文会乱成一团。这个问题我在现场遇到过很多次排查到最后发现不是数据错了是文件编码不对。如果是真正的Excel操作用COM对象调用Excel程序是最常见的做法但前提是现场工控机上装了完整版Office。精简版、绿色版Office在COM调用上经常出问题建议项目规划时就确认工控机软件环境。另外报表查询操作千万别放在PLC扫描周期里频繁触发查询历史库很耗CPU应该设计成“点一次查一次”或者每天凌晨执行一次。4. 报表按钮旁边才是坑最多的地方4.1 用VB跳转画面的两种写法和一个坑报表画面之间经常要跳转“WinCC怎么用VB单击按钮跳转到另一画面”的最简方案是Sub OnClick(ByVal Item) HMIRuntime.Screens(ReportPage).Open End Sub经典WinCC里也可以用C脚本的SetPictureName但两者不要混用。这里有一个特别容易被忽略的细节画面名称在WinCC里是区分大小写的而且使用了画面树之后跳转时可能还要带上层级路径。我见过项目里按钮动作反复改都不跳转最后发现是画面名大小写不一致。4.2 二次确认和置位复位别在画面脚本里硬扛报表打印按钮往往需要二次确认防止操作工误触打印一堆废纸。很多新手习惯直接弹MessageBox但WinCC运行环境下这种情况要非常小心如果画面运行在服务器上弹窗很可能在远程客户端上不显示操作工以为没反应就再点一下结果连点三下打了三份。更工程化的做法是用画面窗口做一个自定义确认按钮。或者把确认逻辑做到全局脚本里形成一个状态机先置位“打印请求”等确认信号返回后再触发打印。C脚本里经常涉及的对变量置位、复位要注意一个问题如果置位后马上复位PLC那边可能根本采不到这个脉冲。我自己的做法是通过一个反馈信号来判断上一轮打印结束再走下一轮置位这样最稳。4.3 按钮触发打印没反应先查三个地方打印按钮点了没反应不要急着怀疑脚本先把三件事查完打印作业名称和脚本里PrintReport的字符串是否完全一致。Report Designer里布局页是否分配给了正确的打印作业。打印作业里设置的纸张尺寸和打印机默认纸型是否一致。第三个问题是我调查时间最长的一次排查了一个多小时最后发现是打印作业设的是A4而打印机默认纸型是LetterWindows后台把作业卡住了。这种问题没有任何报错提示只能靠挨个核对设置项来排查。4.4 环境问题会把项目进度直接拖垮WinCC对运行环境极其敏感热搜里“无法启动基本应用程序”“怎么卸载干净”“CrypAcquireContext报错”这类问题本质都是系统环境被污染了。我的经验是装WinCC的机器尽量不要装其他工业软件专机专用。卸载旧版本之前先把项目、授权、组态文件都备份好然后按常规方式卸载卸完再手动检查Siemens相关目录有没有残留文件。安装授权时报错优先检查Automation License Manager这个服务和系统底层加密服务是否正常运行。这种问题最好直接联系西门子官方支持渠道网上的各种野路子方案风险很大很容易把一个原本还能用的系统彻底搞坏。5. WinCC Unified 时代报表思路要跟着换5.1 Unified 不是经典WinCC的换皮WinCC Unified是西门子推出的Web化新平台脚本语言换成了JavaScript和HTML5经典WinCC里的C脚本、VBS脚本全部不再支持。这个变化直接影响报表开发你在老平台积累的脚本知识没法直接平移过去但好消息是Unified的数据交互方式比老平台开放得多报表能力上限反而更高。5.2 Unified画面模拟在哪点别去找“激活运行系统”从经典WinCC转过来的工程师最容易卡在一个问题上Unified的画面模拟在哪里启动在经典WinCC里我们习惯去点“激活运行系统”按钮但在TIA Portal里处理Unified项目时完全不是这个路径。正确方式是选中Unified设备在设备相关操作里点“Start Simulation”也就是开始仿真。如果在菜单里找不到就看工具栏上有没有仿真按钮或者检查一下当前硬件版本是否支持仿真。5.3 Unified下的报表实现思路到了Unified平台报表的做法更接近现代Web开发画面里放表格控件通过OPC UA变量绑定或REST接口把生产数据喂进去。需要导出时用JavaScript在浏览器侧生成CSV文件用户直接用浏览器下载。复杂统计建议把数据接口独立出来做成Web服务画面只负责展示。如果你在经典WinCC时代习惯了一种“C脚本一脚踹”的写法到了Unified要刻意调整一下把数据获取和画面展示拆开。前期多花一点时间做接口设计后期的维护成本能降很多。我在实际项目中养成一个习惯不管需求怎么变先把“哪张报表给谁看、什么格式、生成频率、用打印还是导出”写进需求表格再决定技术路线。报表功能从来不是WinCC项目里最亮眼的部分却是最后验收时最容易被揪住不放的地方。最后再分享一个小技巧开发报表阶段把查询时间区间做成公共变量调试的时候用变量状态监视直接把时间值改掉比反复改代码快得多。等所有画面都绑好了再把这个变量藏到系统画面里整套报表功能开发就能收尾了。本文还有配套的精品资源点击获取
返回列表