Python自动爬设备报警日志,每天省1小时

每天早上到公司第一件事:打开SECS/GEM日志界面,手动抄报警代码到Excel,再分类统计。8台设备抄完刚好1小时。上个月实在受不了了,用Python写了个自动采集脚本,现在5分钟搞定。

一、痛点:手动抄报警有多浪费时间

我们车间的设备报警日志存在SECS日志服务器上,界面是2005年风格的网页,不支持导出。每天要做的事情:打开8台设备的日志页面→手动筛选当天报警→抄录报警代码、时间、设备ID→按类型分类统计→写进日报。整个过程约60分钟,而且经常抄错代码。我有一次把AL-2050抄成AL-2500,查了2个小时找不到这条报警在哪。

二、自动采集方案

核心思路:用requests模拟登录日志服务器,BeautifulSoup解析HTML,pandas自动分类统计,ThreadPoolExecutor并行8台设备。关键代码(55行):

import requests

from bs4 import BeautifulSoup

import pandas as pd

from datetime import datetime

from concurrent.futures import ThreadPoolExecutor

class AlarmCollector:

def init(self, server_url, username, password):

self.session = requests.Session()

self.server = server_url

resp = self.session.post(f'{self.server}/login', data={'user': username, 'pwd': password})

resp.encoding = 'shift-jis' # Japanese equipment page encoding

def fetch_alarms(self, equipment_id, date=None):

date = date or datetime.now().strftime('%Y-%m-%d')

resp = self.session.get(f'{self.server}/alarmlog', params={'eqp': equipment_id, 'date': date})

resp.encoding = 'shift-jis'

soup = BeautifulSoup(resp.text, 'html.parser')

rows = soup.select('table.alarm-table tr')1:

alarms = \[\]

for row in rows:

cols = row.find_all('td')

if len(cols) >= 4:

alarms.append({

'time': cols0.text.strip(),

'eqp_id': equipment_id,

'alarm_code': cols1.text.strip(),

'alarm_msg': cols2.text.strip(),

'severity': cols3.text.strip()

})

return pd.DataFrame(alarms)

def daily_report(self, eqp_list):

with ThreadPoolExecutor(max_workers=8) as executor:

results = list(executor.map(self.fetch_alarms, eqp_list))

df = pd.concat(results, ignore_index=True)

return df, df.groupby('alarm_code').size().sort_values(ascending=False)

collector = AlarmCollector('http://192.168.1.100', 'engineer', 'pwd123')

eqp_list = 'ETCH-01','ETCH-02','ETCH-03','CVD-01','CVD-02','CVD-03','LITHO-01','LITHO-02'

details, summary = collector.daily_report(eqp_list)

print(summary.head(10))

三、效果

图1 ETCH设备报警类型分布

RF功率异常占28%是第一大报警源。第4天和第9天出现异常高峰(22和25次),后来查到是同一批气体纯度不达标导致的。这种趋势以前靠肉眼抄数据根本看不出来。

图2 每日报警趋势(30天)

日均报警14.7次,ThreadPoolExecutor并行采集速度提升8倍(60秒→8秒)。现在每天早上5分钟搞定,剩下55分钟摸鱼。

四、踩坑记录

  1. 日本设备页面编码是shift-jis,必须设置resp.encoding,不然中文全是乱码

  2. session 30分钟过期要加自动重连,否则半夜脚本跑着跑着断了

  3. 有些报警代码是厂商自定义的,标准映射表要自己维护(我从Excel里导了300多条)

  4. 8台设备串行采集太慢,改用ThreadPoolExecutor并行,速度从60秒降到8秒

五、后续优化

  1. 加钉钉自动推送:超过20次/天自动告警到群组

  2. 接入SPC规则:连续3天同类型报警超5次触发预警

  3. 对接MES自动创建报警工单

你们车间的设备报警是手动记录还是有自动采集?评论区分享一下方案

获取报警日志自动采集脚本完整版,私信回复【报警采集】

相关推荐
用户298698530145 小时前
从入门到自动化:TXT 转 Word 的在线工具与代码实战方案
人工智能·后端·python
Dr.kangder5 小时前
嵌入式面试总结(二十一)——C语言关键字
c语言·开发语言·面试·职场和发展·架构·虚拟化
W_326005 小时前
Python-OpenCV:库、环境搭建、图片与摄像头解析
开发语言·图像处理·python·opencv·机器学习
zhy295635 小时前
在 QAIRT Genie SDK 上部署 Llama 3.2 1B 模型:从环境准备到 C++ 推理
开发语言·c++·llama
抓不住时间的沙5 小时前
N1搭建Hexo个人博客,部署到Github
python·docker·node.js·debian·github·arm
W_326005 小时前
Python-OpenCV:画布、图形、文字、调色滑动条
图像处理·python·opencv·机器学习·计算机视觉
爱跳舞的烤冷面5 小时前
自学嵌入式第N天(Linux篇——文件编程)
java·开发语言·前端
Promising_GEO6 小时前
新电脑科研环境配置指南:Miniforge + PyCharm + GitHub 从安装到可用
ide·python·pycharm·github·地理
Patrick在香港6 小时前
Claude API 成本直降90%:Prompt Caching 提示词缓存 Python 实战
python·缓存·prompt
caimouse6 小时前
ReactOS 图形系统分析(33):字体子系统 — font.c
c语言·开发语言·reactos