1 概述
传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
传感器按用途可以分为力敏传感器、位置传感器、液位传感器、能耗传感器、速度传感器、加速度传感器、射线辐射传感器、热敏传感器等。
随着集成度的不断提高,多种传感器集成到一个模块,已经非常普遍。模块的生产厂商,对外提供一组通信协议,供模块使用者和模块进行通信,从而方便的获取传感器的测量数值。
本文通过一个实际的例子,介绍如何通过上位机软件,对一个多轴传感器模块的温度数据进行采集并用曲线图表显示温度数据。本例子的硬件架构如下图所示。
传感器模块数据输出: 温度、加速度、角速度、磁场等
传感器模块数据接口: 串口,波特率9600(默认)
传感器模块串口上位机连接:使用USB-TLL串口模块连接,VCC接VCC,TX接RX,RX接TX,GND接GND。
本例子上位机使用格西测控大师编写,最终效果如下图所示。
2 通信协议
数据采集系统和设备通信有两种方式,一种是DirectIO方式,也就是直接通过设备通信协议进行访问,这种方式需要了解设备的通信协议;另外一种是间接调用动态库的方式,这种方式只需要了解动态库的接口函数即可。
本文的实验例子是通过DirectIO方式进行通信。下面我们来介绍一下所用到的采集通信命令,通信命令帧结构如下图所示。传感器模块持续的向串口发送通信命令帧。
3 创建项目、设备接口和变量
3.1 第1步 新建项目
启动格西测控大师,在左上角菜单中选择“新建项目”,然后在弹出的“新建项目”对话框中,填写项目名称“温度采集与显示项目”,然后点击“浏览…”按钮,选择保存路径和填写项目文件名“温度采集与显示项目”,最后点击“确定”按钮。
3.2 第2步 添加串口设备
在项目管理器中选择“设备与接口”节点,然后点击鼠标右键,在弹出菜单中选择“新建设备…”。
弹出新建设备对话框中,选择“串口”,点击“确定”。
弹出设备属性对话框,填写“设备名”和其他设备参数,最后点击“确定”按钮。其中,“设备名”是设备的标识,可以是任意字符串,引用设备必须使用设备名。
3.3 第3步 添加变量
本例子用到变量容器、表达式变量和TXT文件变量。
TXT文件类型变量:当其所有子变量都改变过后,形成一条记录,保存到文件中。本例子中的温度数据,每次采集完毕,通过脚本把采集时间和温度值分别赋给“时间”和“温度值”变量,即可生成一条记录。
表达式变量:保存采集时间和温度值,采集时间使用系统当前时间,温度值通过采集到的数据经过表达式运算得到。
其中,Frequency表示变量数据每秒钟的触发次数, 每次触发,根据表达式计算产生变量的值;如果 Frequency<=0,则不能定时触发表达式计算,只有对 Value 属性赋值,才可以触发表达式计算进而产生新的变量值。
4 编写采集序列
本例子用到的步骤类型: While和Message。
其中Message步骤是报文步骤,可以通过自定义报文结构来编写通信协议,可以自定义任意结构的通信协议,非常方便和设备进行通信。
运行测试的时候,我们可以打开序列数据面板查看通信的过程数据。
5 设计用户界面
本例子用到的控件:LineChart(曲线图)、TableGrid(数据表)。
控件关键配置:
LineChart:
ChartSeries属性(格式为“<系列名称 1>,<X变量名>,<Y变量名>;<系列名称 2>,<X变量名>,<Y变量名>;…“ ;本例子设置为:温度曲线,时间,温度值)
DataProvider属性:绑定“采集变量表/温度数据”变量容器
TableGrid:
DataSeries属性(格式为“<变量1名>,<列1名称1>; <变量2名>,<列2名称>;…“ ;本例子设置为:时间,时间;温度值,温度值 )
DataSource属性:绑定“采集变量表/温度数据”变量容器
6 编写仿真序列进行调试
实际开发中,我们经常使用仿真的方式进行软件调试,使得开发进程更加可控。下面,我们从这个例子出发,探讨一下如何编写仿真序列。
本例子的传感器模块是串口通信的,故在仿真时我们选择用虚拟串口软件(VSPD虚拟串口软件)虚拟一对串口来实现仿真程序和实际程序的对发。
按以下步骤创建仿真序列:
1、创建串口“串口-仿真器”,保证和“串口”是虚拟软件创建的一对交叉互联的串口。
2、创建循环发送的序列,其中一个Message类型步骤用于发送仿真的帧到“串口-仿真器”。
3、编写“发送温度帧”步骤的脚本,生成随机温度值。