跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Python

基于Python的EPICS通讯语音报警系统开发

综述由AI生成基于Python开发EPICS通讯语音报警系统的完整流程。内容包括Windows环境下EPICS客户端部署及环境变量配置,Python开发环境搭建与虚拟环境管理,以及利用PyQt5、pygame和pyepics库实现的核心功能代码,包括PV监控、语音队列管理和配置持久化。最后涵盖了自启动设置、功能测试、打包部署及技术架构总结,为相关工程应用提供参考。

暗影行者发布于 2026/3/23更新于 2026/5/727K 浏览
基于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 基础环境安装

  • 下载并安装 EPICS Windows Tools 客户端工具。
  • 设置环境变量:
    • 环境变量(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。
  • 推荐使用 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
  • 安装项目所需要的库。
    • pip install PyQt5 pygame pyepics winshell
    • 或者如果有 requirements.txt 文件 pip install -r requirements.txt 一键进行环境搭建。
  • 检查所有安装的库:pip list。
  • 运行项目:Python main.py。
  • 导出库列表:pip freeze > requirements.txt。

三、Python 代码编写

1. 代码结构设计

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

2. 核心功能实现

  • EPICSMonitor 类:负责 PV 连接、监控、值更新和连接状态管理。
  • VoicePlayer 类:负责语音文件的播放和队列管理。
  • VoiceAlarmSystem 类:主界面,集成 PV 配置、语音配置、日志显示和用户交互。
# 步骤 1:EPICS 连接建立
def connect_pv(self, index, pv_name):
    if EPICS_AVAILABLE:
        pv = epics.PV(pv_name, auto_monitor=True)

# 步骤 2:PV 状态监控回调
def _create_callback(self, index):
    def callback(pvname=None, value=None, **kw):
        self.pv_changed.emit(index, value, self.pv_values[index])

# 步骤 3:连接状态管理
def _create_connection_callback(self, index):
    def connection_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:播放队列管理
def play_next_alarm(self):
    if not self.voice_player.is_playing and self.alarm_queue:
        alarm_info = self.alarm_queue.pop(0)
        self.voice_player.play_voice(...)

# 步骤 3:播放完成处理
def on_play_finished(self):
    self.is_playing = False
    self.play_next_alarm()  # 播放下一个
# 步骤 1:UI 组件创建
def init_ui(self):
    # PV 配置表格(7 通道)
    self.pv_name_edits = []      # PV 名称输入
    self.voice_path_edits = []   # 语音文件路径
    self.trigger_edge_combos = []# 触发边沿选择
    self.status_labels = []      # 连接状态显示
    self.value_labels = []       # 当前值显示

# 步骤 2:实时数据更新
def on_pv_value_updated(self, index, value):
    self.value_labels[index].setText(str(value))
    # 根据值状态设置颜色
    if value:
        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 _ in range(7)
]

# 步骤 2:JSON 配置保存
def save_config(self):
    with open(self.config_file, 'w', encoding='utf-8') as f:
        json.dump(config_data, f, indent=4, ensure_ascii=False)

# 步骤 3:配置自动加载
def load_config(self):
    if os.path.exists(self.config_file):
        with open(self.config_file, 'r', encoding='utf-8') as f:
            return json.load(f)

4. 自启动实现

  • 使用 winshell 创建快捷方式到启动文件夹,实现开机自启动。
  • 提供备用方案:创建批处理文件实现自启动。
# 步骤 1:自启动设置
def set_auto_start(self, enable):
    if enable:
        # 创建启动文件夹快捷方式
        shortcut_path = os.path.join(startup_folder, "app_name.lnk")
        with winshell.shortcut(shortcut_path) as link:
            link.path = app_path
            link.working_directory = os.path.dirname(app_path)
    else:
        # 删除快捷方式
        os.remove(shortcut_path)

# 步骤 2:备用方案(批处理文件)
def create_bat_file(self, app_path, startup_folder, app_name):
    bat_path = os.path.join(startup_folder, f"{app_name}.bat")
    with open(bat_path, 'w') as f:
        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 连接。
  • 错误恢复:实现网络中断后的自动重连机制。

目录

  1. 软件说明
  2. 一、Windows EPICS 环境部署
  3. 1. EPICS 基础环境安装
  4. 2. PV 连接测试
  5. 测试命令
  6. PV 控制测试
  7. 3. caget 报错(caRepeater)
  8. 二、Python 开发环境搭建
  9. 1. 安装解释器
  10. 2. 目录设计
  11. 3. 项目环境
  12. 三、Python 代码编写
  13. 1. 代码结构设计
  14. 2. 核心功能实现
  15. 步骤 1:EPICS 连接建立
  16. 步骤 2:PV 状态监控回调
  17. 步骤 3:连接状态管理
  18. 步骤 1:音频播放器初始化
  19. 步骤 2:播放队列管理
  20. 步骤 3:播放完成处理
  21. 步骤 1:UI 组件创建
  22. 步骤 2:实时数据更新
  23. 3. 配置管理实现
  24. 步骤 1:配置数据结构设计
  25. 步骤 2:JSON 配置保存
  26. 步骤 3:配置自动加载
  27. 4. 自启动实现
  28. 步骤 1:自启动设置
  29. 步骤 2:备用方案(批处理文件)
  30. 四、功能测试发布
  31. 1. 测试与调试
  32. 2. 打包与部署
  33. 五、开发流程总结
  34. 1. 技术架构
  35. 2. 注意事项
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 代码风格指南:如何写出更 Pythonic 的代码
  • 沈向洋:通用人工智能时代,关于大模型的 10 个思考
  • JavaScript 中 var、let、const 的核心区别与实战应用
  • 本地部署 Apache Answer 问答平台并实现公网访问
  • 使用 Chain-of-Thought 让大模型思考过程可见
  • 基于 OneDNS 的高校办公网安全防护方案
  • 【魅影AI远程控制】:基于WebRTC+AI的智能远程控制解决方案
  • 动态规划实战:斐波那契变体与经典题目解析
  • Win10 WSL2 环境下 VS Code Copilot 连接失败排查与修复
  • MySQL 表约束详解:主键、外键与默认值设置
  • 第十五届蓝桥杯 Python B 组省赛真题解析
  • 全新 Llama 3.2 系列评测:性能提升明显,但真的是最优选择吗?
  • Linux 普通用户安装 Claude Code 全流程指南
  • Python 爬虫代理 IP 配置与实战技巧
  • Win10/11 系统下 WSL2 + Ubuntu 20.04 全流程安装指南(支持 D 盘部署)
  • OpenClaw 配置 Bot 接入飞书机器人与 Kimi 2.5
  • 研究生论文 AI 查重率降低工具实测与经验总结
  • OpenCode 接入 Kimi K2.5 配置与实战指南
  • 通过逆向 WebChat 协议实现 OpenClaw 零后端接入方案
  • Stable Diffusion WebUI 基于云主机 RTX 5090 的部署指南

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online