当前位置:首页 > 工业控制 > 工业控制
[导读]在大型科研装置(同步辐射光源、粒子加速器、核聚变装置)中,EPICS(Experimental Physics and Industrial Control System) 是构建分布式控制系统的行业标准。它将现场设备封装为 IOC(Input/Output Controller),通过 Channel Access(CA)或 pvAccess 协议供操作员界面(OPI)、存档与扫描服务器访问。本文以 Debian/Ubuntu + EPICS Base 7.x + asyn + StreamDevice 为例,走完最小可运行 IOC 的搭建与配置流程。



在大型科研装置(同步辐射光源、粒子加速器、核聚变装置)中,EPICS(Experimental Physics and Industrial Control System) 是构建分布式控制系统的行业标准。它将现场设备封装为 IOC(Input/Output Controller),通过 Channel Access(CA)或 pvAccess 协议供操作员界面(OPI)、存档与扫描服务器访问。本文以 Debian/Ubuntu + EPICS Base 7.x + asyn + StreamDevice 为例,走完最小可运行 IOC 的搭建与配置流程。


一、环境准备:编译 EPICS Base


# 安装依赖

sudo apt update

sudo apt install build-essential libreadline-dev gfortran git -y


# 下载并编译 EPICS Base

cd ~

git clone --depth=1 https://github.com/epics-base/epics-base.git

cd epics-base

make -j$(nproc)


# 设置环境变量(建议加入 ~/.bashrc)

export EPICS_BASE=$HOME/epics-base

export PATH=$EPICS_BASE/bin/linux-x86_64:$PATH

export LD_LIBRARY_PATH=$EPICS_BASE/lib/linux-x86_64:$LD_LIBRARY_PATH



验证:

makeBaseApp.pl --help   # 能输出版本信息即成功



二、创建第一个 IOC(软IOC)


cd ~

makeBaseApp.pl -t ioc myioc

cd myioc

makeBaseApp.pl -i -t example myioc  # 生成exampleApp(含db、src模板)

make



启动 IOC:

./bin/linux-x86_64/myioc st.cmd

# 进入 epics> 提示符

epics> dbpr "$(IOCNAME)"

epics> exit



三、添加记录(Record)与数据库(.db)


EPICS 用 Record(记录) 抽象每个过程变量(PV),如 ai(模拟输入)、ao(模拟输出)、bi(二进制输入)等。


示例:temperature.db


record(ai, "MYIOC:TEMP:PV")

{

   field(DESC, "Chamber Temperature")

   field(INP,  "@sim(25.0)")      # 仿真值,真实设备用 asyn/StreamDevice

   field(EGU,  "degC")

   field(PREC, "2")

   field(SCAN, "1 second")        # 每秒更新

}



在 st.cmd 中加载:

dbLoadDatabase "dbd/myioc.dbd"

myioc_registerRecordDeviceDriver pdbbase

dbLoadRecords "db/temperature.db"

iocInit



启动后可另开终端用 caget 测试:

caget MYIOC:TEMP:PV

# 应输出 25.00



四、对接真实设备:asyn + StreamDevice 简介


多数串口/网口设备通过 asyn(异步I/O支持) + StreamDevice(协议解析)接入:


1. 编译 synApps/asyn 与 StreamDevice

2. 在 IOC Makefile 中链接 asyn 库

3. 写协议文件(.proto)定义命令/响应格式,例:

Terminator = CR LF;

ReadTemp {

   out "TEMP?";

   in  "TEMP=%f";

   @mismatch { in "ERROR"; }

}


4. Record 的 INP 指向 @asyn(StreamDevice, LINK, 0) 并绑定协议


此部分篇幅较长,建议参考 synApps 官方示例。


五、网络与访问控制(Channel Access)


- 默认端口:TCP 5064(Search),UDP 5065(Beacon)

• 若有多网卡或防火墙,指定接口:

export EPICS_CA_AUTO_ADDR_LIST=yes

export EPICS_CA_ADDR_LIST=192.168.10.255   # 显式广播地址

export EPICS_CA_SERVER_PORT=5064



客户端(如 camonitor、MEDM、CS-Studio)用:

camonitor MYIOC:TEMP:PV



六、常见新手问题排查


现象 原因 解决


caget 超时 CA端口被防火墙挡 / IOC未运行 iptables -I INPUT -p tcp --dport 5064 -j ACCEPT;确认 iocInit 成功


Record 不更新 SCAN=Passive 或未设 SCAN 设 SCAN="1 second"


启动报 dbLoadRecords: file not found 相对路径错 用绝对路径或确认 TOP/db/ 下有该 .db


PV名含冒号被shell解析错 shell未加引号 始终 caget "MYIOC:TEMP:PV"


七、结语


EPICS 分布式控制系统的最小闭环是:编译 Base → makeBaseApp 建 IOC → 写 .db 记录 → st.cmd 加载 → caget/camonitor 验证。掌握 Record 模型与 dbLoadRecords 流程后,再逐步引入 asyn/StreamDevice 对接串口设备、Archive 到 Channel Archiver,就能构建出可扩展的大型实验装置控制平台。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在工厂自动化结构中,PLC编程逻辑控制器用于对高速要求的过程参数进行控制和监视。但是由于I / O设备数量的限制,PLC不能处理复杂的结构。

关键字: 分布式控制系统 PLC 编程逻辑控制器

1、引 言煤粉制备是水泥生产装备中最重要的环节之一,其生产过程的任务就是将原煤安全加工成符合要求的煤粉,并将制备好的煤粉输送到煤粉仓储存,从而为水泥生产过程提供燃

关键字: 现场总线 分布式控制系统 PLC控制 BSP

前言现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持

关键字: 智能节点 CAN总线 分布式控制系统 ST

印度经济虽然外部需求减弱,但是国内需求却仍保持着强劲,并推动印度快速工业化和经济增长。在这样的现状下,印度已成为在世界上增长最快的经济体之一。随着印度不断扩大的电力行业,以及金属增长,开采,炼油,石油

关键字: DCS 分布式控制系统 控制技术 数据交换

摘要:将PLC控制系统与现有GPRS无线通信网络技术集成,通过GPRS网络通信技术,可以实现全国,甚至全球范围内的数据超远程可靠传输,进而达到数据远程分析处理,远程控制的目的。   引 言  自20世纪90年代以来,数

关键字: GPRS网络 PLC 分布式控制系统 系统方案

0 引言智能机器人研究在当前机器人研究领域具有十分突出的地位,其显著的特点是具有环境感知、判断决策、人机交互等功能。具体地说,应该具有可移动性,能根据命令或需要到达指定工作地点或区域;应具有图像识别能力

关键字: 分布式控制系统 智能机器人 BSP 计算机

0 引言智能机器人研究在当前机器人研究领域具有十分突出的地位,其显著的特点是具有环境感知、判断决策、人机交互等功能。具体地说,应该具有可移动性,能根据命令或需要到达指定工作地点或区域;应具有图像识别能力

关键字: 分布式控制系统 智能机器人 BSP 计算机

1、 什么是DCS?  DCS是分布式控制系统的英文缩写(Distributed Control System),在国内自控行业又称之为集散控制系统。  2、 DCS有什么特点?  DCS是计算机技术、控制技术和网络技术...

关键字: 分布式控制系统 DCS I/O 过程控制
关闭