EPICS 在 Ubuntu 上的安装与基础环境配置指南

张开发
2026/4/17 4:48:25 15 分钟阅读

分享文章

EPICS 在 Ubuntu 上的安装与基础环境配置指南
1. EPICS简介与环境准备第一次接触EPICS的朋友可能会好奇这到底是什么。简单来说EPICS就像工业控制领域的乐高积木它提供了一套完整的工具链让开发者能快速搭建分布式控制系统。我在参与某实验室环境监控项目时发现用传统方式开发设备通信模块需要大量重复工作而EPICS的通道访问协议Channel Access让不同设备间的数据交换变得像搭积木一样简单。在Ubuntu上部署EPICS前需要确认系统环境。我推荐使用Ubuntu 20.04 LTS或22.04 LTS版本这两个长期支持版经过大量项目验证更稳定。打开终端先执行以下命令更新系统sudo apt update sudo apt upgrade -y接下来安装编译工具链这里有个容易踩的坑不同Ubuntu版本默认的g版本可能不同。实测在Ubuntu 22.04需要额外指定g-11sudo apt install -y git make g g-11 libreadline-dev建议创建专门的EPICS工作目录避免与系统其他文件混在一起。我习惯在用户目录下建立EPICS文件夹这样权限管理更简单mkdir -p $HOME/EPICS注意如果后续需要多用户共享EPICS环境建议安装在/opt目录下但需要额外配置权限2. EPICS Base编译与安装获取EPICS源码推荐使用git克隆官方仓库记得加上--recursive参数同步子模块。去年有个项目因为漏掉这个参数导致编译失败排查了半天才发现问题cd $HOME/EPICS git clone --recursive https://github.com/epics-base/epics-base.git cd epics-base编译前需要确认主机架构EPICS支持交叉编译但新手建议先用默认配置。有个实用技巧是在make前先查看支持的架构列表make show-archs在x86_64架构的Ubuntu上通常会显示linux-x86_64。开始编译时建议加上-j参数利用多核加速我的16核工作站编译时间能从15分钟缩短到3分钟make -j$(nproc)编译完成后别急着关闭终端先运行快速测试验证基础功能是否正常cd $HOME/EPICS/epics-base/bin/linux-x86_64 ./softIoc看到epics提示符说明内核组件安装成功。按CtrlC退出后建议立即备份这个可用的基础环境我在多个项目间切换时经常需要回退到干净的基础版本。3. 环境变量配置技巧EPICS依赖几个关键环境变量配置不当会导致各种command not found错误。推荐将配置写入.bashrc而不是.profile因为非登录式终端可能不加载后者echo export EPICS_BASE$HOME/EPICS/epics-base ~/.bashrc echo export EPICS_HOST_ARCH$(uname -m)-linux ~/.bashrc echo export PATH$EPICS_BASE/bin/$EPICS_HOST_ARCH:$PATH ~/.bashrc source ~/.bashrc这里有个隐藏知识点EPICS_HOST_ARCH的取值逻辑。老版本需要用EpicsHostArch脚本检测而Base 7版本支持直接使用uname -m输出。如果遇到数据库加载失败可以尝试export LD_LIBRARY_PATH$EPICS_BASE/lib/$EPICS_HOST_ARCH:$LD_LIBRARY_PATH提示在团队开发环境中建议将公共配置写入/etc/profile.d/epics.sh确保所有用户环境一致验证环境变量是否生效有个简单方法which caget如果返回路径正确说明基础工具链已就位。我习惯用epicsEnvShow命令检查运行时环境这在排查多版本冲突时特别有用。4. 创建测试IOC实例IOCInput/Output Controller是EPICS的核心运行时环境。新建测试目录时建议采用标准命名规范比如项目名IOC版本mkdir -p $HOME/EPICS/testIOC cd $HOME/EPICS/testIOC使用EPICS自带的模板生成工具创建基础框架。注意-t example指定的是模板类型实际项目中可以用-t ioc生成更完整的结构makeBaseApp.pl -t example testIoc makeBaseApp.pl -i -t example testIoc这里有个实际项目中的经验如果make过程报错缺少依赖通常是环境变量没生效。可以尝试make clean make编译完成后进入启动目录给脚本添加执行权限。我遇到过权限不足导致数据库加载失败的坑所以建议明确设置cd iocBoot/ioctestIoc chmod 755 st.cmd启动IOC时会看到大量初始化信息重点关注是否有ERROR日志。成功启动后会显示可用的PVProcess Variable列表./st.cmd dbl5. 数据库与通道访问实战EPICS的强大之处在于灵活的数据库定义。创建一个简单的温度监测点只需要几行定义cat $HOME/EPICS/test.db EOF record(ai, lab:temperature) { field(DESC, Environment temperature) field(EGU, °C) field(HOPR, 50) field(LOPR, -10) } EOF启动IOC时加载这个数据库文件softIoc -d test.db在另一个终端测试数据读写这里演示了EPICS的监控机制。当值变化超过死区MDEL时会自动通知客户端caget lab:temperature caput lab:temperature 25.3 camonitor lab:temperature实际项目中我推荐使用camonitor -g 3限制更新频率避免网络拥堵。对于需要高精度监控的场景可以在记录定义中添加field(MDEL, 0.1) # 变化超过0.1才触发更新 field(PREC, 2) # 显示2位小数6. 扩展功能集成EPICS真正的威力在于丰富的扩展模块。以asyn驱动为例安装步骤如下cd $HOME/EPICS mkdir -p support/asyn git clone https://github.com/epics-modules/asyn.git support/asyn编辑RELEASE文件时要注意路径格式。我在Windows子系统里遇到过路径斜杠方向导致的编译失败echo EPICS_BASE$HOME/EPICS/epics-base support/asyn/configure/RELEASEStreamDevice是另一个常用扩展安装时需要先创建容器目录mkdir -p support/stream git clone https://github.com/paulscherrerinstitute/StreamDevice.git support/stream集成扩展模块到IOC时需要修改Makefile添加依赖。建议保留修改记录方便回滚perl -i.bak -pe s/(sampleIOC_LIBS.*)/$1 stream asyn/ $HOME/EPICS/testIoc/configure/Makefile最后重新编译时使用make distclean彻底清除旧编译结果避免奇怪的链接错误make distclean make7. 网络配置与远程访问EPICS默认使用UDP广播发现IOC在复杂网络环境中需要特殊配置。如果客户端找不到IOC可以尝试export EPICS_CA_ADDR_LIST192.168.1.255 export EPICS_CA_AUTO_ADDR_LISTNO安全起见生产环境应该指定具体端口并配置防火墙规则。我常用的端口范围是5064-5068sudo ufw allow 5064:5068/tcp sudo ufw allow 5064:5068/udp跨子网访问时需要设置中继。EPICS提供了caRepeater工具启动方法caRepeater 调试网络问题时cainfo命令非常有用。它可以显示通道连接状态和服务器信息cainfo lab:temperature对于需要更高安全性的场景可以考虑使用EPICS V4的PVAccess协议。它支持TLS加密和更完善的认证机制。

更多文章