ARTICLE DETAIL

资讯详情

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

WinCC报表编辑器从打印作业到消息序列的完整配置指南

WinCC报表编辑器从打印作业到消息序列的完整配置指南 简介一份以WinCC报表制作为主题的教学课件面向工业自动化工程师、HMI组态人员及需要监控数据报告的维护人员定位为具有一定组态基础、希望系统掌握报表设计与打印配置的技术参考。包内含一个演示文稿文件大小约六百五十一千字节是浓缩型图文讲义十五页内容以幻灯片形式组织适合零散时间快速学习。目前已有一百零六人学习浏览在同类教程中属于实用向资料。内容从报表编辑器元件样式切入详解打印作业与打印布局的命名逻辑、文件输出、打印输出与报告输出方式并针对消息序列、消息归档、测量值趋势与表格报表分别说明适用场景还单独给出画面区域拷屏的屏幕截取函数示例用于捕获指定控件区域并生成图片。整体覆盖报表制作从组态到输出的完整链路阅读后可直接迁移到实际WinCC项目中帮助理解报警记录、历史数据与实时趋势的可视化组织方法。1. WinCC报表制作从消息序列到画面拷屏的一次完整拆解做WinCC项目的工程师迟早会被一个问题卡住画面做好了、变量连好了、报警也归档了甲方突然要一份能定时打印或者手动触发的报表。很多人第一反应是去脚本里拼文本文件费劲不说格式还难看。实际上WinCC自带的报表编辑器就能干这件事只是它的设计思路和Office完全不一样——它不讲“画表格”讲的是“组态打印作业”。这份PPT学习教案把报表编辑器从元件样式、打印任务配置到消息序列、消息归档、测量值趋势、甚至画面区域拷屏的C脚本都过了一遍适合正在做WinCC项目、需要输出报警记录或测量值报表的工程师也适合刚接手别人项目、看不懂报表配置的新手。我拆这份教案时发现真正容易翻车的往往不是报表本身而是打印目标的设置和行式打印机的适配。2. 报表编辑器元件样式先搞懂打印作业、打印布局和输出目标的关系2.1 报表编辑器里到底有哪些元件样式WinCC的报表编辑器不是像Excel那样直接拉一个表格区域而是围绕“打印作业”组织的一套组件。打开报表编辑器后左侧会列出已有的打印作业每个打印作业对应一个具体的输出任务比如“报警消息序列”“消息归档”“测量值趋势”。每个打印作业下挂一个打印布局布局决定了输出的版式——是页式布局还是行式打印机布局这直接影响后续能在布局上放哪些元件。元件样式可以理解为布局上的可放置对象文本、静态行、消息序列、消息归档、趋势、表格、框线等。页式布局适合在线消息列表行式打印机布局则对应老式的针打设备元件样式受限但胜在兼容性好。教案里第1到第4页就是在强调先分清你要做的是在线消息、归档消息还是测量值再选对应的元件样式顺序反了后面全都白搭。2.2 打印作业名称、打印布局名称和F、P、RP的含义在报表编辑器的打印作业属性里可以看到几个关键字段打印作业名称、打印布局名称、打印输出到。打印作业名称是逻辑标识自己起名就行比如“ShiftReport_Alarm”打印布局名称则指向实际的布局文件一个布局可以被多个打印作业复用。输出目标里常见三个选项FFile输出到文件PPrint直接送打印机RPReport生成报表。这里注意F输出的是打印数据流文件不是格式化好的PDF别指望拿它直接交付给甲方。教案里特意提到“打印输出到”可以选择打印机、文件或其他打印机这个“其他打印机”通常指网络打印机或背板打印机。实际项目里我一般这样配置日常巡检用P直接打需要留存凭证时用F存文件RP用于批量生成报表后统一处理。三者的区别在数据流格式上F生成的.rtf或.emf文件必须先有对应的布局支持否则打印出来是乱的。2.3 打印任务组态的操作步骤# 打开WinCC项目管理器 - 报表编辑器 # 右键打印作业 - 新建打印作业 # 填写打印作业名称例如 Alarm_Shift_Report # 在打印布局名称下拉列表中选择已有布局或新建布局 # 设置打印输出到为 打印机 / 文件 / 其他打印机 # 确认后双击打印作业进入布局编辑界面这段操作对应的是在WinCC报表编辑器里新建一个打印作业的最基本路径。关键在于“打印布局名称”的选择——如果下拉里没有可用布局需要先在“布局”节点下新建否则打印作业是无法激活的。参数方面打印作业名称建议带班次或日期含义比如NightShift_Alarm方便后续在脚本里动态指定。布局选择完成后双击进入布局界面才能放置元件。常见做法是先放一个消息序列元件再调整它的显示列和过滤条件。教案第4页的操作逻辑就是从这里展开的如果布局类型是“行式打印机布局”元件选择会受到限制——只有消息序列和静态文本可用趋势和表格元件不支持这是很多人在配置时第一次遇到的分岔口。3. 消息序列报表在线消息列表的页式布局与行式打印机的取舍3.1 页式布局的在线消息报表怎么配置消息序列报表处理的是实时报警或状态消息它直接读取WinCC报警记录运行时缓冲区的内容。双击布局里的消息序列元件会弹出属性对话框这里有三个关键配置点消息过滤条件、显示列、排序方式。过滤条件可以用消息编号、确认状态、到达时间等字段组合显示列则决定了报表里出现哪些内容——比如“到达时间、消息文本、确认状态、确认时间”。教案第4页强调“双击-在这里定义消息的格式”指的就是这个对话框。实际做项目时我建议在过滤条件里加上消息类别或优先级否则会把系统诊断消息也打进去一份报表里混着操作员消息和系统消息甲方看了会觉得不专业。另外页式布局支持分页每页行数可以在布局属性里设置通常设40到60行比较合适再多打印出来字体就太小了。3.2 行式打印机布局打印机型号的兼容边界教案里明确列出了可用机型所有HP Deskjet/Laserjet/Paintjet、Canon BJC系列、Epson LQ系列。这个列表比较老但逻辑没变——行式布局走的是字符流协议对打印机的数据解释能力要求低所以老式针打和低端喷墨都能支持。这里有个很隐蔽的坑教案里提到“计算机启动列表里需要激活Message Sequence Report”。我在现场就遇到过报表编辑器里已经配好了打印作业但重启WinCC后消息序列报表不工作查了半天发现是启动列表里没有勾选这个运行库导致报警记录运行时根本没有加载消息序列报表组件。激活方法是在WinCC项目管理器里打开“计算机属性 - 启动”把“Message Sequence Report”勾上然后重启项目。3.3 消息序列报表的常见配置错误踩过的坑里最容易犯的是忘记区分在线消息和归档消息。消息序列报表读的是实时缓冲区一旦WinCC重启缓冲区里的消息就没了如果要做历史追溯必须用消息归档报表。另一个坑是打印机驱动选择虽然Epson LQ系列被列为可用但如果你在Windows里装的是LQ-630K的驱动且选了Esc/POS模式打印出来的格式会错乱必须选ESC/P模式。还有个细节是打印触发方式。消息序列报表支持定时触发和事件触发定时触发在“打印作业属性 - 调度”里设置周期事件触发则需要写C脚本调用ReportPrint函数。我一般用定时触发做整点打印事件触发做报警确认时补打两者不冲突。4. 消息归档报表与测量值报表历史数据输出的两种形态4.1 消息归档报表100%表示最后100条消息的语义消息归档报表读的是WinCC报警记录的历史数据库不是实时缓冲区。教案第6到第7页提到的“100% means that the last 100 messages will be printed”这是在归档报表的起始位置参数里设置的——比如设置起始位置为90%如果归档库里共有1000条消息就从第900条开始打印打最后100条。这个百分比在项目里很实用比如交接班时只需要打最近一个班次的消息就可以动态计算这个百分比。参数设置路径双击消息归档元件 - 选择“归档选择”页 - 起始位置选“百分比”填90。注意这个百分比不是精确的行数如果归档库有筛选条件实际打印的条数可能少于预期。更精确的做法是用时间范围过滤但时间过滤在归档报表里的配置比百分比复杂需要写SQL风格的条件语句新手容易在语法上翻车。4.2 测量值报表的趋势显示快捷菜单里的缩放与颜色测量值报表分两种趋势和表格。趋势报表把一个或多个变量的历史数据按时间轴画成曲线教案第8到第10页演示了快捷菜单里的功能——趋势颜色和y轴比例调节。趋势颜色在元件属性里逐个变量设置y轴比例可以设成自动或固定范围。实际项目里y轴比例是个大坑。如果两个变量的量纲差异很大比如一个测温度一个测压力自动比例会把压力曲线压成一条直线。我一般手动设y轴范围或者用双y轴——WinCC趋势报表支持左右两个y轴在“坐标轴”属性里指定变量归属即可。教案里没细讲双y轴但这在实际使用中几乎是必须的。快捷菜单里的“y轴的比例调节”就是在运行时用鼠标拖动调整但调整结果不会保存到布局里每次重新打开报表还是默认比例别指望它能记忆。4.3 测量值报表的表格形态测量值表格报表就是把变量值按时间顺序一行行列出来适用于需要精确数值比对的场景。表格元件的配置要点是三列关键参数采样周期、时间范围、变量列表。采样周期决定了数据密度如果设得太密而打印行数有限数据会被截断设得太疏又丢失细节。我常用的做法是采样周期设为10秒时间范围为8小时这样大约2880行数据分页打印刚好。表格报表还有一个“最大值最小值”功能可以在输出时自动附加统计行。这个功能在现场非常有用——交接班报表里既有每个小时的测量值又有本班次的最大最小和平均值甲方很吃这一套。配置在表格属性里有“统计”页勾选“显示统计行”并选择需要的统计函数即可。5. 画面区域的拷屏PrtScreenPart函数的C脚本参数详解5.1 为什么需要画面拷屏而不是直接PrintScreenWinCC自带的打印功能只能打印整个画面或当前窗口如果要截取画面上某个控件区域比如某个趋势控件的局部就需要用PrtScreenPart函数。这个函数来自prtscrn.dll可以按照指定的左上角坐标和宽高截取画面区域生成.emf文件。教案第12页给出的示例代码是完整的我直接解析一下这段代码的结构。它先去掉了prtscrn.dll的声明然后通过GetLeft、GetTop、GetWidth、GetHeight获取名称为“Control1”的控件的坐标和尺寸最后调用PrtScreenPart执行截取。注意最后一项参数“Hoehe80”——多加了80像素这是为了把控件下方的标签栏或操作按钮也截进去避免截出来的图片缺一块。5.2 在WinCC C脚本里完整落地#pragma code(prtscrn.dll) BOOL PrtScreenPart (ULONG left, ULONG top, ULONG width, ULONG height); #pragma code() ULONG ObenX, ObenY, Breite, Hoehe; ObenX GetLeft(lpszPictureName, Control1); ObenY GetTop(lpszPictureName, Control1); Breite GetWidth(lpszPictureName, Control1); Hoehe GetHeight(lpszPictureName, Control1); PrtScreenPart (ObenX, ObenY, Breite, Hoehe 80);这段代码的逻辑是先从WinCC的画面对象模型中读取名为“Control1”的对象在当前画面中的实际坐标和尺寸然后作为参数传递给PrtScreenPart函数执行区域截取。注意GetLeft和GetTop返回的是画面像素坐标而PrtScreenPart接受的是ULONG类型所以用ULONG变量承接。如果控件在当前画面中不可见或被遮挡GetWidth和GetHeight仍然会返回实际值但截取的结果可能是空的或显示的是覆盖在上层的对象。参数层面的几个细节ObenX和ObenY是左上角坐标Breite和Hoehe是宽高单位是像素。Hoehe80这个偏移量是可调的——如果你要截取的是整个画面前建议偏移量大一些比如120如果只需要控件本体可以直接传Hoehe。运行这段脚本前必须先确保WinCC画面已打开否则lpszPictureName对应的画面不存在GetLeft会返回0截出来的就是左上角一块。5.3 拷屏后的文件流向PrtScreenPart默认把截取内容放到WinCC项目的GraCS子目录下文件名自动生成格式是.emf。这个路径可以在“计算机属性 - 运行”里配置画面存档路径但PrtScreenPart的输出路径是否跟随这个设置我记不清了——保险的做法是每次截图后在GraCS目录按文件时间排序找最新的.emf文件。教案第13页提到打印预览和用户报表实际上.emf文件可以再被其他打印作业引用比如一个“用户报表”打印作业里放一个图像元件把这个.emf文件作为图像源就能把截图嵌入到报表里打印。这样就能把趋势画面截图、报警消息列表合并到一份日报里输出这个组合用法在现场非常实用。6. 报表打印前的自检清单三个验证习惯避免现场翻车做报表配置最怕的不是配置难而是配置完了到现场才暴露问题。我整理了一个自检清单每次交付前强制走一遍。第一项是打印机通信验证在Windows里先用记事本发一行测试文本到目标打印机确认物理链路通再在WinCC里跑一次打印作业。很多“WinCC打印不工作”的问题其实是打印机驱动或共享权限的问题和报表配置无关。第二项是布局兼容性验证分别用页式布局和行式打印机布局各打一份测试报表确认目标打印机实际输出的格式与预期一致。行式布局在HP喷墨上打印效果很差字距和换行都不对如果你无法更换打印机就要改用页式布局并下调每页行数。第三项是时间基准验证消息归档报表和测量值报表里都有时间过滤条件如果不显式设置WinCC默认使用“最近一次运行结果”的时间基准这会导致报表内容变成“上一次打印时的数据”。我在做交接班报表时就掉进过这个坑——白班打印时显示的是夜班的数据就是因为时间基准没有重置。从那以后我每次配置新的打印作业都强制走一遍这三项检查尤其是时间基准提前确认过滤条件里选的当前时间。WinCC报表编辑器是个典型的“配置简单、调试隐蔽”的模块元件样式选对了输出目标选对了打印机的脾气摸对了报表就能稳定跑下去。希望这份拆解能帮你避开我踩过的这些坑把报表这块硬骨头啃下来。本文还有配套的精品资源点击获取
返回列表