说明
针对温度的检测方法,分析温度检测显示实现方法,将温度显示系统分为硬件装置和后台软件两部分。硬件部分主要负责对检测目标的温度进行测量,并将所测得的数据传回PC机进行数据分析处理。
软件设计部分主要是PC机在基于Visual Basic 6.0语言程序下对采集到的温度数据进行检测和分析,并根据实测数据信息判断出温度是否超出预设范围并作出相应的指示。
本设计软件部分将整个系统划分为显示模块、报警模块、查询模块三大模块。
采用模块化结构设计,具有条理清晰、通用性好、便于改进和扩充的优点。本设计研究内容主要部分是后台软件,意在模拟工业现场,对温度进行测量并实时显示出来,并且可以根据需要设定温度的上下限,当温度超出上下限时系统将自动报警。硬件部分虽不做详细介绍,但是可以参用单片机、传感器等方式进行数据实测。
总体设计
硬件设计
本设计的精密温度计旨在研究后台软件部分,而硬件部分主要负责对温度的采集和传输。目前常用的采集方式是利用模拟温度传感器或者数字温度传感器对室温经行采集,然后传输到微处理器进行处理,最后将处理好的数据经串口传输线传给PC机。模拟温度传感器成本低,但是工作过程复杂,测得的温度精确度不是很高,并且采集到的数据不能直接使用,需要将数据进行量化分段再将其进行二进制编码从而转化为数字数据方可使用;
而数字温度传感器成本高,但是操作简单,精确度比模拟温度传感器高,采集的数据可直接供PC机使用。当然市面上两种传感器都有售,若是用于工业实体运用,推荐使用数字温度传感器。除此之外,也可以利用单片机进行处理,这里不做详解。
软件设计
本设计软件采用Visual Basic6.0编程,软件把整个精密温度计监测系统分为三大模块,分别是:显示模块,查询模块,报警模块。每个模块对应实现各自功能,但是各个模块之间又相互联系,模块之间的温度数据需要相互传递共享。
本设计计划温度计测量的温度精度为0.5℃,测量的温度范围为5℃~35℃[2]。由于条件有限,无法得到真实的工业温度数据,所以采用仿真数据进行模拟,将数据调用到VB程序中,然后实现如下功能:
①显示功能:能够实时显示当前环境的温度。在VB界面的一个主窗口中建立一个text控件,当检测到数据时,系统将这个数据经串口线传输到软件程序中,VB系统自动读入这个数据并写入这个text中,达到实时显示效果。然后,VB调用子程序将这个数据存入Access数据库中,同时取用text中的数在VB中使用Pset方法在界面上描点,并与上一个点用Line方法绘制平滑的曲线,从而达到同步绘制温度曲线。其次,VB程序调用date函数,用以显示当前系统工作的日期和时间时间。
②查询功能:能够作为查询使用,查询任意时间的温度及温度曲线。实现查询功能,需要在VB窗口中插入一个选项卡控件,查询时首先调用日历控件,选择日历的任一天,然后将选中的这一天作为变量参数传递给Access数据库,Access再将这一天所有的数据返回给VB界面中,然后在选项卡中可以切换曲线查询和表查询。
③报警功能:能够在温度超出设置范围时及时发出报警指示。本设计用响铃替代报警铃声,首先用VB调用一个Animation控件,这个控件可以直接调用一个音乐文件并播放出来。然后,在此控件下输入一个子程序代码,代码运用if函数,对VB中所有的数据进行判断,当温度在设定范围时,程序正常运行;当温度超出上下限时,此控件就调用一个音乐文件。
软件流程图
VB部件
VB软件在一般打开情况下,在左侧的工具栏中不会显示全部的控件。考虑到本设计的需要,现加入一些控件。首先,在VB编辑初始界面的左侧general空白处单击右键,选择“部件”,然后在“部件”下的“控件”栏中找到以下控件,选中确定即可添加成功。
需添加的控件为:
1)Microsoft Comm Control 6.0:这是MSSCCOM控件,用于串口选择;
2)Microsoft Tabbed Dialog Control 6.0:这是选项卡SSTab控件;
3)Microsoft Windows Common Controls 5.0:这是选项卡Tabstrip控件;
4)Microsoft Windows Common Controls- 2 5.0:这是铃声控件;
5)Microsoft Windows Common Controls- 2 6.0:这是日历控件;
6)Microsoft Windows Common Controls- 3.6:这是滚动窗控件;
7)Microsoft ADO Data Control 6.0 (OLEDB):这是ADO Data数据绑定控件;
8)Microsoft DataGrid Control 6.0(OLEDB):这是与ADO配合用于显示数据库的控件。
MSComm控件
MSComm:Microsoft Communications Control,是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它通过串行端口传输和接收数据,为应用程序提供串行通讯功能。具体的来说,MSComm提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,MSComm控件的OnComm事件捕获并处理这些通讯事件。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。
查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查CommEvent 属性的值来查询事件和错误。
本设计采用的是事件驱动处理方式。
程序设计
界面切换
本设计采用VB软件,软件系统是采用几个窗口与模块、数据库连接的方式。首先,运行程序时,系统运行第一个欢迎界面。然后在“进入”按钮控件下输入窗口之间的切换代码。代码如下:
Private Sub Command1_Click()
Form3.Show '进入按钮,打开主界面窗口
Form1.Visible = False '关闭欢迎界面窗口
End Sub
其中,Visible为一个窗口的属性,当Visible为False时,则窗口为不可见;当Visible为True时,窗口为可见,默认情况下,窗口都是可见的。Show函数是显示显示某个窗口或者控件的功能,它兼有装入内存和显示窗体两种功能。所以窗口之间切换时,采用Show和Visible结合即可实现窗口的切换。若需要同时显示几个窗口,则把需要显示的窗口的Visible属性都设置为True即可。
日期函数
VB中自带日期函数,所以不需要另外编程。调用日期函数Date并在Text文本中显示出来即可以实时显示当前时间,其代码为:
Private Sub Form_Load() '对象为窗体的load事件
Label5.Caption = Date '显示当前日期
End Sub
运行程序后,界面上就会当前日期。
选项卡
为了使系统界面更加简洁实用,同时能为用户提供多中选择,方便实际中的应用,从而可以成为一种交互式系统,本设计采用选项卡功能,将多个窗口合并在一起显示。选项卡用SSTab控件或Tabstrip控件都可以实现。二者之间没有本质区别,但是SSTab控件可以直接在编辑时就直接切换选项卡中的内容,进行直接编辑;而Tabstrip则只能在选项卡中第一个选项口下进行编程,当需要对第二个选项卡编程时则,则只能在第一个选项卡下声明对象后才能继续编程。
所以,为方便起见,本设计采用SSTab控件实现选项卡功能。选项卡添加成功后,单击右键,选中“属性”,然后就可以根据需要添加所需窗口的选项。本设计选项卡分为四个选项,分别是:温度曲线、温度表格、报警记录、停电记录。在温度曲线选项下,绘制当下温度曲线,查询时,则调用历史曲线;温度表格选项下为一组表格,表格内的数据为当下和历史的温度数据;报警记录和停电记录都是以表格形式呈现,方便用户查询时更为直观的得到数据信息。
窗口一的程序代码为:
Private Sub Command1_Click()
Form3.Show '进入,即链接主界面窗口
Form1.Visible = False '关闭欢迎界面窗口
End Sub
Private Sub Form_Load()
Picture1.Picture = LoadPicture("F:\乱七八糟\VB\实验\温度计设计\1.jpg") '插入欢迎界面背景图
End Sub
窗口二的代码程序为:
Private Sub Form_Load()
Label5.Caption = Date 显示当前日期
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\乱七八糟\VB\实验\温度计设计\温度数据.mdb;Persist Security Info=False"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from 温度数据"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
End Sub
Private Sub Picture1_Click()
Dim x As Integer, y As Integer, i As Integer, j As Integer
Form3.Picture1.Scale (-1, 45)-(25, -3) 分格
Form3.Picture1.Line (0, 0)-(24, 0) '画X轴
Form3.Picture1.Line (0, 44)-(0, 0) '画Y轴
Picture1.CurrentX = 24: Picture1.CurrentY = -0.2: Picture1.Print "t"
Picture1.CurrentX = -0.6: Picture1.CurrentY = 44: Picture1.Print "℃"
Form3.Picture1.Line (24, 0)-(23.7, 0.5) '绘制X轴箭头
Form3.Picture1.Line (24, 0)-(23.7, -0.5)
Form3.Picture1.Line (0, 44)-(0.2, 43.2) '绘制Y轴箭头
Form3.Picture1.Line (0, 44)-(-0.2, 43.2)
For i = 0 To 23 'X轴坐标刻度
Picture1.Line (i, 0)-(i, 0.3) 设置刻度线高度
Picture1.CurrentX = i - 0.2
Picture1.CurrentY = -0.1
Picture1.Print i
Next i
For i = 0 To 8 'Y轴坐标刻度
j = i * 5 '成倍显示刻度
Picture1.Line (0, j)-(0.1, j)
Picture1.CurrentX = -0.7 '把Y轴的刻度设置在左边
Picture1.CurrentY = j + 0.5 把Y轴刻度的数值上下移
Picture1.Print j 输出Y轴刻度
Next i
With MSChart1 '以线条方式显示
.Plot.Axis(VtChAxisIdY).ValueScale.Auto = Falsem '设置最大值
.Plot.Axis(VtChAxisIdY).ValueScale.Maximum = 50 '设置最小值
.Plot.Axis(VtChAxisIdY).ValueScale.Minimum = 0 '设置每格为 1
.Plot.Axis(VtChAxisIdY).ValueScale.MinorDivision = 1'增加测试数据
.ColumnCount = 1
.ShowLegend = False
'标记每个点的值
For i = 1 To .Plot.SeriesCollection.Count
.Plot.SeriesCollection(i).DataPoints(-1).DataPointLabel.LocationType = VtChLabelLocationTypeAbovePoint
Next
If rs.RecordCount > 0 Then
rs.MoveFirst
Else
Exit Sub
End If
For i = 0 To rs.RecordCount - 1
.RowCount = rs.RecordCount
.Row = i + 1
日期"))
温度")
rs.MoveNext
Next
End With
End Sub
End Sub
Private Sub Quit_Click()
If MsgBox("您确定要退出精密温度计检测系统吗?", vbYesNo, "提示") = vbYes Then '退出系统确认框
End
End If
End Sub