最近在帮忙指导学生做雨骤杯的大学生集创比赛,里面用到了雨骤科技的一款比较新颖的硬件设备“雨珠S”片上虚拟仪器。对于此设备具体的介绍,可以查看官方网站:雨骤科技官网。但至少就目前为止,官方给出的资料还是比较少的,可能是为了比赛的公平性暂时还没有放出来。等到31号会有官方的第二次直播课,这次直播课后,应该又会放出来一些资料。
设备外观呢大概就是下图的样子,大家通过官方的介绍也能够了解到,默认官方配备的是一块面包板,可以通过面包板测试一些简单的电路。
目前,官方已给出的资料有:仪器操场软件安装包。SDK开发包
官方仪器操作的软件界面如下:
下图为用官方仪器操场做的模拟输入输出测试。
SDK包里面,例程最多的是Labview版的,如下:
开发简单的程序,使用Labview上手会快一些,但开发比较复杂的程序,甚至跑很多复杂算法并不太建议用Labview。
而python的例程,只有一个:
运行效果如下:
不得不说,用Python开发应该是效率最高的,特别是后面处理数据牵扯到一些复杂算法的话,Python的各种数学运算库简直不要太好用。而如果要开发界面的话,也可以用PyQT做一个UI。擅长Python的同学可以尝试玩一玩。
但我今天主要想分享的是怎么用C语言的接口。对于这部分内容估计过两天的官方视频也会讲解,不知官方会用什么平台进行开发。我这边分享一个我用Qt做的移植。
首先要说的是目前大家都遇到的把C的dll和头文件添加到Qt内编译会报instrumentsplayground.h文件内的“ftd2xx.h”找不到。我这边暂时的解决办法是注释掉此头文件,然后编译,把缺的宏定义自己加上就OK了。我这边因为后面又添加了"windows.h"头文件,所以又注释掉了下面的BYTE和DWORD的类型定义。
#include<ctime>
#include<cmath>
#include<windows.h>
...
...
typedef void* FT_HANDLE;
typedef unsignedshort UINT16;
解决了上面的问题,剩下的就是C++的打包了,新建一个类,把雨珠S的API接口重新封装一遍即可。比如对于查找设备数量的API接口:
头文件内定义接口指针:
typedef int (*_RDEnumDeviceCount)(DWORD * count);
...
_RDEnumDeviceCount RDEnumDeviceCount;
然后定义Qt的封装接口:
int QtRDEnumDeviceCount(DWORD * count);
然后构造函数里面在动态链接库里加载底层接口:
RDLib=newQLibrary("lib/64/InstrumentsPlayground")
if(!RDLib->isLoaded())
if(RDLib->load())
qDebug()<<"RDLibloaded!"
RDEnumDeviceCount=(_RDEnumDeviceCount)RDLib->resolve("RDEnumDeviceCount")
实现Qt接口:
intRainDrop::QtRDEnumDeviceCount(DWORD*count)
{
if(RDEnumDeviceCount)
{
returnRDEnumDeviceCount(count);
}
returnFT_OTHER_ERROR;
}
这样也就可以在Qt中跑起来了哈,下面为一个简单的演示:
其他的函数接口,按照同样的方法封装即可。希望对参赛的同学们有所帮助。至于最终要做个什么效果出来,就要看同学们自己的想象力和能力了,祝大家好运。