前言
项目需要:采用串口和CAN作为传输口,将数据传输到QT并绘图画出其波形。基本要求参看《QT串口动态实时显示大量数据波形曲线(一)》
项目进度:学习CAN编写程序+验证,估计消耗2周。
基础掌握:在单片机或者ARM上已经掌握CAN通讯的基本常识。
文章注意点:对于QT的基础学习不太精通,只能走一步算一波,文章会实时更新。
了解知识:
关于dll文件:能够被多种软件(包含VC,PHP等软件)调用的函数。差不多可以理解为.C函数,只是为了省空间放在了一起,并且经过一系列的加密算法组成的一种文件。功能类似于c语言的.C文件。
关于h文件:dll文件里面为函数主体,声明函数在h文件里,即:先声明一下有这个函数,函数的内容在dll文件里。
关于lib文件:先这样理解:dll文件里面包含的文件太多,如果都包含进来的话,执行文件太大了,为了减小其大小,将用到的dll里面的函数入口放进lib文件里。什么时候需要调用就去lib里面找函数入口,然后链接到dll文件里。
关于第二个dll文件:先这样理解:发布的时候不能将dll文件全部打包,只能打包用到的函数,这样会再搞个dll文件,将上面的dll文件中的用到的函数放进来,形成一个新的dll,配合lib文件使用。
QT中CAN第二次开发:
(1)准备工作:can盒采用的北京爱泰科技的usbcan盒。到其官网下载二次开发例程即可。如果采用周立功的can盒,就去对应官方网站下载。
有个QT的例程,还有个API文件夹,还有个pdf,这三个是能用的东西,其他的删了就行。
先说下API文件夹,里面两个文件,一个是32位机器对应的,一个是64位机器对应的。至于你机器是32位的还是64位的,不能看网上介绍的我的电脑的属性,切记!!!
(2)新建QT项目,这个就不说了,基本的步骤操作。然后将API里面的两个文件拷到含有main文件的文件夹里。
这里的controlCAN.lib和controlCAN.h都是来自于API文件夹,不管哪个,先搞进来。
(3)编译QT主程序,正常显示mainwindow窗口。在左侧项目栏里添加controlCAN.h文件。同时在主文件里添加#include "ControlCAN.h"。如图下图所示:
然后controlCAN.h里面会出现一大堆错误。在里面添加下面include就可以解决数据类型的问题了。
#include "windows.h"
(4)添加lib:在项目栏里右键,添加库。找到刚才拷进来的lib文件,添加进来。下面的三个都不选。
(5)添加dll文件:添加完lib文件之后,会在pro文件里增加几句话。
win32: LIBS += -L$$PWD/./ -lControlCAN
INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.
这个时候看win32,不管是64位系统还是32位系统,都需要添加API中x86中的文件,即32位系统对应的文件。我的系统是64位的,但是添加x64对应的东西就是出错,将刚才添加的h文件和lib文件都变为32位系统文件夹下的文件。如果不对应win32的话,就会报错。
这个时候编译文件,会发现系统不报错,还能弹出mainwindows窗口,说明添加h文件和lib文件正确。
如果在“debug”模式下,在其文件夹对应exe的文件的地方,拷ControlCAN.dll和kerneldlls文件夹下的usbcan.dll文件(这个取决于你用的can盒)。放好后,可以debug了。然后不会报错。同时在
ui->setupUi(this);
下放入CAN文件的函数:
VCI_OpenDevice(0, 0, 0);
发现可以debug,并且弹出mainwindow窗口。此时说明can文件的所有dll和h还有lib文件放置和运用正确。
(6)测试:删除debug文件夹里的两个dll文件,可编译不可debug,说明放入的32位文件是对的,改为64位文件放进去,debug,出现未知错误。改会32位对应的dll文件,可编译可debug。删除h和lib文件,编译报错,恢复文件编译通过,说明添加正确。
注:由于小伙伴需要源代码的时间不同,登录邮箱界面太多麻烦,所以建立了一个订阅号,如果有问题或者需要源码,可添加订阅号,留言后会发送源代码或者有任何问题可留言,将积极解决提出的问题。