用VB制作一个简单的压力值采集显示的上位机制作总结.docx
《用VB制作一个简单的压力值采集显示的上位机制作总结.docx》由会员分享,可在线阅读,更多相关《用VB制作一个简单的压力值采集显示的上位机制作总结.docx(24页珍藏版)》请在冰点文库上搜索。
用VB制作一个简单的压力值采集显示的上位机制作总结
GCCX上位机制作总结
本系统的上位机制作主要采用MicrosoftWordVisualBasic6.0编写。
主要实现将采集和传输的数据进行接收、处理和储存的功能。
一、基本思路如下所示:
开始
从串口接收数据
数据实时显示
将数据存储到数据
库中,并实现查询
结束
由上图可以知道,本程序的三个要点分别是:
1、数据的接收部分,主要指将传到串口的数据进行接收,这是后面步骤的前提与基础。
2、数据的处理部分,将接收到的数据进行实时处理与绘制曲线图,并对超过警戒值的数据给予提示。
3、数据的储存部分,指对接收处理过的数据按照一定的格式存储到access2007数据库中,以便以后查询,也为分析列车运行规律以及螺丝生产厂家提供真实可贵的资料。
总体思路是先分别实现三个部分对应的功能,再将三个部分有机联合起来形成功能完善的上位机系统。
二、分别实现三个部分的制作过程及成果
第一部分,从串口接收数据。
主要用到的是MSComn控件(
)实现串口通信。
其测试设计界面如下图所示:
其中MSComn控件的属性设置为:
程序如下:
测试便可实时显示串口传输的数据。
即实现了从串口接收数据。
第二部分,数据的实时显示部分。
这个部分的测试与制作的思路是采用随机函数产生数据并与时间控件(
)配合来模拟所收集的数据,对其进行实时绘图。
测试设计界面:
程序如下:
OptionExplicit
DimDataFromComyAsInteger'从串口读过来的实时值y坐标
DimDataFromComLastyAsInteger'上次的串口值y坐标
DimTimeCountAsInteger
DimiAsInteger
PrivateSubCommand1_Click()’返回按钮
UnloadMe
EndSub
PrivateSubForm_Load()
PicScalePic'调整图像框的坐标系
zuobiaoxiPic'画出坐标系
PicMidleLinePic'在图像框中画一条中线
EndSub
PrivateSubPicScale(picXAsPictureBox)'调整图像框的坐标系
picX.Scale(0,picX.ScaleHeight)-(picX.ScaleWidth,0)
EndSub
PrivateSubPicMidleLine(picXAsPictureBox)
'在图像框中画一条中线
picX.Line(0,1000)-(picX.ScaleWidth,1000),vbGreen
'画出中线
EndSub
PrivateSubzuobiaoxi(picXAsPictureBox)'表示坐标系
Dimi%
picX.Line(0,0)-(picX.ScaleWidth,0),vbWhite'x坐标轴表示
picX.Line(0,0)-(0,-picX.ScaleHeight),vbWhite
'y坐标轴表示
Fori=0TopicX.ScaleWidthStep1000'X,y轴坐标坐标刻度显示picX.Line(0,i)-(100,i)
picX.Line(i,0)-(i,100)
Nexti
EndSub
PrivateSubDrawRealLine(picXAsPictureBox,DataFromComyAsInteger,DataFromComLastyAsInteger,TimeCountAsInteger)
IfTimeCount-1>0Then
picX.Line(TimeCount-100,DataFromComLasty)-(TimeCount,DataFromComy),vbWhite
EndIf
EndSub
PrivateSubTimer1_Timer()
DataFromComLasty=DataFromComy
Randomize
DataFromComy=Int((2000-0+1)*Rnd+0)'随机数的产生
TimeCount=TimeCount+100
IfTimeCount-100>=Pic.WidthThen
TimeCount=0
Pic.Cls
PicMidleLinePic
zuobiaoxiPic
EndIf
DrawRealLinePic,DataFromComy,DataFromComLasty,TimeCount'画出实时的曲线
EndSub
测试结果如下:
至此,由数据的实时绘图部分的测试完成。
第三部分,数据库的操作,数据库采用access2007数据库。
并采用VisualBasic的ADOData控件(
)进行连接和SQL语言实现数据库的添加,删除和查阅等基本功能。
(本实验以姓名、性别、年龄的操作为例)
测试设计界面:
创建数据库mydb如下:
首先是数据库的连接:
利用ADO控件生成字符串连接数据库的步骤为:
1)右击data控件,选择ADODC属性
2)点击生成,选择数据库类型
3)填写数据源
4)测试连接
其次是数据库操作:
1)添加:
DimrsAsNewADODB.Recordset
DimcnAsNewADODB.Connection
PrivateSubOpenConn()
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.CursorLocation=adUseClient
cn.Open
"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:
\Users\Administrator\Desktop\GCCX\数据库\mydb.accdb;PersistSecurityInfo=False"
EndSub
PrivateSubCloseConn()
Ifrs.State<>sckclosedThenrs.Close
Setrs=Nothing
Ifcn.State<>sckclosedThencn.Close
Setcn=Nothing
EndSub
PrivateSubCommand1_Click()
CallOpenConn
rs.Open"select姓名,性别,年龄from表1",cn,adOpenStatic,adLockPessimistic
rs.AddNew
rs.Fields("姓名")=Text1.Text
rs.Fields("性别")=Text2.Text
rs.Fields("年龄")=Text3.Text
rs.Update
CallCloseConn
MsgBox"添加成功!
",,"温馨提示"
Text1.Text=""
Text2.Text=""
Text3.Text=""
EndSub
PrivateSubCommand2_Click()
UnloadMe
EndSub
PrivateSubCommand3_Click()
UnloadMe
Form3.Show
EndSub
PrivateSubCommand4_Click()
Form5.Show
UnloadMe
EndSub
结果:
2)删除:
PrivatecnAsNewADODB.Connection
DimrsAsNewADODB.Recordset
PrivateSubOpenConn()
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.CursorLocation=adUseClient
cn.Open
"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:
\Users\Administrator\Desktop\GCCX\数据库\mydb.accdb;PersistSecurityInfo=False"
EndSub
PrivateSubCloseConn()
Ifrs.State<>sckclosedThenrs.Close
Setrs=Nothing
Ifcn.State<>sckclosedThencn.Close
Setcn=Nothing
EndSub
PrivateSubCommand1_Click()
CallOpenConn
rs.Open"selectIDfrom表1WhereID="&Text1.Text,cn,3,3
rs.Delete
rs.Update
rs.Close
Setrs=Nothing
MsgBox"删除成功",,"Successful!
"
cn.Close
EndSub
PrivateSubCommand2_Click()
Form3.Show
UnloadMe
EndSub
结果:
3)查看:
PrivatecnAsNewADODB.Connection
DimrsAsNewADODB.Recordset
PrivateSubOpenConn()
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.CursorLocation=adUseClient
cn.Open"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:
\Users\Administrator\Desktop\GCCX\数据库\mydb.accdb;PersistSecurityInfo=False"
EndSub
PrivateSubCloseConn()
Ifrs.State<>sckclosedThenrs.Close
Setrs=Nothing
Ifcn.State<>sckclosedThencn.Close
Setcn=Nothing
EndSub
PrivateSubCommand1_Click()
CallOpenConn
rs.Open"selectID,姓名,性别,年龄from表1WhereID="&Text1.Text,cn,adOpenStatic,adLockPessimistic
Text2.Text=rs.Fields("姓名")
Text3.Text=rs.Fields("性别")
Text4.Text=rs.Fields("年龄")
rs.Update
CallCloseConn
EndSub
PrivateSubCommand2_Click()
Form1.Show
UnloadMe
EndSub
结果:
至此,上位机的三个部分的关键问题已经解决。
三、上位机各部分的有机连接
为了实现上位机接收、处理、储存数据的功能,需要将上述三个部分结合为一个整体,但由于数据采集和无线传输部分还未完全贯通,第一部分的串口通信无法进行测试。
于是仅实现了数据库操作与实时绘图的结合。
其包括:
①随机函数产生数据并与时间控件结合代替串口通信部分。
②数据实时绘图和过低值警报。
③数据实时存储。
④原始记录查询。
实验设计界面:
程序设计:
OptionExplicit
DimkAsInteger
DimDataFromComyAsInteger'从串口读过来的实时值y坐标
DimDataFromComLastyAsInteger'上次的串口值y坐标
DimTimeCountAsInteger
DimiAsInteger
DimrsAsNewADODB.Recordset
DimcnAsNewADODB.Connection
PrivateSubOpenConn()
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.CursorLocation=adUseClient
cn.Open"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:
\Users\Administrator\Desktop\GCCX\数据库\mydbnew.accdb;PersistSecurityInfo=False"
EndSub
PrivateSubCloseConn()
rs.Close
cn.Close
Setrs=Nothing
Setcn=Nothing
EndSub
PrivateSubForm_Load()
PicScalePic'调整图像框的坐标系
PicMidleLinePic
zuobiaoxiPic
EndSub
PrivateSubPicScale(picXAsPictureBox)
'调整图像框的坐标系
picX.Scale(0,picX.ScaleHeight)-(picX.ScaleWidth,0)
EndSub
PrivateSubPicMidleLine(picXAsPictureBox)
'在图像框中画一条中线
picX.Line(0,1500)-(picX.ScaleWidth,1500),vbRed
'画出中线
EndSub
PrivateSubzuobiaoxi(picXAsPictureBox)'表示坐标系
Dimi%
picX.Line(0,0)-(picX.ScaleWidth,0)'x坐标轴表示
picX.Line(0,0)-(0,-picX.ScaleHeight)'y坐标轴表示
Fori=0TopicX.ScaleWidthStep1000
'X,y轴坐标坐标刻度显示
picX.Line(0,i)-(100,i)
picX.Line(i,0)-(i,100)
Nexti
EndSub
PrivateSubDrawRealLine(picXAsPictureBox,DataFromComyAsInteger,DataFromComLastyAsInteger,TimeCountAsInteger)
IfTimeCount-1>0Then
picX.Line(TimeCount-100,DataFromComLasty)-(TimeCount,DataFromComy),vbGreen
EndIf
EndSub
PrivateSubTimer1_Timer()
Ifk=1Then
DataFromComLasty=DataFromComy
Randomize
DataFromComy=Int((3000-0+1)*Rnd+0)
'随机数的产生
IfDataFromComy<1500Then
MsgBox"螺丝压力值偏低!
",48,"警告"
EndIf
TimeCount=TimeCount+100
'向数据库实时存放数据
CallOpenConn
rs.Open"select时间,力from表1",cn,adOpenStatic,adLockPessimistic
rs.AddNew
rs.Fields("时间")=TimeCount
rs.Fields("力")=DataFromComy
rs.Update
CallCloseConn
IfTimeCount-100>=Pic.WidthThen
TimeCount=0
Pic.Cls
PicMidleLinePic
zuobiaoxiPic
EndIf
DrawRealLinePic,DataFromComy,DataFromComLasty,TimeCount'画出实时的曲线
EndIf
EndSub
PrivateSubCommand1_Click()
Command3.Enabled=False
k=1
EndSub
PrivateSubCommand2_Click()
Command3.Enabled=True
k=0
EndSub
PrivateSubCommand3_Click()
Form2.Show
UnloadMe
EndSub
PrivateSubCommand4_Click()
UnloadMe
EndSub
实验结果:
查询功能:
DimrsAsNewADODB.Recordset
DimcnAsNewADODB.Connection
PrivateSubOpenConn()
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.CursorLocation=adUseClient
cn.Open"Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:
\Users\Administrator\Desktop\GCCX\数据库\mydbnew.accdb;PersistSecurityInfo=False"
EndSub
PrivateSubCloseConn()
rs.Close
cn.Close
Setrs=Nothing
Setcn=Nothing
EndSub
PrivateSubCommand1_Click()
CallOpenConn
rs.Open"select时间,力from表1Where时间="&Text1.Text,cn,adOpenStatic,adLockPessimistic
Ifrs.EOFAndrs.BOFThen
MsgBox"您所查询的时间没有记录",,"温馨提示"
Text1.Text=""
Text1.SetFocus
Else
Text2.Text=rs.Fields("力")
rs.Update
EndIf
CallCloseConn
EndSub
PrivateSubCommand2_Click()
Text1.Text=""
Text2.Text=""
Text1.SetFocus
EndSub
PrivateSubCommand3_Click()
Form1.Show
UnloadMe
EndSub
结果: