Qt Creator是跨平台的集成开发环境(IDE),旨在为开发者带来最好的体验。 Qt Creator可在Windows、Linux和macOS桌面操作系统上运行,并允许开发人员在桌面、移动和嵌入式平台创建应用程序。
首先,去官网(https://download.qt.io/official_releases/qt/ )下载Qt Creator的开源安装包。
我下载的是5.12.12版本文件:qt-opensource-linux-x64-5.12.12.run
确保电脑上已经安装相关工具(前两章已经提到安装基础编译环境,已经安装过了,这步直接忽略):
sudo apt-get install gcc g++ make -y
安装QT:
$ chmod a+x qt-opensource-linux-x64-5.12.12.run
$ ./qt-opensource-linux-x64-5.12.12.run
开始启动安装,根据安装步骤安装即可,安装过程中,我们选用的版本比较新,安装过程需要注册一个账号,根据要求注册即可,如图:
安装过程中要特别注意选择QT自动的GCC编译器,如果不选择,可以使用系统带的GCC编译器,那么后续的设置就比较麻烦,推荐直接选择自带的gcc,如图勾选【Desktop gcc 64-bit】:
红色圈内的一些插件可以根据需要选择安装,比如QT Charts提供有很多曲线显示控件。
安装完成后,打开一个自带的demo进行测试,按以上的步骤选择gcc编译器,不需要对Qt的编译环境进行设置,可以直接运行编译demo,编译过程一般会出现cannot find –lGL这个报错,这是一个通用错误,多数情况安装libGL库即可,终端输入:
sudo apt-get install libgl1-mesa-dev
也有可能已经安装了,但是没有建立链接,我们需要手动建立软链接,首先找到库的位置,终端输入:
locate libGL
找到位置如图:
建立软链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/libGL.so
这里我们仍然以恒凯数据采集卡HK_USB DAQ V1.2这款采集卡产品为例
(链接:恒凯多功能数据采集卡USBDAQV12-Labview树莓派教程 工控学习板),
产品实物如下图:
1.首先将板卡通过USB数据线连接至计算机的USB口,
这里需要注意的是:如果没有按照前一章的说明编译并安装驱动,必须先按前一章的说明,先设置相关系统编译器环境,安装相关插件,编译数据采集卡的驱动,并安装。
2.然后将采集卡的DA1输出使用导线连接至AD1,一会我们将使用python程序通过DA1输出一个固定模拟电压,然后使用AD1通道采集功能采集DA1输出的电压。
3.之后打开一个信号发生器,设置信号发生器输出一个随机信号波形,我们将信号发生器输出的信号接采集卡的AD3通道,信号地接采集卡的AGND。
4.按采集卡的说明书将量程调整到正负10V量程档。
这样准备工作完成了。
这里我们直接打开数据采集卡自带的Linux系统的QT例程,首先打开工程文件.pro文件,如图:
特别需要注意的地方,就是在编译选项当中需要加入 -lusbdaq_v12选项用于链接采集卡的动态库,加入 -lusb-1.0用于链接系统USB插件库, /usr/local/lib/是USB驱动库的存放路径。
打开示例程序的main文件如下:
在程序main函数中,使用MainWindow类创建了一个对象W,并显示w,程序进入mainwindow.cpp内,如下:
在mainwindow.cpp文件开头部分包含数据采集卡的h文件“usb-daq-v12.h”,同时mainwindow.ui文件内做了三个控件,在mainwindow的构造函数初始化相关显示设置,同时调用设备打开函数,建立一个定时器,设置定时中断函数,如图:
然后编写定时中断函数相关程序,如图:
相关函数的说明:
函数:int DASingleOutV12(int dev,intchan,intvalue);
功能:DA模拟输出,该函数模拟DA通道1或者2的输出电压,一旦设定后,对应DA输出通道将保持不变,直到下次设置或者改变对应DA通道的输出模式为扫描模式。正常返回0,失败返回-1
dev 32位有符号整型参数,设备号,由计算机自动分配设备号,从0开始,第一个设备的设备号为0,第二个设备设备号为1 >chan 32位有符号整型参数,要设置的DA通道号,只有1或者2,其他值无效
value32位有符号整型参数,要设置的输出值,由于DA输出范围为0—10V,DA的精度为12位,因此要输出的电压V= value/4095*10。
函数:int ADSingleV12(int dev,int ad_mod,int chan,int gain,float* adResult);
dev 32位有符号整型参数,设备号,由计算机自动分配设备号,从0开始,第一个设备的设备号为0,第二个设备设备号为1
ad_mod: 32位有符号整型参数,设定采集时模拟输入模式,0—差分采集模式,1—单端采集模式。
chan:32位有符号整型参数,设置要读取的AD通道。对于单端模式:最小0,最大15;对于差分模式:最小0,最大7。
gain :32位有符号整型参数,根据外部硬件设置的量程代码,0返回AD采样结果数据,1-14返回对应量程的电压值,可参考3.4章节量程设置说明部分。
adResult: 32 位单精度浮点数据,用于返回采集结果(注意返回的数据值跟gain值有关,gain为0,则返回数据为AD测量结果(0-4096),gain为外部量程代码则返回外部实际输入电压值)。
函数返回: =0操作成功/-1失败。
运行代码时需要注意权限问题,Linux操作系统默认不会将硬件设备的操作权限给普通用户,只有root用户有所有硬件设备的使用权限,如果我们直接在qt环境中运行代码,需要首先退出系统,重新登陆root用户,才可以直接在qt环境运行操作数据采集卡;如果我们不想重新登陆系统,我们可以在终端使用命令带sudo权限运行,首先在终端中查找到生成的程序可执行文件,如何加sudo运行,如图:
最后显示出波形如图:
我们可以看到黑色波形是DA1输出的锯齿波信号, 绿色波形由于没有连接信号是一个随机信号,蓝色波形则是信号发生器输出的连续随机变化的一个波形。
在国产的麒麟Ubuntukilin系统下使用恒凯科技的数据采集卡编写Qt程序采集数据,主要的几个关键点是:
(1)编译驱动并放置在系统目录,以备Qt程序调用驱动库来操作采集卡采集数据;
(2)正确安装Qt编译环境;
(3)QT是C++语言,可以直接调用C库,相对比较简单;
(4)特别需要注意的是在工程文件加入相应的编译选项;
(5)在运行程序时需要注意设备权限问题,Linux系统普通用户没有操作硬件设备的权限;