光谱仪AQ6370与电脑进行232串行通信,并用Labview编写上位机程序

本文详细介绍了如何通过AQ6370光谱仪的232串口与电脑通信,包括设置串口、使用LabVIEW编写上位机控制程序、波长配置、扫描模式设置以及文件自动保存等功能。还讨论了硬件连接和注意事项,以确保有效和高效的数据传输。
摘要由CSDN通过智能技术生成

光谱仪232通信程序说明

  • 光谱仪串口通讯概述

AQ6370光谱分析仪是一种可以高速测量LD和LED光源、光放大和其他设备的光学性能,通过仪器测量得到的数据可以被存储到本地文件夹中并通过U盘等设备提取;同时,该仪器还配备了GPIB、串口232、以太网等通讯功能接口,允许使用者通过上位机对仪器进行操控,为仪器的使用提供了更多的可能性。本文旨在实现光谱仪与电脑的232串口通讯,先需要在光谱仪端进行基本的串口通讯设置,其次通过一对公母串口线将光谱仪与电脑相连,并通过LabView编写上位机控制驱动程序,向光谱仪输送控制命令字符,并将得到的实验数据自动保存至文件中,完成一次采集过程。

  • 现有通讯程序

实验室现有程序是实现光谱仪与电脑之间的GPIB通讯。

上位机通过程序对光谱仪写入控制命令,包括扫描采集,同时将数据传送至电脑处。此处考虑到横河公司提供了该仪器的LabView驱动程序,且此驱动程序可较方便的实现功能,所以利用仪器驱动来完成上位机对仪器的控制命令程序。其次,传送回电脑的实验数据通过编写程序可直接以文本文档的形式保存到文件夹中。

  1. 仪器驱动程序介绍

横河公司提供的AQ6370 LabView驱动程序如下所示:

  1. AQ6370初始化函数:此驱动函数是程序的核心函数,设置在程序的开始处,负责对仪器进行初始化。图1显示了该函数具有的功能:可以通过设置仪器ID对不同的仪器进行绑定;决定是否需要在每次操作前进行重置功能;可以设置用户名和密码进行登录和锁定。

1  AQ6370初始化函数图

      1. VISA resource name:此处需要输入串口名称,即串口线接入电脑的接口(如COM1;COM2),需要在电脑的设备管理器中查找;此处设置为数据传输找到正确的路径。不同的路径对应不同的通讯方式。当选择串口通讯时,可以在仪器驱动中更改通讯设置,如波特率,起始位终止位等,如图2所示。这部分是仪器驱动程序可以进行232通讯的基础。

2  AQ6370初始化函数内通讯图

      1. ID Query? 用来查询仪器的ID,这样可以将电脑连接到我们所需要通讯的仪器上,这里需要设置为真;当设置为真时,程序向仪器发送命令字符“*IDN”可以得到仪器ID并成功与相应仪器对接。
      2. Reset? 规定是否在每次操作前对仪器进行重置。如果不需要每次都对仪器进行重复设置,这里需要设置为假,仪器就会具有记忆功能,关闭程序后设置也不会改变。
      3. Timeout:通过设置超时时间,可以在程序发生错误没有反应时及时返回并退出程序,防止程序一直在错误位置死机。
      4. 该仪器驱动还具有用户名与密码登录功能,需要正确输入才能使用该仪器,有效地防止隐私及数据泄露。

该驱动程序流程图如图()所示。

AQ6370初始化程序流程图

  1. AQ6370波长配置函数:该函数用于对光谱仪的波长测量进行配置,如图3所示。通过此函数上位机可以从设置中心波长或者设置起始终止波长两种方式来规定待测波长的范围。“Range Sw”引脚用来选择采用哪种方式:如果选择通过设置中心波长,则可以依次输入中心波长值和带宽值决定波长测量范围;如果选择起始终止波长方式,则只需输入期望测量的开始波长和终止波长即可。

3  AQ6370波长配置函数图

AQ6370波长配置程序流程图

  1. AQ6370设置扫描模式函数:此函数可以设置光谱仪扫描模式,通过下拉列表可以选择单次扫描、重复扫描、自动等模式,如图4所示。单次扫描模式是指当上位机发送“Single”字符时,光谱仪进行一次扫描;重复扫描则是指光谱仪对波形进行不间断地扫描。该函数的底层逻辑是通过选择不同的模式,驱动程序会向光谱仪发送不同的控制命令来实现对应的功能。

4  AQ6370设置扫描模式函数图

  1. RMS配置函数:光谱宽度设置函数。图5显示了该函数的逻辑功能。RMS就是均方根, 对光谱拟合高斯曲线,定义积分边界。在此处可以设置阈值和K值。

5  AQ6370 RMS配置函数图

  1. Query Analysis RMS:该函数是谱分析函数,通过对光谱仪输送来的数据及进行计算,可以得到光谱的中心波长和谱宽,并显示在前面板中。
  1. 现有通讯程序介绍

通过以上的仪器驱动函数,可以实现上位机对仪器的控制。程序流程图如图6所示:

6 上位机程序接收流程图

  1. 控制测量程序

首先利用AQ6370配置函数对仪器进行简单配置,并确定光谱仪与电脑进行的通讯方式。接着利用AQ6370波长配置函数和AQ6370设置扫描模式函数对测量参数进行配置。定义好这些参数后,就可以进行扫描测量。扫描测量采用While循环模式,可以让程序自动按照一定周期进行扫描。

程序每发送一个Single指令,光谱仪就扫描一次得到波形,同时波形数据会以二进制形式通过串口线传到电脑上。底层LabView软件会将这些二进制数据自动转换为ASC码形式,在波形图中显示。

仪器的采样时间即为程序循环的等待时间。通过设置while循环的等待时间就可以得到不同的测量采样时间。

  1. 文件自动写入程序

为减轻工作量,每次扫描得到的光谱数据会自动在程序所在的文件夹中以txt文件的形式存储。在LabView程序中,可以通过表格写入函数来实现。由于波形数据是很多点组成的数据集,在写入表格之前,还需要用到数组拼接函数将数据变成一个整体写入。写入光谱数据后,需要设置文件的位置,这里用到了“Current VI’s Path”函数,该函数可以返回当前VI访问的文件路径(即测量程序所在的文件位置),将数据保存在测量程序所在的文件夹中,方便使用者查找。最后,文件的命名格式为“日期时间-光谱”在这里需要使用“Get Data/Time String”函数,返回当前日期和时间。这里需要注意,由于文件命名中不能存在“\”和“:”字符,所以需要利用字符串替换函数将这两个符号替换成“-”。文件自动写入程序的流程如图7所示。

7 文件写入程序流程图

综上所述,上位机驱动程序框图如图8所示。

8 上位机程序框图

上位机前面板如图9所示。通过选择连接的串口,设置采样时间,并输入开始波长和结束波长,最后点击运行进行测量。

9 前面板示意图

  • 基于串口的设计
  1. 硬件接口及连接情况

要实现光谱仪与电脑的232通讯,需要一根232串口线;由于电脑上没有能直接连接232串口的端口,故还需要一根232转USB线,如图10所示。使用上述两根线,将仪器与电脑相连接。

10 硬件连接示意图

  1. 程序设计及改进思路

由于AQ6370驱动程序也包括232通讯功能,如图2所示,所以当在光谱仪中设置232通讯时,仪器会自动向电脑中发送一个信息,将仪器驱动更改为串口通讯模式。程序其余模块,包括控制测量程序和文件自动写入程序与GPIB通讯保持一致。但原程序也存在一些问题,需要进行改进与提高。

  1. 原程序框图中,在测量前进行设置的函数被设置在了循环中。为了增加函数的逻辑性,可以将这部分设置在循环之前,即:在测量循环之前就将仪器设置好,再进入循环进行测量。
  2. 增加波特率设置功能。由于232串口速度比GPIB速度慢,所以有时需要较高波特率才能满足一些测量要求,故在前面板提供更改波特率的功能是很必要的。在AQ6370仪器配置函数中,存在串口通讯的基本设置。所以需要在这个子VI中引出一个引脚来输入波特率。

