这里先基于MATLAB来进行讨论,后续会涉及LabView和Python。
开启和关闭
与仪器交互需要通过端口、通道或者协议,一般涉及GPIB、USB和串口。三种方式的支持均需要安装特别的驱动。
先通过端口号找到端口,再通过仪器的地址找到仪器。仪器在交互中类似一个文件,可以开启和关闭。这里的开启关闭,是握手操作或者读写操作的开启和结束,而非仪器电源的开启和关闭。更准确讲,这里的开启和关闭是建立连接和断开连接。
开启仪器后,可以对仪器进行读操作和写操作。写操作,仪器会按照指令来进行执行测量任务。
初始化
在最开始,要确保全部的端口关闭。如下代码可以找到所有的端口并关闭。见MATLAB-002 串口通信_银河漫游者-CSDN博客,为方便论述,这里也展示如下。
try
port=instrfindall;
fclose(port);
end
GPIB
H2612=instrfind('Type', 'gpib', 'BoardIndex', 0, 'PrimaryAddress', 26, 'Tag', '');
if(~ isempty(g_K2612A))
H261 = H261(1);
else
H261 = gpib('CONTEC', 0, 26);
end
fopen(H261);
fclose(H261);
这里以连接Keithley 2612 为例, 简称2612。2612的地址为26。
采用instrfind函数,找到所有的Type为GPIB的端口,端口号BoardIndex为0。端口号上仪器的地址PrimaryAddress为26。
如果能直接找到,则选第一个为仪器的句柄。
如果没能找到,再采用gpib函数查询。这里,涉及到GPIB的厂家可以为CONTEC或者NI。
之后,可以用fopen, 和 fclose 对开启和关闭仪器。
关于写操作,写指令,最简单的例子,例如让仪器输出开启,如下:
fprintf(H2612,'smub.source.output = smub.OUTPUT_ON');
采用了fprintf函数对仪器写入指令。
关于读操作,在仪器处于开启的状态,读反馈,也可以先写入指令让仪器读取电流,并把电流print出来。这样子,通过fscanf就可以读到仪器的反馈的电流。
fprintf(H2612,'READING = smub.measure.i()');
fprintf(H2612, 'print(READING)');
current = fscanf(H2612);
USB
这里以单色仪Newport 74086为例子。仪器提供的USB控制库函数文件如下:
导入库函数。
hfile=['cs_USB.h'];
loadlibrary('cs_USB.dll', hfile);
通过库函数的cs_Open和cs_Close进行开启和关闭。
calllib('cs_USB','cs_Open',131);
calllib('cs_USB','cs_Close',0);
其中131和514是单色仪的地址,0是USB的端口号。
通过cs_Write写入指令。
calllib('cs_USB','cs_Write',0,strcat('GRAT 1',uint8(10)));% 818-SL(400–1100)
通过cs_Read读取反馈。
calllib('cs_USB','cs_Write',0, strcat('WAVE?',uint8(10)));
wavelength=calllib('cs_USB','cs_Read',0);
自定义:串口
Arduino可以独立作为一个仪器,通过MATLAB的串口方式发送到Arduino来控制Arduino执行需要的操作。USB也是一种串口,不过,假如要自开发一些功能,就需要自定义函数。
已经发布在如下: