软件说明
软件功能:
- PV(过程变量)监控:支持多个通道的EPICS PV实时监控,可设置触发边沿(上升沿、下降沿、双边沿)。
基于Python开发EPICS通讯语音报警系统的完整流程。内容包括Windows环境下EPICS客户端部署及环境变量配置,Python开发环境搭建与虚拟环境管理,以及利用PyQt5、pygame和pyepics库实现的核心功能代码,包括PV监控、语音队列管理和配置持久化。最后涵盖了自启动设置、功能测试、打包部署及技术架构总结,为相关工程应用提供参考。

软件功能:
环境依赖安装:
PyQt5(图形), pygame(音频), pyepics(EPICS), winshell(Windows工具可选,用于自启动)。caRepeater进程(用于Windows系统的实时PV监控:EPICS Windows Tools工具)。在 Windows 下查看 EPICS(实验物理和工业控制系统)的 PV(Process Variable)值,核心是使用 EPICS 客户端工具(命令行或图形化),确保客户端与 EPICS IOC(输入输出控制器)网络互通,配置好系统环境变量,就可以在终端 CMD 对 PV 实时监控。
C:\Program Files\EPICS Windows Tools)的路径→确定保存。EPICS_CA_ADDR_LIST10.0.23.109:5064,10.0.20.3:5064caget -h 测试是否安装成功。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
caRepeater(窗口需打开状态,关闭窗口 PV 连接出错)。解决办法:
import subprocess
process = subprocess.Popen(r"C:\Program Files\EPICS Windows Tools\caRepeater.exe")
代码中已启动(确保 caRepeater 可用)。
epics_alarm_system/
├── venv/ # 虚拟环境(命令生成)
├── main.py # 主程序
├── config/ # 配置目录(自动生成)
│ └── voice_alarm_config.json
├── voices/ # 语音文件目录
│ ├── alarm1.wav
│ └── alarm2.mp3
└── requirements.txt # 依赖列表(自动生成)
CMD>cd /d D:\epics_alarm_system_20251114IDE>cd D:\epics_alarm_system_20251114python -m venv venvCMD>venv\Scripts\activate.batIDE>venv\Scripts\activatepip install PyQt5 pygame pyepics winshellpip install -r requirements.txt 一键进行环境搭建。pip list。Python main.py。pip freeze > requirements.txt。信号 - 槽 机制进行模块间通信。# 步骤 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;")
# 步骤 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)
# 步骤 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}"')
使用 PyInstaller 等工具将 Python 脚本打包成可执行文件,方便在没有 Python 环境的 Windows 机器上运行。
pip install pyinstallerpyinstaller --onefile --windowed --name "EPICS 语音报警系统" XXXX.py(不包含数据文件)包含数据文件:
pyinstaller --add-data "voices;voices" --add-data "config;config" XXXX.py(需先创建好文件夹)应用架构层:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online