本文主要记录了EPICS Qt在Linux上的安装步骤。这里以loongnix操作系统为例,Ubuntu系统上编译安装步骤类似。
EPICS Qt是一个基于Qt的分层框架,使用Channel Access (CA) and PV Access(PVA)访问EPICS数据。它是为快速开发控制系统图形界面而设计的,最初是在澳大利亚同步加速器开发的。
安装EPICS#
这里不再写具体步骤了,总之就是非常简单,下载、解压、编译即可。具体步骤可以参考以前的文章。
安装Qt#
直接使用终端安装Qt
1
2
3
4
5
| sudo apt update
sudo apt install qtbase5-dev qt5-qmake qtcreator
sudo apt install qtdeclarative5-dev qttools5-dev
# 安装Qt Svg库,编译QWT时需要用到
sudo apt install libqt5svg5-dev
|
安装QWT#
Qt EPICS推荐使用Qwt 6.1.4,如果在Ubuntu 20.04上直接通过终端安装也是这个版本。我使用Qwt 6.2.0编译,也是没有问题的,这里以Qwt 6.2.0为例。
最新测试:Qwt 6.3.0也可以用 ~
先下载Qwt的源码 下载Qwt-6.2.0。
下载完成后解压
1
2
3
4
| # 解压tar.bz2
tar -jxvf qwt-6.2.0.tar.bz2
# 解压zip
unzip qwt-6.2.0.zip
|
解压完成后编译Qwt,使用QtCreator或者在终端使用qmake
都可以。
然后手动将编译生成的文件复制到以下位置,例:
1
2
3
4
5
6
7
| # 复制编译生成的qwt
sudo cp -r build-qwt-unknown-Release/lib/* /usr/lib/loongarch64-linux-gnu/
# 复制编译生成的designer插件
sudo cp build-qwt-unknown-Release/designer/plugins/designer/libqwt_designer_plugin.so /usr/lib/loongarch64-linux-gnu/qt5/plugins/designer/
# 复制qwt头文件
sudo mkdir /usr/include/qwt
sudo cp qwt-6.2.0/src/*.h /usr/include/qwt
|
安装ACAI#
ACAI Channel Access Interface
EPICS Qt依赖ACAI提供的Channel Access接口。
1
2
3
4
5
6
7
8
| cd /usr/local/epics/modules/
git clone https://github.com/andrewstarritt/acai.git
cd acai
vi configure/RELEASE.local
# 修改EPICS_BASE路径,例:
# EPICS_BASE=/usr/local/epics/base-7.0.8
make -j8
# 等待编译完成
|
安装google protobuf#
如果需要EPICS Qt支持EPICS Archiver Appliance,需要安装google protobuf。
1
| sudo apt install protobuf-compiler libprotobuf-dev
|
EPICS Qt#
首先克隆EPICS Qt的两个代码仓库。
1
2
3
4
| # framework and support libraries
git clone https://github.com/qtepics/qeframework.git
# QEGui display manager
git clone https://github.com/qtepics/qegui.git
|
这里我将代码都放在~/QtEpics
目录。
在开始编译前,需要先配置一些环境变量(根据自己的实际情况设置)。具体可以参考 EPICS Qt Environment Variables
1
2
3
4
5
6
7
8
9
10
11
12
| export EPICS_HOST_ARCH=linux-loong64
export EPICS_BASE=/usr/local/epics/base-7.0.8
export ACAI=/usr/local/epics/modules/acai
export QWT_INCLUDE_PATH=/usr/include/qwt
export QWT_ROOT=/usr/lib/loongarch64-linux-gnu
export QE_FRAMEWORK="$HOME/QtEpics/qeframework"
# 支持PV Access
export QE_PVACCESS_SUPPORT=YES
# 支持Archiver Appliance
export QE_ARCHAPPL_SUPPORT=YES
export PROTOBUF_INCLUDE_PATH=/usr/include/google/protobuf
export PROTOBUF_LIB_DIR=/usr/lib/loongarch64-linux-gnu
|
如果环境变量设置了支持Archiver Appliance,需要先编译archapplDataSup
。
1
2
| cd ~/QtEpics/qeframework/archapplDataSup/
make
|
编译完成后,可以看到~/QtEpics/qeframework/lib/linux-loong64
目录下有libarchapplData.a
、libarchapplData.so
两个文件。
然后依次编译 qeframework
qeplugin
qegui
。EPICS Qt文档说明需要修改configure/RELEASE
文件,但我这里修改后似乎没有生效,可能是使用了Qt Creator的原因,只能通过上面的环境变量设置。
注意:这里设置完环境变量,需要直接通过终端打开Qt Creator。
- 编译
qeframework
$HOME/QtEpics/qeframework/qeframeworkSup/project/framework.pro
- 编译
qeplugin
$HOME/QtEpics/qeframework/qepluginApp/project/qeplugin.pro
- 编译
qegui
$HOME/QtEpics/qegui/qeguiApp/project/QEGuiApp.pro
最后将编译生成的文件复制到系统目录,示例:
1
2
3
4
| sudo cp /usr/local/epics/modules/acai/lib/linux-loong64/libacai.so* /usr/lib/loongarch64-linux-gnu/
sudo cp ~/QtEpics/qeframework/lib/linux-loong64/libarchapplData.so /usr/lib/loongarch64-linux-gnu/
sudo cp ~/QtEpics/qeframework/lib/linux-loong64/libQEFramework.so /usr/lib/loongarch64-linux-gnu/
sudo cp ~/QtEpics/qeframework/lib/linux-loong64/designer/libQEPlugin.so /usr/lib/loongarch64-linux-gnu/qt5/plugins/designer/
|
运行QEGuiApp
1
2
| cd ~/epics/qtepics/qegui/bin/linux-loong64
./qegui
|
运行测试#
运行时环境变量设置,例:
1
2
3
| export QE_ARCHIVE_TYPE=ARCHAPPL
export QE_ARCHIVE_LIST="http://192.168.1.2:17665/mgmt/bpl"
export EPICS_CA_ADDR_LIST="192.168.1.2:5732 192.168.1.3:6666"
|
问题汇总#
编译过程中可能会遇到一些问题
- 找不到Qwt的头文件
解决办法: 修改qeframework/qeframeworkSup/project/common/common.pri
1
2
| INCLUDEPATH += $$PWD
+INCLUDEPATH += $$(QWT_INCLUDE_PATH)
|
- 找不到QEFramework的头文件
解决办法: 修改对应项目的项目文件
1
| +INCLUDEPATH += $$(QE_FRAMEWORK)/include
|
Windows上编译踩坑
我这里使用的是MinGW编译器,仅供参考。Windows编译安装EPICS,可以参考我的笔记。
ACAI编译报错,这个是由于平台函数的差异导致的报错。
我已经提交了修复补丁,参考 fix build error on windows。
编译 google protobuf
网上有很多关于windows编译google protobuf的文章。请自行搜索解决。
编译 QEFramework
这里需要修改configure/RELEASE.local
,示例:
1
2
3
4
5
6
7
8
9
10
| EPICS_HOST_ARCH=windows-x64-mingw
EPICS_BASE=C:\Users\YourName\.epics\base-7.0.8
ACAI=D:\source\acai
QE_FRAMEWORK=D:\source\qeframework
QE_PVACCESS_SUPPORT=YES
QE_ARCHAPPL_SUPPORT=YES
PROTOBUF_INCLUDE_PATH=D:\source\protobuf-3.21.12\src
PROTOBUF_LIB_DIR=D:\source\protobuf-3.21.12\build
QWT_INCLUDE_PATH=D:\source\qwt-6.3.0\src
QWT_ROOT=D:\source\qwt-6.3.0\build\Desktop_Qt_5_15_14_MinGW_64_bit-Release
|
Windows上运行程序
将编译过程中生成的DLL全部复制到qegui
程序目录下,大致汇总一下有:
qwt.dll
,libprotobuf.dll
,acai.dll
,QEFramework.dll
,archapplData.dll
(这个是在Windows上才会生成,在qeframework\archapplDataSup\src\O.windows-x64-mingw\
目录下可以找到)
designer/QEPlugin.dll
,这个也很重要,不然qegui
加载.ui
文件会显示空白。
EPICS相关的DLL:
ca.dll
,Com.dll
,nt.dll
,pvAccess.dll
,pvData.dll
以及Qt相关的DLL。
参考链接#