Python工控实践--西门子PLC诊断缓冲区Excel整理统计(附源代码+工具软件下载)

剑控友人们,星标吧!

亲爱的剑控友人们,微信公众号又改版了,如果没有「星标」,公号文章就会渐渐沉底,我们可能长久失联。为了我们不再走散,请给我们一个星标,让我们每天都能相见图片

方法如下:

图片

一 写在前面

2021年上半年,剑总写了“Python入门到放弃 | 超简单 跟我学”系列上手帖…每一期都有认真拜读领会,学完大致掌握了相关概念和一些基本操作;后来又在漫长的集中隔离期间自己上视频网站找了点网课,补充了一些实用小练习;再之后,实际工作中遇到几个“大量重复操作”的数据处理问题,磕磕绊绊的一边在网上搜索方法思路,一边慢慢实现了功能需求。

两年下来,终于积累了一定的方法和经验,可以在面对实际问题时,分析出功能需求及实现思路,并快速转化为代码,成为日常辅助小工具…

这次也是在临休假之前,遇到的实际应用需求(后面详述)…从设计、开发、测试到发布应用,3天搞定,算是之前所有“积累”的一次综合应用。

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

二 背 景

新建泵站,采购了20台注水泵,每台设备都有独立的控制柜(S7-400系统)。在试运行阶段,发生了CPU自行从“RUN”转至“STOP”的情况;电脑连接PLC,进行在线诊断,查询诊断缓冲区的记录,发现PLC的配置、编程存在一定的不完善情况,导致CPU运行不稳定。

为了查清原因,我们将PLC的“诊断缓冲区”中的所有条目“另存为”到电脑上,用以进一步查阅分析。但是我们发现,另存为出来的文件为文本文件(txt),非常不利于统计分析。 

图片

 然后我想到可以用Python制作做一个小工具,从txt文件中提取需要的特定信息,按照分析需求对条目数量进行统计、并排序,再按照一定的格式填写到Excel中,并生成图表。

从而轻松找到重复次数最多的故障诊断记录,以便进一步和厂家沟通完善配置、程序。

三  程序思路设计

图片

四 源程序及注释

图片

五 运行效果展示

运行程序,弹出文件选择对话框,选择txt文件 

图片

程序执行完成,显示提示信息,并自动关闭窗口 

图片

在程序所在文件夹中生成excel文件 

图片

 打开excel文件,sheet1中为整理好的事件信息 

图片

sheet2中为“事件”重复次数统计排序,前25名截取,以及图表展示 

图片

六  结 语

整体的实现思路还是比较简单直观的:打开txt文件,条件检索提取信息到“内部缓存区(列表、字典)”,然后进行“去重”、“统计”、“排序”、“截取”处理,最后按照需求填写到excel文件中,并绘制图表。

具体的实现方法,使用的模块及函数是可以灵活调整的。比如:

● “xlwt”和“xlsxwriter”的选用; 

●“.read()”、“.readline()”、“.readlines()”的选用;

●  使用“for循环”还是使用“while”循环等

●  ……

使用不同的模块和函数在实现方法上会有一定的区别,完全取决于个人对这些模块、函数的熟悉理解程度。

后续的改进方向可以使用GUI做出可视化人机界面,使得用户可以进一步根据自身需求,在界面上灵活选择调整相关参数,以实现更精细的筛选、统计、分析功能。

本例作为Python入门练习,也算是在工控领域的一个小小的应用,希望能够起到一点点抛砖引玉的作用。在本例基础上略作调整,便可以应用到其他系统的历史报警的统计分析工作。

对于S7-1200、S7-1500PLC,西门子自己也有一个关于“诊断缓冲区”的excel处理工具,连接如下:

https://support.industry.siemens.com/cs/document/109763364/%E4%BD%BF%E7%...

源代码+工具软件 下载

本文涉及源代码和做出来的成品工具软件的链接如下:

https://share.weiyun.com/JZ5ZaBuN

加入剑指工控技术群,联系各群群管理员获得提取码。

未入群的工控友人

联系美女管理员入群

图片

2023年3月

 

Tags: