Python基础实践2-ABB DCS 800xA历史报警Excel整理统计(内含代码)

写在前面

我们都知道Python在数据统计分析的应用方面使用起来非常的便捷,“文本文档(.txt)”、“Excel(.xls .xlsx)”等多种文件读写模块,可以灵活的提取工控系统各种“导出文件”中的数据;将数据存入“列表”或“字典”,“去重”、“计数”、“排序”基本几行代码就可以搞定。

在上次《Python基础实践--西门子PLC诊断缓冲区Excel整理统计》的基础之上,本次的应用案例是ABB DCS 800xA 的历史报警数据统计分析。

P.S.

★ 本人编程小白一枚,在文中的方法和思路有不成熟、不规范之处,欢迎大家批评指教(求轻拍~)

★ 强烈推荐剑总的《Python入门到放弃 | 超简单 跟我学》系列文章作为入门上手帖。

 一 背景

某原油集输站,主控系统为 ABB DCS 800xA 系统,由于监控点数量庞大,并且设计院给出的报警限值相对保守,导致在DCS系统上产生的报警数量巨大,对操作员的日常监控造成了一定的困扰,大量的重复报警需要操作员频繁的去确认,并且过多的报警条目,极易忽略掉重要的报警信息。

因此,我们会定期导出一定数量的报警记录,利用Excel进行统计分析,找出频繁报警的监控点,提供给操作团队,用以调整报警限值以及优化操作流程。

ABB 800xA 系统,支持Excel的历史报警记录导出,其Information Management 软件包在安装之后,会在Excel中添加一个“DataDirect”插件,可以直接从历史数据库中提取所需的历史报警记录。

图片

通常的做法是利用Excel自带的“删除重复值”功能结合“COUNTIF”函数,统计出各监控点的重复次数,并排序,找出重复报警最多的监控点。 

图片

再根据处理好的数据制作图表展示。 

图片

类似的思路,我们使用Python来实现,从Excel文件中提取需要的特定信息,按照分析需求对条目数量进行统计、并排序,再按照一定的格式填写到新创建的Excel中,并生成图表。 

★ 本次我们导出了100,000(十万) 条报警事件记录,时间跨度18小时;

★ 使用Excel进行数据统计分析,操作下来大概需要10~20分钟;

★ 使用Python编写的小工具,大概需要20秒钟; 

二 程序思路设计

图片

三 源程序及注释:

图片

四 运行效果展示

和之前一样,运行程序,弹出文件选择对话框,选择从ABB 800xA DCS系统中导出的Excel文件,然后等待20秒钟左右,程序执行完成,显示提示信息,并自动关闭窗口。在程序所在文件夹中生成excel文件。 

图片

打开excel文件,sheet1中为“事件”重复次数统计排序,前88名截取,以及图表展示 

图片

可以看到,“每分钟发生两次”和“每分钟发生一次”的报警记录数量,分别占总数的23%和28%,两者之和近乎于总数的一半。那么如果能够将这两部分所属的“报警限值”或者“生产工艺”进行调整,便可以极大的改善日常生产中频繁报警过多的情况。 

结 语

1. 整体的实现思路和上一篇一脉相承:打开Excel文件,按需求提取信息到“内部缓存区(列表、字典)”,然后进行“去重”、“统计”、“排序”、“截取”处理,最后按照需求填写到excel文件中,并绘制图表。 

2. 在“Excel读取功能”模块选用方面,为了兼顾”.xls”和“.xlsx”两种格式的Excel 文件,我选用了“pandas”模块;当然如果不考虑这点,也可以考虑使用“xlrd”和“openpyxl”,在使用上各有优劣: 

图片

图片摘自互联网

 3. 后续的改进方向依旧是GUI方向的人机交互,比如填写数据总量,数据时间跨度,图表数据截取范围等。

作者简介

淡定齿轮:

常驻伊拉克油田现场的工控人

油气上游领域自动化过程控制从业多年

未入群的工控友人

联系美女管理员入群

图片

2023年4月

 

Tags: