基于Python的EPICS通讯语音报警软件开发

基于Python的EPICS通讯语音报警软件开发

目录


软件说明

软件功能:

  1. PV(过程变量)监控:支持多个通道的EPICS PV实时监控,可设置触发边沿(上升沿、下降沿、双边沿)。
  2. 音频通道:每个PV通道可配置独立的语音文件,支持多种音频格式(wav, mp3)。
  3. 实时监控:实时显示PV连接状态和当前值,并可手动刷新。
  4. 报警队列:采用先进先出的队列管理报警语音播放,避免并发播放冲突。
  5. 配置保存:将PV配置、语音文件路径、播放时长、触发边沿等设置保存到JSON文件。
  6. 自启动:可设置开机自启动,通过创建快捷方式或批处理文件实现。

环境依赖安装:

  1. Python第三方库PyQt5(图形), pygame(音频), pyepics(EPICS), winshell(Windows工具可选,用于自启动)。
  2. EPICS环境caRepeater进程(用于Windows系统的的实时PV监控:EPICS Windows Tools工具)。

开发流程步骤:

一、Windows EPICS 环境部署

在 Windows 下查看 EPICS(实验物理和工业控制系统)的 PV(Process Variable)值,核心是使用 EPICS 客户端工具(命令行或图形化),确保客户端与 EPICS IOC(输入输出控制器)网络互通,配置好系统环境变量,就可以在终端CMD对PV实时监控

1. EPICS 基础环境安装

  • 下载并安装 EPICSWindowsTools1.44-x64 客户端工具
  • 设置环境变量:
    • 环境变量(PATH)添加路径:
      • 右键点击 “此电脑”→属性→高级系统设置→环境变量→在系统变量中找到 PATH,点击编辑→添加安装目录(C:\Program Files\EPICS Windows Tools)的路径→确定保存。
    • 新建系统变量(PV 服务地址列表)
      • 变量名:EPICS_CA_ADDR_LIST
      • 变量值:10.0.23.109:5064,10.0.20.3:5064
      • 注意:多个 IOC 用逗号分隔,端口默认5064
      • 简化版:只写IP地址(不写端口)也可工作
  • 完成后,在命令提示符中输入caget -h测试是否安装成功。
请添加图片描述


在这里插入图片描述

2. PV 连接测试

  • 如果有的PV连不上,检查环境变量EPICS_CA_ADDR_LIST是否设置正确的IOC地址;
  • 检查网络是否通畅。
# 测试命令 caget CS:SMS:Mode caget LTTR:MA:PLA:manualok caget CS:LS:20Ready01:On caget TR:TAR:ManInPosW # PV 控制测试 caput LTTR:MA:PLA:manualok 0 caput LTTR:MA:PLA:manualok 1
请添加图片描述

3. caget 报错(caRepeater)

    • 启动PV实时监控服务caRepeater(窗口需打开状态,关闭窗口PV连接出错)
    • 添加服务“caRepeater.exe”自启动代码(软件打开时启动服务窗口)

解决办法

import subprocess process = subprocess.Popen(r"C:\Program Files\EPICS Windows Tools\caRepeater.exe")

代码中已启动(确保caRepeater可用)

请添加图片描述
请添加图片描述

二、Python 开发环境搭建

1. 安装解释器

  • 安装 python-3.13.9-amd64.exe
  • 使用Trae + Python 扩展 // VSCode + Python 扩展 // PyCharm

2. 目录设计

epics_alarm_system/ ├── venv/ # 虚拟环境(命令生成) ├── main.py # 主程序 ├── config/ # 配置目录(自动生成) │ └── voice_alarm_config.json ├── voices/ # 语音文件目录 │ ├── alarm1.wav │ └── alarm2.mp3 └── requirements.txt # 依赖列表(自动生成) 

3. 项目环境

  • 在项目目录下建立虚拟环境
    • 步骤1:导航目录
      • CMD>cd /d D:\epics_alarm_system_20251114
      • IDE>cd D:\epics_alarm_system_20251114
    • 步骤2:创建环境
      • python -m venv venv
    • 步骤3:激活环境
      • CMD>venv\Scripts\activate.bat
      • IDE>venv\Scripts\activate
  • 自动生成-venv
在这里插入图片描述
  • (venv) CMD安装项目所需要的库
    • pip install PyQt5 pygame pyepics winshell
    • 或者如果有 requirements.txt 文件 pip install -r requirements.txt 一键进行环境搭建
  • 在 VSCode 中:Ctrl+Shift+PPython: Install Package
(venv) D:\epics_alarm_system_20251114>pip install PyQt5 pygame pyepics winshell Collecting PyQt5 Using cached PyQt5-5.15.11-cp38-abi3-win_amd64.whl.metadata (2.1 kB) Collecting pygame Using cached pygame-2.6.1-cp313-cp313-win_amd64.whl.metadata (13 kB) Collecting pyepics Downloading pyepics-3.5.8-py3-none-any.whl.metadata (6.2 kB) Collecting winshell Downloading winshell-0.6.zip (10 kB)
  • 检查所有安装的库
    • pip list
在这里插入图片描述
  • 打开 main.py 文件开始写代码
  • 运行项目
    • Python main.py
在这里插入图片描述
  • 导出库列表
 pip freeze > requirements.txt 

三、Python代码编写

1. 代码结构设计

  • 采用MVC模式,将界面(PyQt5)、业务逻辑(EPICSMonitor, VoicePlayer)和数据模型(pv_configs)分离。
  • 使用信号-槽机制进行模块间通信。

2. 核心功能实现

  • EPICSMonitor类:负责PV连接、监控、值更新和连接状态管理。
  • VoicePlayer类:负责语音文件的播放和队列管理。
  • VoiceAlarmSystem类:主界面,集成PV配置、语音配置、日志显示和用户交互。
# 步骤1:EPICS连接建立defconnect_pv(self, index, pv_name):if EPICS_AVAILABLE: pv = epics.PV(pv_name, auto_monitor=True)# 步骤2:PV状态监控回调def_create_callback(self, index):defcallback(pvname=None,value=None,**kw):# 处理PV值变化 self.pv_changed.emit(index,value, self.pv_values[index])# 步骤3:连接状态管理def_create_connection_callback(self, index):defconnection_callback(pvname=None, conn=None,**kw): self.pv_connection_changed.emit(index, conn,"状态信息")
# 步骤1:音频播放器初始化def__init__(self): pygame.mixer.init() self.is_playing = False # 步骤2:播放队列管理defplay_next_alarm(self):ifnot self.voice_player.is_playing and self.alarm_queue: alarm_info = self.alarm_queue.pop(0) self.voice_player.play_voice(...)# 步骤3:播放完成处理defon_play_finished(self): self.is_playing =False self.play_next_alarm() # 播放下一个 
# 步骤1:UI组件创建definit_ui(self):# PV配置表格(7通道) self.pv_name_edits =[] # PV名称输入 self.voice_path_edits =[] # 语音文件路径 self.trigger_edge_combos =[] # 触发边沿选择 self.status_labels =[] # 连接状态显示 self.value_labels =[] # 当前值显示 # 步骤2:实时数据更新defon_pv_value_updated(self, index,value): self.value_labels[index].setText(str(value))# 根据值状态设置颜色ifvalue: self.value_labels[index].setStyleSheet("color: red;")

3. 配置管理实现

  • 使用JSON文件保存配置,包括每个通道的PV名称、语音文件路径、播放时长、触发边沿和自动连接设置。
  • 使用QSettings保存应用程序设置(如窗口大小、位置等)。
# 步骤1:配置数据结构设计 pv_configs =[{"name":"PV1", # PV名称 "voice_path":"alarm.wav", # 语音文件 "duration":5, # 播放时长 "auto_connect": True, # 自动连接 "trigger_edge":"上升沿"# 触发条件}for _ inrange(7)]# 步骤2:JSON配置保存defsave_config(self):withopen(self.config_file,'w', encoding='utf-8')asf: json.dump(config_data, f, indent=4, ensure_ascii=False)# 步骤3:配置自动加载defload_config(self):if os.path.exists(self.config_file):withopen(self.config_file,'r', encoding='utf-8')asf:return json.load(f)

4. 自启动实现

  • 使用winshell创建快捷方式到启动文件夹,实现开机自启动。
  • 提供备用方案:创建批处理文件实现自启动。
# 步骤1:自启动设置defset_auto_start(self, enable):if enable:# 创建启动文件夹快捷方式 shortcut_path = os.path.join(startup_folder,"app_name.lnk")with winshell.shortcut(shortcut_path)aslink: link.path = app_path link.working_directory = os.path.dirname(app_path)else:# 删除快捷方式 os.remove(shortcut_path)# 步骤2:备用方案(批处理文件)defcreate_bat_file(self, app_path, startup_folder, app_name): bat_path = os.path.join(startup_folder, f"{app_name}.bat")withopen(bat_path,'w')asf: f.write(f'"{app_path}"')

四、功能测试发布

1. 测试与调试

  • 模拟测试PV监控和语音播放(代码逻辑)
  • PV连接测试(真实EPICS环境)
  • 语音播放测试(各音频格式)
  • 触发逻辑测试(上升沿/下降沿/双边沿)
  • 配置持久化测试
  • 自启动功能测试
  • 多通道并发测试

2. 打包与部署

使用PyInstaller等工具将Python脚本打包成可执行文件,方便在没有Python环境的Windows机器上运行。

  • pip install pyinstaller
  • pyinstaller --onefile --windowed --name "EPICS语音报警系统" XXXX.py(不包含数据文件)

包含数据文件

  • pyinstaller --add-data "voices;voices" --add-data "config;config" XXXX.py(需先创建好文件夹)
在这里插入图片描述

五、开发流程总结

1. 技术架构

应用架构层:
├── 表示层 (PyQt5 UI)
│ ├── 配置界面
│ ├── 实时监控面板
│ └── 系统日志
├── 业务逻辑层
│ ├── EPICS监控引擎
│ ├── 语音播放队列
│ └── 报警触发逻辑
├── 数据访问层
│ ├── EPICS PV访问
│ ├── 配置文件管理
│ └── 系统注册表
└── 系统集成层
├── 音频子系统 (pygame)
├── 自启动服务 (winshell)
└── 进程管理 (subprocess)

2. 注意事项

  • EPICS环境依赖:生产环境必须安装EPICS依赖
  • 音频兼容性:测试不同格式音频文件的播放兼容性
  • 资源清理:确保程序退出时断开所有PV连接
  • 错误恢复:实现网络中断后的自动重连机制

在这里插入图片描述

源码链接

End

Read more

Vibe Coding - UI UX Pro Max 驱动的现代前端 UI工作流

Vibe Coding - UI UX Pro Max 驱动的现代前端 UI工作流

文章目录 * 一、为什么需要一个“会设计的 AI 技能”? * 二、UI UX Pro Max 到底是什么? * 三、安装与集成:从 0 到 1 搭好环境 * 3.1 安装 uipro-cli * 3.2 在项目中初始化 UI UX Pro Max * 3.3 锁定与更新版本(团队协作建议) * 四、工作原理:一句话需求是怎么变成完整 UI 的? * 4.1 设计决策流程拆解 * 4.2 不同助手中的调用方式 * 五、实战一:用 React + Tailwind

By Ne0inhk

前端高频面试题:TypeScript 篇(2026 最新版)

前端高频面试题:TypeScript 篇(2026 最新版) TypeScript(TS)已成为现代前端开发的标配,尤其在 React、Vue、Angular 等框架中,几乎是大厂必考点。2026 年面试趋势:更注重类型安全、高级类型工具、实际项目应用和tsconfig 配置。以下精选 20+ 高频题(基于最新大厂真题汇总),分为基础、中级、高级,并附详细解答和代码示例。建议结合项目实战记忆! 基础篇(必背,考察理解 TS 核心价值) 1. 什么是 TypeScript?它与 JavaScript 的区别是什么? TypeScript 是 JavaScript 的超集(superset),由 Microsoft 开发,最终编译成纯 JS

By Ne0inhk
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目

音乐播放器实现:前端HTML,CSS,JavaScript综合大项目

音乐播放器实现:前端HTML,CSS,JavaScript综合大项目 * 项目概述 * 项目视图效果 * 一、侧边栏相关代码 * (一)HTML代码 * (二)css代码 * 二、登录页面 * (一)HTML代码 * (二)css代码 * (三)js代码 * 三、剩余代码以及所有源代码Gitee地址 项目概述 在当今数字化时代,音乐已然成为人们生活中不可或缺的一部分。本次带来的音乐播放器 HTML 项目,旨在打造一个具备基础且实用功能的音乐播放平台。通过 HTML、CSS 和 JavaScript 等前端技术的巧妙融合,实现一个界面美观、操作便捷的音乐播放器,满足用户在本地浏览音乐库、播放音乐等多样化需求。 提示!!!! 由于项目代码太多,代码全部内容放置在我的Gitee码云中,需要的小伙伴们自取 我的码云链接https://gitee.com/srte-7719/project-experience/tree/master/

By Ne0inhk
自动化打造信息影响力:用 Web Unlocker 和 n8n 打造你的自动化资讯系统

自动化打造信息影响力:用 Web Unlocker 和 n8n 打造你的自动化资讯系统

一、研究背景 在信息爆炸的时代,及时获取高质量行业资讯成为内容创作者、运营者以及研究者的刚需。无论是IT、AI领域的技术动态,还是招聘、人才市场的趋势新闻,第一时间掌握热点、总结观点并进行内容输出,正逐渐成为提升影响力与构建个人/组织品牌的关键手段。 为实现“日更内容”目标,很多人开始探索自动化的路径——使用爬虫工具定期抓取目标网站内容,借助 AI 模型自动生成摘要,再将结果推送至社群平台。这一流程的核心,是稳定、高效地获取网页数据,在实际操作中,却出现了很多问题: * 首先是出现了验证码,阻断自动化流程; * 紧接着是请求返回403 Forbidden,提示IP被封; * 最终是目标网站直接对我们常用IP段进行了临时封禁,哪怕切换机器或重启网络都无济于事。 按照检查方法,当处于非爬虫操作时,我们在F12控制台输入window.navigator.webdriver时,显示的是false,输入进去出现了刺眼的红色报错,而且显示也出现了True, “Failed to load resource: the server responded with

By Ne0inhk