毕业设计(论文)-用VB语言编写短信控制器的上位机控制软件.doc_第1页
毕业设计(论文)-用VB语言编写短信控制器的上位机控制软件.doc_第2页
毕业设计(论文)-用VB语言编写短信控制器的上位机控制软件.doc_第3页
毕业设计(论文)-用VB语言编写短信控制器的上位机控制软件.doc_第4页
毕业设计(论文)-用VB语言编写短信控制器的上位机控制软件.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕 业 设 计设计题目:用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语言编写短信控制器的上位机控制软件xxx(电子与电气工程学院 电气工程及其自动化 2006级1班)摘 要:本文介绍了运用vb语言编写的短信控制器的上位机控制软件,着重讲述了它的设计思路,给出了该软件的设计框图和vb程序的部分源代码,形成了正确的可执行文件。关键词:vb;控制软件;短信控制器;设计programming a control software of short message controller for upper computer in the vb languagewang chengcheng(college of electric and electronic engineering, electric engineering and its automation, class1 grade2006, 062312334)abstract: 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论