上位机WinCC的报警归档与报表生成
WinCC作为工业现场主流的上位机监控软件,其核心价值不仅在于实时监控,更在于对生产数据的长期存储与追溯。报警归档用于捕捉生产过程中的故障与异常,而报表生成则是将这些数据转化为可查阅、可打印的记录。
核心逻辑与数据流向
在开始配置之前,必须理清报警与报表的数据流转过程。PLC将状态信号传送给WinCC,WinCC触发报警并存储到数据库,报表系统再从数据库中调用数据进行打印或导出。
理解上述流程后,我们将操作分为两个主要阶段:报警归档配置与报表设计输出。
第一阶段:配置报警归档
报警归档是实现故障追溯的基础,只有将报警正确存储,后续的报表才有数据可抓取。
1. 激活报警记录
打开 WinCC 项目管理器,在左侧树状菜单中 找到 Alarm Logging(报警记录)。双击 打开该窗口。
点击 工具栏中的 Alarm Logging(报警记录)图标(通常是一个带有感叹号的笔记本图标),进入 设置界面。切换 到 Settings(设置)选项卡,勾选 Activate Alarm Logging(激活报警记录)复选框。这一步是开启整个报警功能的总开关。
2. 设置消息块
消息块决定了报警记录中包含哪些具体信息。点击 窗口左侧的 Message Blocks(消息块)。
确保 以下常用的消息块处于选中状态(即打勾状态):
| 消息块名称 | 功能描述 | 推荐设置 |
|---|---|---|
| Date, Time | 记录报警发生的日期和时间 | 选中 |
| Point of error | 记录触发报警的变量标签名 | 选中 |
| Message text | 显示报警的具体文本描述 | 选中 |
| Error class | 显示报警的类型(如故障、确认等) | 选中 |
注意:表格上方与下方需保留空行以确保排版正确。
3. 定义报警变量
切换 到 Tag(变量)选项卡。这里需要将具体的PLC变量与报警系统关联。
点击 右侧的 Add(添加)按钮,选择 一个已经创建好的内部变量或外部变量(例如 Motor_Fault)。在弹出的对话框中,设置 该变量对应的报警参数。
设定 触发条件。通常情况下,选择 Bit 0(位0)作为触发位。这意味着当变量的第0位从0变为1时,触发报警来临;从1变为0时,触发报警消失。
输入 报警文本。点击 Text 文本框旁边的按钮,选择 语言并 输入 具体的故障描述,例如“1号电机过载报警”。
4. 组态报警类别
切换 到 Alarm Classes(报警类别)选项卡。WinCC默认提供了 Error(错误)、Warning(警告)等类别。
双击 Error 类别,查看 其属性。确认 其归档设置已激活(即 Archive 选项被勾选)。如果历史数据无需保留太久,可在此处调整归档的时间段或存储路径。
点击 OK 或 Apply 保存所有设置。
第二阶段:报警显示与测试
在生成报表前,需先验证报警功能是否正常工作。
1. 创建报警画面
打开 Graphics Designer(图形编辑器),新建 一个画面。
点击 右侧工具栏中的 Smart Objects(智能对象),拖动 WinCC Alarm Control(WinCC报警控件)到画面中。
双击 该控件,弹出 属性对话框。切换 到 Settings(设置)选项卡。
选择 Alarm Line(报警行)或 Alarm Window(报警窗口)类型。为了测试,建议选择 Alarm Window。
选中 Server Name,选择 当前计算机名称。点击 Selection(选择器)按钮,勾选 需要显示的报警类型(如刚才配置的 Error)。
点击 OK 完成设置。
2. 模拟报警测试
保存 画面并 激活 WinCC 项目。
打开 变量管理器或使用模拟器,手动修改 触发报警的变量(例如将 Motor_Fault 的第0位置为1)。
观察 画面中的报警控件。如果刚才输入的“1号电机过载报警”立即出现在窗口中,且时间戳准确,说明报警归档配置成功。
第三阶段:生成报警报表
报表的本质是将归档数据库中的数据按照特定格式排版并输出。WinCC使用报表编辑器来完成这一工作。
1. 创建报表布局
返回 WinCC 项目管理器,展开 Tag Logging(变量记录)或直接 找到 Report Designer(报表编辑器)。注意:在某些WinCC版本中,报表布局位于项目根目录或单独的 Report 节点下。
右键 Layouts(布局),选择 New Layout(新建布局)。命名 为 Alarm_Report。
双击 打开该布局文件,此时进入报表设计环境。
2. 添加动态对象
点击 左侧工具箱中的 Dynamic Objects(动态对象),选择 Alarm Control(报警控件)。拖动 该控件到报表页面中,并 调整 大小以覆盖合适区域。
双击 报表页面中的报警控件,配置 其属性。
切换 到 Parameters(参数)选项卡。这里的关键在于 设置 输出的时间范围。
如果需要打印“上一次运行期间的报警”,可以 勾选 Time Selection(时间选择),并 选择 Last Archiving Interval(上个归档周期)。
如果需要打印“指定日期的报警”,需 取消 自动选择,并 关联 两个内部变量用于指定开始时间和结束时间(例如 Start_Date 和 End_Date)。
3. 配置打印作业
关闭 布局编辑器,返回 项目管理器。
展开 Print Job(打印作业)文件夹。右键 打印作业,选择 New Print Job(新建打印作业)。
双击 新建的打印作业,进入 配置界面。
在 Layout 选项卡中,点击 下拉菜单,选择 刚才创建的 Alarm_Report 布局。
切换 到 Printer Selection(打印机选择)选项卡。选择 实际连接的打印机,或安装一个虚拟PDF打印机以便生成电子文档。
勾选 Start Print Job Automatically(自动启动打印作业),并 设置 触发事件(例如每日固定时间,或者通过变量触发)。
4. 运行时输出报表
激活 WinCC 项目。
触发 打印作业。如果设置为变量触发,改变 对应的内部变量状态。
查看 打印机输出队列或生成的PDF文件。确认 文件中包含了报警发生的时间、文本以及确认状态,且格式与布局中的设计一致。
若需调整列宽或字体,反激活 项目,重新打开 Alarm_Report 布局,双击 报警控件进行属性修改,再次保存并运行测试。
进阶技巧:数据筛选与公式计算
在复杂的报表需求中,可能需要对报警时长进行计算。例如,计算某个故障的累计停机时间。
假设变量 $T_{start}$ 为故障开始时间,$T_{end}$ 为故障结束时间,时长 $\Delta T$ 的计算逻辑如下:
$$ \Delta T = T_{end} - T_{start} $$
在WinCC报表中直接进行这种数学运算较为困难。通用的做法是使用全局脚本(Global Script)在后台记录这些时间差,并将计算结果存入一个数值型变量,最后通过报表的 Row Layout(行布局)变量绑定来显示该数值。
具体实施步骤:
- 编写 全局脚本 C 脚本,捕获报警到来(
Coming)和离开(Going)的动作。 - 使用
GetTagDouble和SetTagDouble函数记录时间戳并计算差值。 - 在 报表布局中,添加一个
Static Text(静态文本)或Dynamic Field(动态域),将其连接到存储了 $\Delta T$ 结果的变量。
代码片段示例(C脚本):
// 仅作逻辑示意,非完整代码
#include "apdefap.h"
void OnErrorComing(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// 获取当前系统时间并赋值给开始时间变量
SetTagDouble("Error_Start_Time", GetCurrentTimeDouble());
}
通过以上步骤,即可实现从故障触发、归档存储到最终生成可视报表的完整闭环。

暂无评论,快来抢沙发吧!