进入前面板后,右上角有一个格子状的图标,这个图标就是用来向外界声明输入参数和输出返回值的,如图11。将格子绑定输入输出的操作为:鼠标移动到图标里面的一个小格后点击一下,再移动到前面板的控件上点击一个对应的控件,这样格子就和控件绑定在一起,在主程序的VI控件中多出一个可输入引脚。

11 引脚配置示意图

  1. 为了扩大程序的使用范围,增加一些可供使用者进行选择的功能,以满足更多的测量要求。在程序框图中利用选择按钮和条件结构来实现波长设置中“中心波长/带宽”和“开始结束波长”两种确定波长范围的方法。程序框图如图12所示。确定好一种模式后,在后面的数值输入控件中输入相应的参数即可实现波长选定。同样的,分辨率与阈值也可以在前面板中输入。

12 程序框图

  1. 增加程序的记忆性。对于程序记忆设置,考虑采用如下思路:每次结束程序之前的最后一步,将输入的参数保存到程序目录中的一个文件夹中;下一次打开程序并运行时,首先将读取此文件夹,将文件中保存的参数设置到前面板中,以此来实现历史记录功能,即参数存储功能。此功能用到的函数位于“文件I/O”处,名为读、写配置函数。

记忆参数功能程序框图如图13所示。此处设置了事件结构,即每次有输入控件的值发生改变,执行保存当前数值到文件中的操作;若未有控件数值发生变化,则证明参数没有更改,参数不动。

13 记忆参数功能程序框图

读参数功能的程序框图如图14所示。在参数配置环节,程序自动搜索保存的文件,从中读出上一次测量所用到的各种参数值。

14 读参数功能程序框图

配置文件按照如图15所示的格式记载数据,方便读参数配置程序以数组形式读取并记录。(注:有些输入控件是下拉菜单形式,在此处记载的是该数据的位次,如分辨率选项的7代表分辨率下拉菜单中的第七个数“2.00nm”)

15 配置文件格式示意图

配置文件命名为“配置.ini”,是一种文本文档的变体。该文件被放置在与主程序同位置的文件夹中,如图16所示。

16 配置文件位置示意图

  1. 将杂乱无章的前面板规划整齐美观,提高可观赏程度。将测量所用到的驱动程序全部集成到一个子VI中,方便查看程序框图。
  1. 串口程序及前面板展示

将前面提到的改进措施进行完成后,程序设计流程图如图17所示。基于串口设计的程序框图如图18所示。前面板示意图如图19所示。(完整版程序请见附件)

17 程序设计流程图

18 基于串口设计的程序框

19 基于串口设计的前面板

设置好测量参数后,点击运行即可进行测量。测量展示图如图20所示。可以在图像中看到光谱,同时在显示页面看到中心波长和带宽。

20 光谱仪232通讯测试展示

数据存储功能与GPIB设置一样,均在与运行程序相同位置处名为“Data”文件夹中,命名为“时间-光谱”,以txt文件的形式保存。

使用完程序后,关闭程序即可。下次再打开程序时,上一次设置的参数不会改变,如图21所示。

21 光谱仪232通讯测试展示

若更改参数,如将开始波长改为1500,结束波长改为1600,如图22所示,并进行光谱测量。关闭程序后,当下一次再打开程序运行时,开始和结束波长会保持本次修改后的参数,如图23。这是因为更改的参数已经保存至配置文件中,如图24所示。

22 程序记忆功能测试展示

23 程序记忆功能测试展示

24 配置文件示意

  • 使用指南

光谱仪AQ6370的232通讯测试流程共有三步:连接仪器与电脑、在仪器中设置通讯方式、运行上位机驱动程序。测试流程图如图25所示。

25 光谱仪232通讯测试流程

  1. 串口线连接仪器和电脑

光谱仪与电脑之间通过用一根232母对母线和一根232转USB线相连接。图26显示了光谱仪与电脑之间的硬件连接情况。在这里注意需要将电脑设备管理器中的波特率和仪器上设置的波特率保持一致,否则无法进行通信。

