资源描述
毕 业 设 计设计题目:用VB语言编写短信控制器的上位机控制软件 姓 名院 系电子与电气工程学院专 业电气工程及其自动化年 级2006级学 号 指导教师 2010年6月5日目 录1. 引言12. VB的发展历史和特点12.1 VB的发展历史12.2 VB的特点22.2.1 VB的语言特点22.2.2 VB的功能特点23. 短信控制器硬件简介34. 程序的设计思路及其程序框图34.1程序的原理34.2 程序的设计思路34.2.1 开始运行程序34.2.2 总控区设置34.2.3 分控制区设置34.3程序框图:45. 软件功能介绍56. 程序的部分软件代码66.1 总控区(Form4)66.2串口设置(Form12)116.3高杆灯设置(Form3)157. 总结19参考文献19致谢19鲁东大学毕业设计用VB语言编写短信控制器的上位机控制软件摘 要:本文介绍了运用VB语言编写的短信控制器的上位机控制软件,着重讲述了它的设计思路,给出了该软件的设计框图和VB程序的部分源代码,形成了正确的可执行文件。关键词:VB;控制软件;短信控制器;设计Programming A Control Software Of Short Message Controller For Upper Computer In The VB LanguageAbstract: This paper introduces a control software of short message controller for upper computer in the VB language, describes its designed thought, gives the designed software diagram and VB programs parts source code of the control software, and creates a correct executable file.Key Words: VB; control software;short message controller; design1 引言Visual Basic(VB)是在Windows环境下运行的、支持可视化编程的、面向对象的、采用事件驱动方式的结构化程序设计语言,也是进行应用系统开发最简单的、易学易用的程序设计工具。1从任何标准来说,VB都是世界上使用人数最多的语言,它源自于BASIC编程语言,其开发的应用程序的运行采用事件驱动原理。在VB代码窗口输入代码时,对于VB中的对象的属性、方法、内置的函数和已定义的自定义函数等,能自动给出拼写提示,这样可大大减少编程人员的记忆量,程序员可以轻松的使用VB提供的组件快速建立一个应用程序2 。2 VB的发展历史和特点2.1 VB的发展历史1991年,美国微软公司推出了Visual Basic(可简称VB),目前的最新版本是VB 2005(VB8)中文版。Visual 意即可视的、可见的,指的是开发像windows操作系统的图形用户界面(Graphic User Interface, GUI)的方法,它不需要编写大量代码去描述界面元素的外观和位置,只要把预先建立好的对象拖放到屏幕上相应的位置即可。Basic指的是Beginners all_purpose symbolic instruction code 初始者通用符号指令代码语言。Visual Basic有学习版、专业版和企业版三种版本,以满足不同的开发需要。5.0版以后,Visual Basic推出了中文版,与前个版本相比,其功能有了很大提升234。2.2 VB的特点2.2.1 VB的语言特点Visual Basic(以下简称VB)是运行于Windows平台下的一种可视化的高级编程语言,有以下显著的特点:1) VB继承了Basic语言简单易学的特点。2) 与基于dos环境下的编程语言相比,VB编程思想上发生了根本的改变。VB中引入了面向对象的程序设计方法,使程序设计人员从烦琐的程序设计细节中解脱出来。3) VB具有强大的数据库管理功能。4) 程序开发环境高度集成化。5) VB适应于开发视窗类应用程序。2.2.2 VB的功能特点VB开发的应用程序的运行采用事件驱动原理。程序设计人员不仅在程序设计时不需要考虑程序代码执行的先后问题,而且同一个对象可以因用户的不同操作而产生不同的结果。VB中提供的编辑器不仅提供了典型的Windows文字处理应用程序的各种功能,如剪切、复制、粘贴等,使得程序的输入和修改非常方便。而且在VB代码窗口输入代码时,对于VB中的对象的属性、方法、内置的函数、已定义的自定义函数、过程和已定义的变量等,能自动给出拼写提示,这样可大大减少编程人员的记忆量。在VB开发环境下,通过API(Application Program Interface)函数调用,可充分使用Windows提供的各种系统资源,来扩充所开发的应用程序的功能。VB全面支持Windows系统的OLE(Object Linking And Embedding)技术,因此可以方便、快捷地实现不同应用程序之间的动态数据交换。3短信控制器硬件简介GSM短信控制器只需在控制器中插入手机卡,将串口插入上位机,可以通过访问本控制器从而操作高杆灯,达到用手机短信远程控制设备的目的。 图1 短信控制器硬件4程序的设计思路及其程序框图4.1程序的原理 短信控制器的上位机软件就是在PC端,通过串口通信控制发送端发送短信而实现远程控制高杆灯亮灭的程序。能实现随时修改控制程序,以改变各灯的控制时间和工作状况,满足不同状况要求,有很强的现场应用性。4.2程序的设计思路4.2.1 开始运行程序扫描默认串口,判断是否有效,是否被占用。进入主窗口(MDIForm1),若串口无效或被占用,则更改串口设置(Form12);若串口有效,可进入总控区(Form4)开始使用。4.2.2 总控区设置 使用原有控制区,添加控制区(Form11)或删除控制区(Form10),在原来无控制区的情况下,最多可添加10个控制区。4.2.3 分控制区设置添加(Form2)、删除、设置高杆灯,查询高杆灯状态,向高杆灯发送短信形式的指令(Form3)。4.3 程序框图开始检查端口端口是否被占用NO提示:“无效端口,或端口被占用!”开始使用更改端口设置是否已有控制区YESYES进入控制区新建控制区是否已有被控对象NO新建被控对象操作被控对象NOYES退出程序图2总体程序框图5 软件功能介绍图3 总控区界面界面功能:单击菜单栏“添加控制区”和“删除控制区”来添加、删除分控制区。单击“连接设备”可以检测端口使用情况并连接短信控制器。可通过单击右键选择“串口设置”改变串口设置参数。图4 串口设置界面界面功能: 可根据实际情况修改串口设置。图5 控制区界面界面功能:单击菜单栏上“添加高杆灯”可添加高杆灯,上限为5个高杆灯。单击“设置”按钮可更改高杆灯名称、电话号码和数量。图6 高杆灯设置界面界面功能: 可更改高杆灯名称、电话号码和数量,设定灯的开启或关闭,删除高杆灯,查询高杆灯状态和发送开关指令。6程序的部分软件代码6.1 总控区(Form4)Dim s As IntegerPrivate Sub addarea_Click(Index As Integer)Form11.ShowEnd SubPrivate Sub Command1_Click(Index As Integer)Select Case Index Case 0 Form5.Caption = Command1(Index).Caption Form5.Show Case 1 Form6.Caption = Command1(Index).Caption Form6.Show Case 2 Form7.Caption = Command1(Index).Caption Form7.Show Case 3 Form8.Caption = Command1(Index).Caption Form8.Show Case 4 Form9.Caption = Command1(Index).Caption Form9.Show Case 5 Case 6 Case 7 Case 8 Case 9End SelectEnd SubPrivate Sub Command11_Click()Form11.ShowEnd SubPrivate Sub Command2_Click()Dim i As IntegerDim j As IntegerDim inputdata As StringDim dat As StringDim area() As StringDim mes() As StringDim err As Booleanerr = initGSMmode()If err = True Then MsgBox 连接成功!, 64, 提示 Call write_daily_record(成功连接发射装置!) Open App.Path & Manager.txt For Input As #1Do While Not EOF(1)Line Input #1, datIf dat Theninputdata = inputdata + datEnd IfLoopClose #1area = Split(inputdata, ;)For i = LBound(area) To UBound(area) If area(i) = Then Exit For End If mes = Split(area(i), ,) j = Val(Trim$(mes(0) If j 9 And mes(1) = true Then Command1(j).Visible = True Command1(j).Caption = mes(2) Command1(j).Enabled = True End IfNext i MDIForm1.Timer1.Interval = 1000Else Call write_daily_record(连接发射装置失败!) MsgBox 连接失败!请选择正确的端口和波特率!, 64, 提示 MDIForm1.Timer1.Interval = 0End IfEnd SubPrivate Sub delarea_Click(Index As Integer)Form10.ShowEnd SubPrivate Sub end_Click()EndEnd SubPrivate Sub Form_Load()Dim i As IntegerDim j As IntegerDim inputdata As StringDim dat As StringDim area() As StringDim mes() As StringOn Error GoTo err从文本文档中读取数据s1:Open App.Path & Manager.txt For Input As #1Do While Not EOF(1)Line Input #1, datIf dat Theninputdata = inputdata + datEnd IfLoopClose #1area = Split(inputdata, ;)For i = LBound(area) To UBound(area) If area(i) = Then Exit For End If mes = Split(area(i), ,) j = Val(Trim$(mes(0) If j 9 And mes(1) = true Then Command1(j).Visible = True Command1(j).Caption = mes(2) Command1(j).Enabled = False End IfNext iExit Suberr: Open App.Path & Manager.txt For Output As #1 Print #1, Close #1 GoTo s1End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = 2 Then 如果是鼠标右键按下时 Form4.PopupMenu mnufile, 0, x, y End IfEnd SubPrivate Sub setcom_Click()Form13.ShowEnd SubPrivate Sub 删除控制区_Click()Form10.ShowEnd SubPrivate Sub 添加控制区_Click()Form11.ShowEnd Sub6.2串口设置(Form12)Dim s As StringPrivate Sub Command1_Click()Unload MeEnd SubPrivate Sub Command2_Click()On Error GoTo errIf MDIForm1.MSComm1.PortOpen = True Then MDIForm1.MSComm1.PortOpen = FalseEnd IfDim a As Integera = Val(Mid$(Combo1.Text, 4, 1)MDIForm1.MSComm1.CommPort = aMDIForm1.MSComm1.Settings = Combo2.Text + , + Combo4.Text + , + Combo3.Text + , + Combo5.TextMDIForm1.MSComm1.PortOpen = TrueIf Check1.Value = 1 Then Open App.Path & comset.txt For Output As #1 Print #1, Close #1 s = str(MDIForm1.MSComm1.CommPort) + ; + MDIForm1.MSComm1.Settings Open App.Path & comset.txt For Output As #1 Print #1, s Close #1End IfForm4.ShowUnload MeExit Suberr:MsgBox 无效端口,或端口被占用!, 64, 提示End SubPrivate Sub Form_Load()Dim dat As StringOn Error GoTo errCombo1.AddItem (COM1)Combo1.AddItem (COM2)Combo1.AddItem (COM3)Combo1.AddItem (COM4)Combo1.AddItem (COM5)Combo1.AddItem (COM6)Combo2.AddItem (2400)Combo2.AddItem (4800)Combo2.AddItem (9600)Combo2.AddItem (19200)Combo2.AddItem (115200)Combo3.AddItem (8)Combo3.AddItem (7)Combo3.AddItem (6)Combo3.AddItem (5)Combo3.AddItem (4)Combo4.AddItem (O)Combo4.AddItem (E)Combo4.AddItem (M)Combo4.AddItem (N)Combo4.AddItem (S)Combo5.AddItem (1)Combo5.AddItem (1.5)Combo5.AddItem (2)Combo5.AddItem (4)s1:Open App.Path & comset.txt For Input As #1Do While Not EOF(1)Line Input #1, datIf dat Thens = s + datEnd IfLoopClose #1If s Then Call setcom Form4.Show Unload MeExit SubEnd IfCombo1.Text = COM + Trim$(str(MDIForm1.MSComm1.CommPort)a = Split(MDIForm1.MSComm1.Settings, ,)Combo2.Text = a(0)Combo3.Text = a(2)Combo4.Text = UCase$(a(1)Combo5.Text = a(3)Exit Suberr: Open App.Path & comset.txt For Output As #1 Print #1, Close #1 GoTo s1End SubPrivate Sub setcom()Dim str() As Stringstr = Split(s, ;)On Error GoTo errIf MDIForm1.MSComm1.PortOpen = True Then MDIForm1.MSComm1.PortOpen = FalseEnd IfDim a As Integera = Val(Trim$(str(0)MDIForm1.MSComm1.CommPort = aMDIForm1.MSComm1.Settings = Trim$(str(1)MDIForm1.MSComm1.PortOpen = TrueExit Suberr:MsgBox 无效端口,或端口被占用!, 64, 提示End Sub6.3高杆灯设置(Form3)Private Sub Command1_Click()Dim name As StringDim count As IntegerDim phone As Stringname = Trim$(Text1.Text)If name = Then MsgBox 请输入名称, 64, 提示 Exit SubEnd Ifphone = Trim$(Text2.Text)If name = Then MsgBox 请输入电话号码, 64, 提示 Exit SubEnd IfIf Text3.Text Thencount = Trim$(Text3.Text)If count 5 Then MsgBox 灯的数量必须小于或等于5, 64, 提示 Exit SubEnd IfIf count = 0 Then count = 1End IfElse MsgBox 请填入灯的数量, 64, 提示 Exit SubEnd Iflight_M(manager_index).light_N(light_index).phonenumber = phonelight_M(manager_index).light_N(light_index).nane = namelight_M(manager_index).light_N(light_index).lightcount = countIf Check1.Value = 1 Thenlight_M(manager_index).light_N(light_index).enable = TrueElselight_M(manager_index).light_N(light_index).enable = FalseEnd IfCall savelights(manager_index)MsgBox 设置成功, 64, 提示Unload MeEnd SubPrivate Sub Command2_Click()Unload MeEnd SubPrivate Sub Command3_Click()Dim msg As Integermsg = MsgBox(确定要删除?, 48 + 1, 提示)If msg = vbCancel ThenExit SubEnd IfCall dellight(manager_index, light_index)MsgBox 删除成功, 64, 提示Unload MeEnd SubPrivate Sub Command4_Click()Dim message As mesDim err As BooleanMDIForm1.Timer1.Interval = 0message.message = Trim$(Text4.Text)message.phone = Trim$(Text2.Text)err = SendMES(message)If err = True Then Call write_daily_record(向 + Trim$(Text1.Text) + ( + Trim$(message.phone) + ) + 发送 + Trim$(message.message) + 命令 + .并且发送成功!)MsgBox 发送成功!, 64, 提示Else Call write_daily_record(向 + Trim$(Text1.Text) + ( + Trim$(message.phone) + ) + 发送 + Trim$(message.message) + 命令 + .发送失败!)MsgBox 发送失败!, 64, 提示End IfTimer1.Interval = 1000End SubPrivate Sub Command5_Click()Dim message As mesDim err As Booleanmessage.message = 返回开关信息message.phone = Trim$(Text2.Text)err = SendMES(message)If err = True Then Call write_daily_record(向 + Trim$(Text1.Text) + ( + Trim$(message.phone) + ) + 发送 返回开关信息 命令 + .并且发送成功!) MsgBox 发送成功!, 64, 提示Else Call write_daily_record(向 + Trim$(Text1.Text) + ( + Trim$(message.phone) + ) + 发送 返回开关信息 命令 + .发送失败!) MsgBox 发送失败!, 64, 提示End IfEnd SubPrivate Sub Form_Load()Text1.Text = light_M(manager_index).light_N(light_index).naneText2.Text = light_M(manager_index).light_N(light_index).phonenumberText3.Text = str(light_M(manager_index).light_N(light_index).lightcount)If light_M(manager_index).light_N(light_index).enable = True Then Check1.Value = 1Else Check1.Value = 0End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer)MDIForm1.Timer1.Interval = 1000Timer1.Interval = 0End SubPrivate Sub Timer1_Timer()Dim err As BooleanDim message As mesDim i As Integererr = ScanGSMMode()If err = False Then Exit SubEnd Ifi = GSMMode.MESCountWhile i 0 message = ReadMSG(GSMMode.MESNumber(GSMMode.MESCount) If message.phone Then Text4.Text = message.message End If GSMMode.MESCount = GSMMode.MESCount - 1 i = GSMMode.MESCountWendEnd Sub7总结本设计是在熟悉掌握VB的基础上写成的,VB编程以其简约的设计风格、可视化的界面编辑和极小的体积广受程序员们的欢迎。通过本软件的设计,对VB的编程特点有了更深的理解。本程序用于控制发射端发送短信远程控制高杆灯的亮灭,能容易地随时修改控制程序,以改变各灯的控制时间和工作状况,满足不同状况要求,有很强的现场应用性。实践证明,采用短信控制器对高杆灯的自动控制是完全可行的。参考文献1 李雁翎.Visual Basic程序设计M.北京: 清华大学出版社, 2004.2 陈元春,王淮亭,陶恂. Visual Basic数据库编程M.北京: 高等教育出版社, 2003.3 王国荣编著. Visual Basic 6.0 Windows API 讲座M. 北京: 人民邮电出版社, 1999.4 龚沛曾. Visual Basic简明教程M.北京: 高等教育出版社出版, 2003.5 何光渝编著. Visual Basic 常用数值算法集M.北京: 科学出版社, 2002.6 李勇帆. Visual Basic 6.0 程序设计实践指导M.北京: 人民邮电出版社, 2006.7 史斌星,史佳. Visual Basic 贯通教程M.北京: 清华大学出版社, 2003.8 张健主编. Visual Basic 6.0程序设计M.江苏: 浙江大学出版社, 2007.9 李长林编著. Visual Basic 串口通信技术与典型实例 M.北京: 清华大学出版社, 2006.致谢本文是在*老师的悉心指导下完成的,我要感谢我的指导老师*老师对我毕业设计的悉心指导和热诚的帮助,同时还要向在完成设计论文过程中给我提供帮助的*同学致以最诚挚的谢意。老师的严谨、同学的互助深深地影响了我,才使我能够顺利地完成此次毕业设计,获益匪浅。再次感谢他们!20
展开阅读全文