
EPICS即“实验物理及工业控制系统”(Experimental Physics and Industrial Control System),是上世纪90年代初由美国洛斯阿拉莫斯国家实验室(LANL)和阿贡国家实验室(ANL)等联合开发的大型控制软件系统。
控制系统中,设备的每个模拟或数字的输入/输出量称为一个流程变量。一个流程变量在数据库中对应为一个记录(record)。一条光束线控制系统是小规模的系统,流程变量约在600数量级。
EPICS软件系统中的两个基本机制是通道访问(CA)和分布式动态数据库(DB)。
1)通道访问(PV变量)
EPICS系统依据客户-服务器模型,在TCP/IP协议之上建立了称为Channel Access(简称CA)的通道访问机制,并为客户(主要是OPI)和服务器(主要是IOC)分别提供了应用接口子程序库。
CA是EPICS系统的最基本机制,它所能提供的服务包括动态通道定位,数据读写,访问监控,连接监控和自动重接等,CA客户可以根据通道名直接访问系统中的任一个通道,通道具有回叫(callback)机制,根据客户的预先指定发送监控所得的信息,这样便无须依靠巡回检测来监控系统,可以极大地减轻网络负荷。
2)动态数据库(DB文件)
控制系统的I/O数据时频繁变动的数据,为了响应来自操作台的命令、控制算法和各种操作状态,必须采用现场运行的动态数据库(run-time database)来记录数据。动态数据库的基本特点是:(1)为了便于访问,数据结构采用简单的表,(2)数据库存放在内存中,(3)对于分布式数据库,数据库分布在系统的各个节点中,供操作员提取。
分布式动态数据库是EPICS系统的另一个最基本的特点,在EPICS系统中,数据库分布在各个输入输出控制器(IOC)中,每个通道都作为数据库的一个记录存放在控制该通道的IOC中,每个记录中的值可以来自硬件设备输出、操作员命令或者其它记录的输出。
EPICS动态数据库不仅用于存放当前的通道数据,而且,所有的过程控制功能也基本上在动态数据库中实现。因此,EPICS的数据库记录又被称为过程模块。
注意:在EPICS的3.13版及其以前的版本,IOC只能运行VxWorks实时操作系统。由于VxWorks非常昂贵,从3.14版本开始,IOC可支持RTEMS、Linux、Windows等多种操作系统。OPI与IOC也由原来必须运行在不同的CPU上,发到到可以集成在同一台PC上,为软件仿真、系统集成提供了极大的方便。
提醒:更详细的资料可以参考EPICS官方:https://epics.anl.gov/index.php

图1:EPICS官网
为了测试下位机ZYNQ里面的EPICS服务器和客户端工作是否正常,我们可以在上位机Windows环境下安装EPICS开发测试环境,这样我们就能通过cmd命令来对局域网内部发布的EPICS PV变量进行访问和读写了。
由于我们习惯于LabVIEW开发,所以上位机EPICS测试环境,我们依然选择LabVIEW环境下的EPICS工具包,这里最有名的有德国helmholtz-berlin实验室封装好的EPICS LabVIEW工具包,免费和开源的,用户可以直接拿来用。这个CALab工具包相比于NI LabVIEW DSC里面自带的EPICS,执行效率和功能要丰富的多。
CALab是开源的,它是由helmholtz-berlin(柏林亥姆霍兹材料与能源中心)专门将EPICS函数封装成LabVIEW VI和例程,支持LabVIEW 7.0以上的所有版本(32位/64位),已经在Windows 7®、Windows 10®、Win11和Ubuntu®20.04下进行了测试。
更多详细信息见CALab主页:https://www.helmholtz-berlin.de/zentrum/locations/it/software/exsteuer/calab/index_en.html
2.1、CA Lab软件工具包安装步骤
1)为了加快安装,我们提前将CALab安装包下载好了,如图2所示,感兴趣的用户可以私信我们。

图2:提前下载好的CALab软件工具包
2)直接双击这个CALab Setup.exe,然后在弹出来的安装提示框图,大家可以根据自己的LabVIEW版本具体情况进行选择,过程如下。

图3:选择接收CA Lab Licence协议许可(开源免费)

图4:点击“Next”下一步继续安装

图5:点击“Browse”浏览按钮,选择电脑上已经安装过的LabVIEW版本所在的路径(比如我们这里选择的是LabVIEW 2020)

图6:检查一下LabVIEW软件所在的具体路径

图7:CA Lab每个版本具体更新信息(让用户知晓即可)

图8:默认会在LabVIEW user.lib文件夹里面安装calab相关组件

图9:这里选择完整版安装(特别是第2项native tools里面的几个exe,因为这些exe,我们可以直接在shell cmd里面输入EPICS常用指令进行测试)

图10:默认情况下会在Windows开始菜单的National Instruments里面创建快捷菜单

图11:必须勾选,默认会自动给CATOOLS添加环境变量(非常贴心)

图12:让用户核对一下安装开始前的汇总信息

图13:开始安装(3s结束)

图14:点击“Finish”完成按钮,查看Readme文件

图15:因为安装软件自动给我们设置了环境变量,需要重启电脑才能生效
(所以这里我们需要手动重启一下电脑)
注意:因为我们前面安装的CALab工具包是64位LabVIEW版本的,如果大家电脑上的LabVIEW是32位的,需要将本节实验97里面“PC端上位机”文件夹里面的“lib-32位”文件夹里面的所有文件复制到calab安装目录下进行覆盖,如图16和17所示。

图16:如果安装的是32位版本的LabVIEW软件,需要将这个32位lib文件夹里面的所有文件进行复制

图17:将原先32位lib文件夹里面的所有文件覆盖到这个路径下
2.2、上位机Windows系统下的EPICS环境验证测试
1)首先,打开上位机Windows系统下的cmd窗口,在里面输入caget或者caput或者cainfo或者camonitor,然后回车一下,如果返回提示没有输入PV变量,如图18所示,说明当前环境下的EPICS指令已经存在了,后续我们就可以借助这些指令来访问和读写PV变量了。

图18:在上位机Windows系统cmd里面输入EPICS常用指令
2)然后,打开LabVIEW安装目录下的user.lib文件夹里面的calab文件夹,可以看到里面有很多封装好的LabVIEW EPICS驱动VI和例程,如图19所示;其中,lib文件夹里面就有EPICS CA常用指令对应的可执行exe文件,如图20所示。

图19:LabVIEW安装目录下user.lib文件夹里面的calab驱动VI和例程等文件

图20:calab文件夹里面lib文件夹里面的EPICS CA常用指令exe文件
2.3、测试上位机CA Lab自带的LabVIEW范例程序
1)启动LabVIEW软件,选择“Tools/工具”à“Advanced/高级”à“Mass Compile/批量编译”选项,如图21所示。

图21:打开LabVIEW软件自带的批量编译选项
2)将路径指定到前面安装好的calab文件夹里面,如图22所示。

图22:选择前面安装好的calab文件夹路径
3)点击“Mass Compile/批量编译”,等待编译完成即可,如图23所示。

图23:批量编译calab文件夹里面的VI(因为他们采用编写的LabVIEW版本很低)

图24:编译完成后的提示(本质上就是用当前版本的LabVIEW将低版本的LabVIEW VI快速打开一遍)
4)此时,我们打开calab文件夹里面Examples中的“SoftIOC Demo.vi”这个程序,如图25所示;你会发现这个VI报错,无法运行,如图26所示;这是因为前面我们安装的是64位版本LabVIEW封装的calab工具包导致的,为此,我们可以将所以报错VI里面库函数节点里面的calab.dll路径重新选择一下,改成用户电脑真实版本和真实路径即可,如图27~32所示。

图25:打开calab范例程序(SoftIOC Demo.vi)

图26:每个调用了calab.dll的VI程序都会提示dll找不到

图27:同时按住“Ctrl+M”解锁当前VI程序

图28:将库函数节点里面的dll路径改成用户自己安装的LabVIEW版本路径

图29:将右下角的“CaLabDisconnect_PV-1D.vi”这个子VI禁用掉(因为这个32位的dll里面没有这个函数)

图30:将calab关键字换一个名称,比如这里改成PC_IOC(意为上位机PC端发布的EPICS服务器IOC)

图31:将calab名称全部换掉PC_IOC

图32:CMD命令窗口里面可以对PC_IOC发布的PV变量进行访问和读写
2.4、利用LabVIEW DSC工具包里面自带的EPICS驱动VI和例程充当上位机
如果大家觉得CA Lab实现EPICS Server用起来不是很方便,也可以直接调用LabVIEW自带的DSC工具包,高版本LabVIEW已经集成了DSC工具包,这个DSC主要是给工业自动化行业用的。
1)所以我们可以直接在LabVIEW范例查找器里面搜索关键字“EPICS”,快速定位找到LabVIEW自带的EPICS Server和Client例程,如图33所示。

图33:在LabVIEW范例查找器里面找到EPICS Server范例程序(充当IOC Server)
2)这里,我们选择EPICS Server服务器端例程,让上位机Windows充当一个IOC设备,然后将PC端LabVIEW里面的变量以PV分布式数据库的方式发布出来,这样我们下位机ZYNQ可以作为EPICS Client客户端看看能不能随时访问这些上位机PC发布的PV变量。同时,下位机ZYNQ也可以同时作为EPICS服务器,将ZYNQ PS端Linux RT环境下的DB数据库进行加载发布自己的PV变量,让上位机或者CMD窗口进行访问,这样我们就能充分验证整个局域网内的EPICS分布式数据和CA PV变量交互的功能和优势。关于下位机ZYNQ PS端EPICS组件和例程我们后面再展开。
3)双击打开上面的“EPICS Server API.lvproj”项目,展开“我的电脑”,将里面的lvlib库名称改短一些,因为EPICS PV变量名称有字符长度限制,一般建议不要超过20个字符,里面的网络共享变量名称也尽量改短一些,如图34所示。

图34:将LabVIEW自带的EPICS范例程序里面的lvlib库和变量名称改短一些
4)然后右击lvlib库,选择“Deploy/部署”,如图35所示。

图35:将修改后的lvlib库文件重新部署一下
5)将上位机计算机名称也改短一些,右击计算机选择属性,将计算机名称改短,比如,我们这里测试用的电脑名称改成了“PCWin10”,如图36所示,只有7个字符。

图36:将用于测试的上位机计算机名称尽量改短一些
6)打开并运行上位机EPICS Server程序“Configure EPICS Server - Host.vi”,如图37所示;然后在前面板上的“Source process”下拉里面选择“浏览”找到刚刚部署的IOC库文件,如图38和图39所示;接着点击一下“Create All”按钮,将LabVIEW这些变量以EPICS PV变量的方式发布出去,如图40所示;最后打开上位机cmd命令窗口,利用ca指令测试一下刚刚发布的PV变量是否能够正常访问,如图41所示。

图37:打开上位机LabVIEW自带的EPICS Server服务器端程序

图38:点击变量服务器下拉列表里面的“Browse/浏览”

图39:浏览选择找到刚刚部署的IOC库文件和变量

图40:点击“Create All”将这些变量以PV变量方发布到网络里面

图41:上位机可以通过cmd命令窗口来测试一下EPICS PV变量能否正常访问
提醒:至此,关于上位机EPICS环境的测试工作就完成了!接下来是本书的重头戏,也就是ZYNQ PS端的EPICS通信如何实现。