前言

本文主要记录了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.alibarchapplData.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"

关于QEGui

QE控件

问题汇总

编译过程中可能会遇到一些问题

  • 找不到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.dlllibprotobuf.dllacai.dllQEFramework.dllarchapplData.dll(这个是在Windows上才会生成,在qeframework\archapplDataSup\src\O.windows-x64-mingw\目录下可以找到)

    designer/QEPlugin.dll,这个也很重要,不然qegui加载.ui文件会显示空白。

    EPICS相关的DLL:

    ca.dllCom.dllnt.dllpvAccess.dllpvData.dll

    以及Qt相关的DLL。

参考链接