写在前面
我们都知道Python在数据统计分析的应用方面使用起来非常的便捷,“文本文档(.txt)”、“Excel(.)”等多种文件读写模块,可以灵活的提取工控系统各种“导出文件”中的数据;将数据存入“列表”或“字典”,“去重”、“计数”、“排序”基本几行代码就可以搞定。在上次《Python基础实践--西门子PLC诊断缓冲区Excel整理统计》的基础之上,本次的应用案例是ABBDCS800xA的历史报警数据统计分析。
★本人编程小白一枚,在文中的方法和思路有不成熟、不规范之处,欢迎大家批评指教(求轻拍~)★强烈推荐剑总的《Python入门到放弃|超简单跟我学》系列文章作为入门上手帖。
一背景
某原油集输站,主控系统为ABBDCS800xA系统,由于监控点数量庞大,并且设计院给出的报警限值相对保守,导致在DCS系统上产生的报警数量巨大,对操作员的日常监控造成了一定的困扰,大量的重复报警需要操作员频繁的去确认,并且过多的报警条目,极易忽略掉重要的报警信息。因此,我们会定期导出一定数量的报警记录,利用Excel进行统计分析,找出频繁报警的监控点,提供给操作团队,用以调整报警限值以及优化操作流程。ABB800xA系统,支持Excel的历史报警记录导出,其InformationManagement软件包在安装之后,会在Excel中添加一个“DataDirect”插件,可以直接从历史数据库中提取所需的历史报警记录。

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

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

类似的思路,我们使用Python来实现,从Excel文件中提取需要的特定信息,按照分析需求对条目数量进行统计、并排序,再按照一定的格式填写到新创建的Excel中,并生成图表。
★本次我们导出了100,000(十万)条报警事件记录,时间跨度18小时;★使用Excel进行数据统计分析,操作下来大概需要10~20分钟;★使用Python编写的小工具,大概需要20秒钟;
二程序思路设计

三源程序及注释:

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

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

可以看到,“每分钟发生两次”和“每分钟发生一次”的报警记录数量,分别占总数的23%和28%,两者之和近乎于总数的一半。那么如果能够将这两部分所属的“报警限值”或者“生产工艺”进行调整,便可以极大的改善日常生产中频繁报警过多的情况。
结语
1.整体的实现思路和上一篇一脉相承:打开Excel文件,按需求提取信息到“内部缓存区(列表、字典)”,然后进行“去重”、“统计”、“排序”、“截取”处理,最后按照需求填写到excel文件中,并绘制图表。
2.在“Excel读取功能”模块选用方面,为了兼顾”.xls”和“.xlsx”两种格式的Excel文件,我选用了“pandas”模块;当然如果不考虑这点,也可以考虑使用“xlrd”和“openpyxl”,在使用上各有优劣:

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