高秋燕 姚舜才 李 健 闫 颖
(中北大学 信息与通信工程学院,山西 太原 030051)
串行通行是工业监控系统中直观重要的环节,而且,在通常的控制系统中,上位机与下位机之间实现通信的方法和应用平台很多,而且不同的方法具有不同的特点[1]。在众多集成可视化开发环境中,Visual C++是编程环境的最佳选择,其中MFC它提供了相当齐备的类和友好的界面环境,应用Visual C++可以轻松开发出功能强大、速度快、应用广泛、占用资源少的应用程序。本文主要是在Visual C++环境下,借助iUSBDAQ - U120816采集卡和NTC热敏温度传感器进行连接来进行数据采集的,在这里使用的是热敏温度传感器的模块,经过热敏温度传感器后,温度信号转换成相应的电压信号,然后经过iUSBDAQ- U120816采集卡,把该电压信号送进AI0,即模拟量输入的第一个通道,进过采集卡的信号然后进过串口送给USB接口直接与PC机连接,通过对Visual C++编程来进行温度采集、曲线的绘制,以及采集数据的存储[2-3]。
Visual C++是Windows平台上的C++编程环境,VC作为一个主流的开发平台一直深受编程爱好者的喜爱,VC++应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势,MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等[4]。
MFC借助C++的优势为Windows开发开辟了一片新天地,同时也借助ApplicationWizzard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统[5]。
正因为MFC是建立在C++的基础上,所以我强调C/C++语言基础对开发的重要性。利用C++的封装性开发者可以更容易理解和操作各种窗口对象;利用C++的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口的活动。而且C++本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活的代码。在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理[6-7]。
室内环境测试系统的温度采集的硬件部分如下图1所示:
图1 温度数据采集硬件连接图
在上图1中,小的那个模块是NTC热敏温度传感器的模块,MF52 型热敏电阻器是采用新材料、新工艺生产的小体积的树脂包封型NTC 热敏电阻器,具有高精度和快速反应等优点.在实际中,我们使用的是该温度传感器的模块,经过温度传感器后,温度信号转换成了相应的电压信号,模拟量输出的电压0-3.5V之间,并且该传感器模块需要5V的直流电源进行供电。NTC 热敏电阻器特点:测试精度高;体积小、反应速度快;.能长时间稳定工作;互换性、一致性好。
USBDAQ – U120816可用于工业过程监控,,它的主要功能有一下几点:
1.USB 2.0/1.1 全 速 界 面(full speed interface)以及USB电缆线供电;
2.8 个单端(Single-Ended),12-Bit 模拟输入(Analog Inputs),100Ks/s ADC ;
3.0 -4.096 V 模拟输入电压范围(Analog Input Range),解析度为 1mv ;
4.在连续STREAMING模式下能实时将数据不间断的采集到PC,总通过率多至32 kSamples/Sec,单通道的通过率多至13 kSamples/Sec for Streaming Mode多 至13kSamples/Second for Streaming Mode采集输入。
5.一个外部触发线供给STREAMING模式下数据采集和一个16-Bit计数器(Counter);
在这里设计的是工程名为“单通道温度数据采集”的单文档应用程序,其中在MFC AppWizard-Step 6 of 6 对话框中,我们选择的CMyView的基类是CFormView。
(1)用户登录界面的设计
系统登录模块用于验证用户登录系统时输入的用户名、密码是否正确,只有合法的用户才可以进入系统。
图2 用户登录界面
首先点击视图栏中ResourceView按钮,单击Dialog树状文件夹展开,右击,插入一个Dialog子对话框,用于绘制用户登录对话框,可以按照如下图对登录界面对按钮进行编程。
图3 登录界面流程图
(2)主界面的设计
通过采集卡的USB数据线实现模拟量到数字量的转换,输入到计算机,通过该系统对输入的信号进行处理,其中包括实时动态曲线显示模块,均值、最大值、最小值模块,采集个数,数据存储模块。绘制流程图如图3.1所示:
图4 标准的软件流程图
根据上面如图所示的流程图来进行对每个区域的编程,下面介绍详细的如何进行数据采集以及实时曲线绘制:
第一,先将iUsbApi.h和iUSBDAQ.h加入到工程文件中。
第二,在“单通道温度数据采集View.cpp”的开 头 处 添 加 #include“iUsbApi.h”和 #include“iUSBDAQ.h”。
第三,在开始对数据采集前,必须先视类的初始 化 时 OnInitialUpdate()中 添 加 LoadLibrary(“iUSBDAQ”),加载 iUSBDAQ - U120816采集卡的库函数、打开采集卡以及打开要采集的数据通道,之后在该函数中读取该采集卡和打开设备。
第四,开始对数据进行采集是还得先用IUSBDAQReadChannels,来设置打开的通道是哪个通道,在该采集系统中设计的是用第一个通道,来进行该通道数据的读取。
第五,在读取数据时,还必须定义一个时钟,在这里设计的是每1000ms采集一次数据,我们设计了两个采集数据的按钮,一个连续采集的按钮,一个间断采集的按钮,可以根据需要来选择使用哪种方式进行数据的采集[8]。
第六,对界面进行编程时,对实时数据采集的显示,在对温度进行采集时,得到的是单位为V的对应的电压值,方便及直观我们,在图像上的纵坐标显示的是1400-1000*m_caiji(MV);横坐标对应的是时间[9]。
第七,界面设计中包括图像显示区、按钮选择区、实时数据显示区和上下限指示区,在界面的右下角我们还设计了一个当时的时间显示。每一个区都分为一个模块,使得我们的界面更加清晰,漂亮。
最后,我们还对所采集的数据进行了数据的存储等的编程,以便为了以后对数据进行分析研究。下面为数据存储的代码,可以在0nPaint()函数中添加:
{
CString strTmp;
strTmp.Format(“%d“,m_caiji);
str += strTmp;
CStdioFile file(“d :data.txt “,CFile::modeWrite);
// 数据存储位置
file.WriteString(str);// 数据写入
file.Close(); // 关闭文件夹
}
数据采集界面以及实时曲线如图5所示:
图5 温度数据采集的界面显示
使用NTC热敏温度传感器对室内的温度进行采集,再使用USB数据采集板与基于VC++6.0的PC机进行通信。通过温度传感器将温度信号转换成电压信号,通过采集板的AI0通道将模拟信号输进来,经过采集板将该模拟信号转换成数字量传输到计算机上在界面中显示出来。利用MFC的编程思想,在可视化的界面中,可以直观的看见我们需要采集的数据。
在该系统中,我们使用的USB数据采集卡是多通道输入的,而在这里我们只是利用单通道对室内环境温度进行测试,很有很多需要改进的地方,在以后的工作中,可以利用多通道对室内的多个量进行采集分析,然后做出更加多功能的可视化界面,并且可以对采集到的数据来借助MATLAB进行滤波等的数据分析与研究。
[1] 陈天华.面向对象程序设计与Visual C++6.0教程.北京:清华大学出版社,2006.7-20.
[2] 孙鑫 .VC++深入详解.[M].北京: 电子工业出版社,2012;100-160.
[3] 田敏,郑瑶,李江全.Visual C++数据采集与串口通信测试应用实践.人民邮电出版社.2010.7-81.
[4] 陈志泊,王春玲,孟伟.北京.面对对象的程序设计语言,人民邮电出版社.2007.8-20.
[5] 郑阿奇,丁有和.Visual C++应用教程.北京:人民邮电出版社,2008.100-123.
[6] 张立科.Visual C++6.0程序设计与开发技术大全.北京:人民邮电出版社,2004.70-81.
[7] 幸长安,梅林.VC++编程技术与难点剖析.北京:清华大学出版社,2002.32-45.
[8] 罗斌.Visual C++编程技巧精选.北京:中国水利水电出版社,2005.101-132.
[9] 湛为芳.高效实用Visual C++库函数设计.北京:清华大学出版社.2010.50-54.