26 硬件连接情况

  1. 光谱仪串口通讯设置

根据光谱仪AQ6370说明手册中通信模块设置,将光谱仪通讯方式从GPIB改为RS232通讯。首先按下仪器上的“System”按钮,接着按照图27显示的步骤对光谱仪AQ6370的通讯进行设置。

27光谱仪232通讯设置步骤图

同时在第二个页面可以更改通讯的波特率,保持波特率与电脑的波特率一致;同时也可以修改数据校验位和流控制方式等,操作流程如图28所示。

28 光谱仪232通讯参数设置图

  1. 上位机程序运行操作

电脑上需安装LabView软件。如图29所示,点击文件夹中名为“主程序”的文件夹,在其中找到“光谱仪232通讯(主程序)”,运行该程序,前面板如图30所示。区域1处是参数输入窗口,可以通过选择不同的选项卡修改测量参数,其中“通讯设置”是每次进行测量前都要进行输入的窗口,可在电脑的设备管理器中查看所连接的串口,并在输入窗口中“光谱仪串口”处选择相应的串口;测量参数部分可以规定测量波长范围,并对采样时间、分辨率、模式和阈值等进行设置。这部分参数具有记忆功能,在初次设置后即可保存,下一次运行时无需再次设置;最后点击运行,即可在图像中看到光谱图,并在显示区域3处看到数据信息,包括计算出的中心波长、带宽值、所用到的阈值和K值以及记录文件写入完成时间。同时,波形图中添加了游标功能,可以用鼠标随着波形进行移动,并在区域3处实时看到坐标信息。

29 光谱仪232程序运行示意图

30 前面板操作示意图

  1. 自动保存文件

每次测量完成时,程序会自动将数据存储在txt文件中,并保存在一个名为“Data”的文件夹中,该文件夹与程序运行文件处于同一位置,如图31所示。文件夹的命名格式为“时间-光谱”,如图32所示,其中时间精确到秒。使用者可以通过名称中的不同时间确定不同的测量。

31 保存文件位置示意

32 保存文件样例

在生成的txt文件中,包含了光谱的中心波长值、带宽值以及光谱的各点数据,如图33所示。其中,文件中第一行分别为中心波长值和带宽值,第二行开始是光谱数据值,左侧为光波长,右侧则是光功率,光谱数据显示了光波信息。

Center WL、Spec Width

33 保存的光谱数据示意图

  1. 注意事项

由于串口232通讯与原GPIB通讯相比,传输速度从并行传输变为了串行输出,所以数据传输速度有所下降。由于仪器默认传输波特率为9600,在这种情况下,原有的光谱采集设置(分辨率0.02,采样时间1s)需要更改,可以降低分辨率或提高采样时间。否则,极容易造成程序的卡死。

34 前面板波特率更改示意

