在“福珑2.0”主机上开发EPICS软件的体验
一、摘要
收到福珑2.0开发主机以后内心有点小激动,机身上的银色logo特别提神。
“龙芯发烧友开发机”福珑2.0”,外观小巧玲珑,主机长宽尺寸都只有155毫米,机身高度为70毫米。
福珑2.0开发机搭载龙芯3A4000低电压版处理器,主频1.5GHz,集成显卡,搭配龙芯7A1000芯片组。
俱乐部版自带512GB固态硬盘,采用国产忆芯主控、国产闪存颗粒,M.2-2280固态,支持PCIe、NVMe。
标配8GB DDR4 SO-DIMM内存、两个WGI211AT集成千兆网卡、Realtek ALC662集成声卡。
”福珑2.0”开发机可适配国产麒麟、Loongnix、翼辉等国产操作系统,操作系统底层多为linux内核,
非常适合做EPICS IOC 控制器。我这里选择的是Loongnix,方便安装软件包。
对我来说控制系统中大量使用进口设备作为服务器或过程控制设备(如西门子,斯奈德,ABB等),即使在软件系统中集成了国产新华,和利时等控制设备,底层的控制器芯片和实时操作系统都是基于国外的技术。ARM,X86和Vxwork、 QNX等,这一直是个遗憾。
好在大多数项目都是以linux操作系统作为平台开发,所以我感觉适配到Loongnix操作系统应该没有太多问题
主要是实现基于mips架构的编译。
其中EPICS是我们使用的一套开源的分布式控制系统软件工具集,一般作用相当于我们工业控制领域使用的SCADA软件,下层对接plc或各种工控设备。
它由阿贡实验室和洛斯阿拉莫斯实验室受美国能源部支助开发。EPICS主要应用于国内外一些大型的科研装置,可以说是基础科研一套比较重要的应用软件。
应用在比如:光源加速器、粒子对撞机、托克马克装置、射电望远镜、质子治疗装置等。
网站 列举了使用EPICS软件开发的科研或商业项目。EPICS 软件中大多数代码都是独立于操作系统的,称为LibCom OSI库 (Operation System Independent操作系统独立代码)。
EPICS控制系统和商业化分布式控制系统比较:
对比项 | 商用DCS | EPICS | 说明 |
---|---|---|---|
开发成本 | × | √ | 节约20人年软件 开发成本* |
接口可扩展性 | × | √ | 官方支持81种工业通讯协议,111个厂商设备,还不包含各国自主开发的通讯协议支持* 官方网站: |
源代码/开放性 | × | √ | 90年代始,开放性的国际合作开发模式 |
多平台支持 | × | √ | 支持Vxwoks,Linux,MacOS,Win |
功能完整性 | √ | √ | 操作界面、数据存储、报警管理、状态机等 |
系统规范性 | √ | × | EPICS软件开发管理相对松散 |
ITER“国际热核聚变实验堆”的推动弥补了EPICS规范性差的不足,发布了一整套基于EPICS开发控制系统设计标准,并且通过控制系统的模型化,实现EPICS控制系统开发系统级组态。
二、EPICS Base3.15.8安装
EPICS Base是EPICS控制系统的核心包,它的主要功能是运行一个基于内存的实时数据库,这个数据库可以跟驱动模块实时的交互数据,实现对设备数据采集和控制。另外对上层人机界面,报警系统,历史数据库系统等提供数据订阅服务。EPICS最初是运行在Vxworks实时操作系统的,它具有控制逻辑编程功能。所以利用longnix PREEMPT_RT实时内核,可以开发基于龙芯的PC控制器。
2.1 识别系统结构:
执行 ./startup/EpicsHostArch
1. src/tools/EpicsHostArch.pl: Architecture 'mips64el-linux-thread-multi' not recognized
#uname -a
Linux localhost.localdomain 3.10.84-23.fc21.loongson.8.mips64el #1 SMP PREEMPT Thu Mar 5 17:56:57 CST 2020 mips64 mips64 mips64 GNU/Linux
修改 src/tools/EpicsHostArch.pl 文件:
增加一行
return 'linux-mips64' if m/^mips64el-linux/;
执行 ./startup/EpicsHostArch
linux-mips64
引入环境变量:EPICS_HOST_ARCH = linux-mips64
2.2 安装EPICS base所需的软件包
dnf install gcc
dnf install gcc-c++
dnf install readline-devel
dnf install perl-ExtUtils-Install
2.3 configure/os目录下系统支持文件:
2.3.1. 增加 CONFIG.Common.linux_mips64
# CONFIG.Common.linux-mips64
# Definitions for linux-mips64 target builds
# Sites may override these definitions in CONFIG_SITE.Common.linux-mips64
#-------------------------------------------------------
# Include definitions common to all linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = mips64
ARCH_DEP_CFLAGS = $(GNU_TUNE_CFLAGS)
ARCH_DEP_CPPFLAGS += -D_mips64_
OP_SYS_CFLAGS += -mips64
OP_SYS_LDFLAGS += -mips64
# If your crosscompiler name has a GNU target prefix like <gnutarget>-gcc,
# e.g. mips64-linux-gcc, put a GNU_TARGET definition in
# CONFIG_SITE.<host>.linux-mips64 file, e.g. GNU_TARGET=mips64t-linux
2.3.2 增加CONFIG.linux_mips64.Common
# CONFIG.linux-mips64.Common
#
# Definitions for linux-mips64 host builds
# Sites may override these definitions in CONFIG_SITE.linux-mips64.Common
#-------------------------------------------------------
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
WIND_HOST_TYPE = mips64el-linux
2.3.3 增加 CONFIG_SITE.linux_mips64.Common
# CONFIG_SITE.linux-mips64.Common
#
# Site override definitions for linux-mips64 host builds
#-------------------------------------------------------
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100
2…3.4 部分编译参数的适配
1.修改CONFIG.Common.linuxCommon
POSIX_LDLIBS = -lpthread -shared #增加动态链接符号:shared
2.修改 CONFIG.Common
USR_ARFLAGS = -rv #增加 ar静态库参数-rv
3.make 编译
三、ASYN 编译
3.1 epics-modules / asyn所需的软件包
dnf install rpcgen
dnf install libtirpc-devel
修改 /configure/RELEASE 文件
只需要写对EPICS_BASE路径,其它屏蔽。
Make 编译
四、Etherlab驱动支持
EtherLab 主站驱动包是一个开源的Ethercat总线通讯驱动,可以实现基于以太网的Ethercat 总线从站模块的通讯。主要是看重Ethercat基于以太网总线架构和优异的性能。另外选用国产化的(南京实点)Ethercat的从站IO设备可大大降低系统成本。
4.1 执行 …/bootstrap
修改 configure.ac
AM_INIT_AUTOMAKE([-Wall -Werror dist-bzip2 subdir-objects])
增加对子文件夹的自动编译subdir-objects
4.2 执行…/configure --enable-generic --disable-r8169 --disable-8139too --with-linux-dir=/usr/src/kernels/3.10.84-23.fc21.loongson.8.mips64el/
安装 kernel-devel
4.3.报错:In file included from liberror.c:1:0:
extern char ecrt_errstring[ERRSTRING_LEN];
修改liberror.h
extern char *ecrt_errstring[ERRSTRING_LEN]; liberro.c和liberror.h C定义不一致
五、Etherlabmaster-code EPICS软件安装
EPICS 需要Ethercat驱动支持来实现实时数据库和驱动程序的接口
5.1 没有libxml/tree.h
dnf install libxml2-devel
5.2 找不到ecrt.h liberror.h
只要把etherlabmaster-code/ehtercatAPP/scanner/Makefile文件中
ETHERLAB=/usr/local/epics/epics-modules/etherlabmaster-code
ETHERLABPREFIX=/opt/etherlab
修改成ethercat驱动包和ehtercat 安装路径就好了
5.3 找不到./usr/bin dls-python
把所有的python执行命令改为 python 版本在2.7
总结:
个人感觉龙芯平台已经进入到了一个快速发展的通道,正处在软件生态建立和完善的过程中,希望个人能小有贡献。编译过程中会遇到一些小问题,但总的来说除了修改编译参数和原始配置外,没有大的问题,有机会会把编译报告发到论坛上。后续计划把EPICS相关历史数据库,报警系统,人机界面等编译到龙芯平台上,实现龙芯对EPICS控制系统软件的整体支持,可以提供一套基于龙芯的开源的低成本的控制系统软件架构方案。