如想保持较高分辨率和较短采样时间,也可提高通讯的波特率来提升传输速度。提高波特率需要在仪器与面板上同步修改:仪器的波特率更改请见步骤2;面板上更改波特率如示意图34所示,需在波特率端口进行选择。

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
附件内容分享的是基于LabVIEW上位机与串口通信,通过LabVIEW上位机显示波形,在分享其实现的源码同时,分享一段LabVIEW上位机与串口通信工作原理。 基于LabVIEW的串口波形上位机界面展示: 定义通信格式及功能 因为数据不算复杂,所以定义简单下位机帧格式:帧头(0xAA) 类型字节 数据低8位 数据高8位 保留字节1 保留字节2 校验字节 如果要传送的数据比较多/复杂,则可以参考ModuleBus协议! 主要功能包括: 对帧中的类型字节进行解析,并多通道显示在示波器上 帧偏差校正(这个一般人可能都没有做,造成数据丢失,而我这只要串口传输的数据没错,就能无错漏的解析每一帧) 实时显示读取的每个字节/双字节/4字节 信号保存,保存文件名自动按时间命名,适合查阅 信号回放 对信号进行解析,用指示灯显示 程序关键点展示: 上面虽然简单,但却是功能的最主要部分,包括帧头查找和错帧处理的程序。错帧发送的情况是:比如从串口中独到的帧并不是从帧头开始而是帧中间开始,如 0x12(数据) 0x00 0x00 0x00 0xAA(帧头) 0x00 其前面一帧可能是这样:... 0xAA(帧头) 0x01(类型) 0x01(数据) 这样,按查找帧头的方法,数据0x12就会丢失,实际数据按理应该是0x02*256+0x01,错帧处理就是将上一帧尾部不足一帧的部分加到下一帧中,这样下一帧就变成了:0xAA(帧头) 0x01(类型) 0x01(数据) 0x12(数据) 0x00 0x00 0x00 0xAA(帧头) 0x00 判断类型过程很简单,使用switch结构就行了(LabVIEW中就是条件结构同时实现了if和switch),编程时就是注意必须设置默认分支就行! 文件保存我使用了数据表,因为它确实简单,这里的亮点是增加了按时间保存的功能,相当于将时间字符串加入到文件名中,这样便于后期对采集的数据进行查找,不至于混乱。 波形回放就是将存储在数据表中的程序重新显示一遍,比较简单!
好的,下面是一个简单的示例代码,用于实现51单片机的ADC0808模块进行AD转换并通过串口发送给LabVIEW上位机。请注意,以下代码仅供参考,具体实现可能需要根据您的具体情况进行调整和修改。 ``` #include <reg51.h> #define FOSC 11059200L #define BAUD 9600 #define TIMER_1_RELOAD (65536UL - (FOSC/12UL/32UL/BAUD)) sbit CS = P1^0; // ADC0808芯片选择端 sbit OE = P1^1; // ADC0808输出使能端 sbit CLK = P1^2; // ADC0808时钟端 sbit DIN = P1^3; // ADC0808数字输入端 sbit DOUT = P1^4; // ADC0808数字输出端 void InitUart() { TMOD &= 0x0F; TMOD |= 0x20; TH1 = TIMER_1_RELOAD/256; TL1 = TIMER_1_RELOAD%256; TR1 = 1; SM0 = 0; SM1 = 1; REN = 1; EA = 1; ES = 1; } void SendByte(unsigned char dat) { SBUF = dat; while(TI == 0); TI = 0; } void SendString(unsigned char *s) { while(*s) { SendByte(*s++); } } unsigned char GetAdcValue(unsigned char ch) { unsigned char dat; CS = 0; OE = 1; CLK = 0; DIN = 1; CLK = 1; DIN = 0; CLK = 0; DIN = 1; CLK = 1; DIN = ch & 0x01; CLK = 0; DIN = (ch >> 1) & 0x01; CLK = 1; DIN = (ch >> 2) & 0x01; CLK = 0; OE = 0; CLK = 1; dat = DOUT; CLK = 0; dat <<= 1; dat |= DOUT; CLK = 1; dat <<= 1; dat |= DOUT; CLK = 0; dat <<= 1; dat |= DOUT; CLK = 1; dat <<= 1; dat |= DOUT; CLK = 0; dat <<= 1; dat |= DOUT; CLK = 1; dat <<= 1; dat |= DOUT; CLK = 0; dat <<= 1; dat |= DOUT; OE = 1; CS = 1; return dat; } void main() { unsigned char adc_value; InitUart(); // 初始化串口 while(1) { adc_value = GetAdcValue(0); // 获取ADC0808的通道0的转换值 SendByte(adc_value); // 将ADC转换值通过串口发送给LabVIEW上位机 } } void UartIsr() interrupt 4 using 1 { // 处理串口中断 } ``` 上述代码中,我们使用P1口控制ADC0808芯片的选择、输出使能和时钟,并通过P1.3口向ADC0808芯片输入数字信号。我们通过GetAdcValue函数获取ADC0808转换通道0的值,并通过串口将值发送给LabVIEW上位机。您需要根据您的具体情况修改代码中的端口和通信参数。同时,您还需要在LabVIEW编写相应的串口接收程序来接收单片机发送的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值