二维点样平台设计毕业0992605_第1页
二维点样平台设计毕业0992605_第2页
二维点样平台设计毕业0992605_第3页
二维点样平台设计毕业0992605_第4页
二维点样平台设计毕业0992605_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、淮南师范学院2014届本科毕业论文毕业论文(设计)论文题目:二维点样平台设计目 录前 言21 总体方案设计21.1 总体方案实现框图21.2 软硬件开发环境和工具32 二维点样平台上位机设计32.1 visual basic语言概述32.2 程序编写42.3 错误处理和调试102.4 程序发布113 二维点样平台下位机设计113.1 单片机硬件电路设计113.2 单片机软件程序设计134 系统测试164.1 上位机串口通信测试164.2 下位机电路和通信测试175 总结18参考文献:183 淮南师范学院2014届本科毕业论文二维点样平台设计学生:胡大千(指导老师:苗磊)(淮南师范学院电气信息工

2、程学院)摘 要:二维点样在各行各业中都得到重要的运用,其工作原理是上位机通过控制步进电机在x、y方向的拍数比实现对二维空间的精确定位并进行点样。本课题以vb6.0为平台并通过与上位机的通讯实现点样定位控制和对点样进程进行模拟实现。关键字:点样;步进电机;上位机;vb;通讯two-dimensional point sample platformstudents: hu daqian(guidance teacher: miao lei)(college of electrical and information engineering ,huainan normal university)ab

3、stract:two-dimensional point sample is important in all walks of life, its working principle is the upper machine by controlling step motor than the number of beats in the x, y direction implementations are precise positioning and of two-dimensional space. this topic in vb6.0 by use of the platform

4、and through communication with pc to realize the control and the positioning of the sample points simulated implementation sample process.key words:sample points; stepping motor; pc; vb; communication前 言随着科学技术的不断进步,机械产业朝着微型化,精密化发展,零件的微小化与运动位移的高速化、衡量化是未来的主要研究方向之一,其精准的位置控制即准确无误的定位技术显得日益重要。因此,开发功能实用,定位

5、精确度高的定位平台运动系统具有广阔的应用前景。二维点样平台作为空间三维定位的重要组成部分,也可以说是二维定位平台在国内外取得了较快的发展。二维定位平台是完成x、y维精确定位的工作平台。它在微机电系统、微电子、纳米制造、纳米电子及航空航天等众多高科技领域都发挥着重要作用,随着科技的进步,这种重要性日益增强。生活中常见的一些机器如电子厂车间的高速机、点胶机等。在日常生活中我们能过接触最多最常见的二维点样平台也就是车间的点胶机了,点胶机是一种对流体进行控制并将流体进行点滴、涂覆于产品表面或产品内部的自动化机器。可实现二维、三维的路径点胶,能够高效精准的进行点胶。其应用的行业也非常的宽广,可以在电子行

6、业中进行手机按键点胶,手机电池封装,光学器件加工等;在工业电气方面可以对电容,变压器,继电器,按钮等进行粘接灌封,对电机线圈进行涂胶,对电器柜门进行封边涂胶。本设计就是以我在联宝实习期间对点胶机的操作进行实际的理论验证而设计一个基于vb平台的二维点样平台。用vb设计上位机软件控制界面,能够设置待点样行数、列数及行列间距,并对点样进程进行模拟。设计相应插补算法。单片机通过串口通信接收上位机所给的坐标控制x、y步进电机,实现点样定位控制。1 总体方案设计1.1 总体方案实现框图本设计分两部分设计,一部分是基于visual basic的二维点样平台的设计,另一部分是基于51单片机的下位机设计,两者之

7、间通过串口通信。系统框图如图1所示。图1 系统框图 上位机设计部分主要是设置相应的控制界面(打开串口、手动点样、自动点样)和实现串口通信,当手动点样、自动点样或回原点操作时,会通过串口将相应的x轴和y轴的坐标值传给下位机。为了直观看到坐标位置和移动轨迹,在上位机上设计了二维坐标显示区。下位机是由51单片机控制一个系统,当接收到串口数据时,对数据进行分析,提取出上位机发送的坐标值,驱动x轴和y轴步进电机,实现二维点样。51单片机的串口通信部分利用51单片机内部的串口资源与外部串行端口电平转换电路(即rs232)来实现。1.2 软硬件开发环境和工具软件开发环境包括microsoft visual

8、basic 6.01 15 21和keil uvision c51 v4.12。硬件开发环境是proteus 7.8 sp24。调试工具包括virtual serial port driver 6.9和串口调试助手v1.0。visual basic是microsoft公司开发的一种“可视化”的windows应用程序开发工具。microsoft visual basic 6.0是用来开发上位机的平台。keil uvision c51是一种兼容单片机c语言软件开发的系统,是由德国keil software公司(arm公司之一)出品。包含标准的keil c编译器、宏汇编器、调试器、实时内核、单板计算

9、机和仿真器,支持所有的251系列微控制器。在本设计中使用keil c51是对51单片机程序进行编译、调试和下载2 5 7 9。proteus软件是英国lab center electronics公司出版的eda工具软件。它既具有其它eda工具软件的仿真功能,又能仿真单片机及外围器件。可以说是目前最好的单片机仿真软件。本设计中利用proteus在单片机中加载keil生成的hex文件对步进电机的运动进行模拟。为了让上位机发送的数据能够传送给proteus仿真的单片机,这里选用virtual serial port driver 6.9软件,它可以模拟串口通信,虚拟出一对串口,这样两者之间就无需物理

10、连接,即可以串口的形式进行通信4 12。串口调试工具很多,本系统采用常用的串口调试助手v2.1,其功能简单,在本系统设计中主要用来调试上位机程序和测试下位机的串口通信功能。2 二维点样平台上位机设计2.1 visual basic语言概述visual basic是一种语言简单、易学、易用的软件,适用于开发windows环境下的各类应用程序,并增加了结构化、可视化程序设计语言的功能,引入了“面向对象”和“事件驱动”等先进思想,支持activex控件(用于web或其它支持这一技术的程序中)、vbs(vbscript,vb的脚本语言,用于web开发)和vba(vb for application,嵌

11、入式vb语言,用于对一些流行软件进行二次开发),对网络、多媒体和数据库的编程有良好的支持,拥有完全的中文界面和帮助系统1 15 21。visual basic6.0主要有以下几个特点:编程可视化、面向对象的程序设计、事件驱动的编程机制,以及结构化的程序设计。visual basic的可视化设计工具可以把windows界面设计的复杂性“封装”起来,利用visual basic提供的各种设计工具,程序开发人员只需按照程序界面的设计要求,在窗体中画出各种“控件”,并设置这些对象的属性,这样程序设计人员就不需要为界面设计编写代码而浪费时间,只需要编写实现程序功能代码。因此,程序设计的效率会大大提高。面

12、向对象的程序设计语言将整个现实世界或者其中的一部分看作是由不同种类的对象构成的。各种类型的对象之间通过发送消息进行联系,消息能够激发对象作出相应的反应,从而构成一个运动的整体。visual basic属于事件驱动的编程机制,由事件控制着程序运行的流向。事件是可以由窗体或控件识别的操作。在响应事件时,事件驱动应用程序执行指定的代码。visual basic是一种接近自然语言和人类的逻辑思维方式并具有结构化程序设计的控制结构。1966年,bohra和jacopini提出了结构化程序设计的三种基本结构,即顺序结构、选择结构和循环结构。这三种基本结构是visual basic程序设计的核心。2.2 程

13、序编写该部分利用vb设计上位机控制平台,实现手动和自动设置待点样行列数;实现回原点操作,模拟显示点样当前位置和运动轨迹,设置的坐标值能通过串口通信发送到下位机,下位机在对步进电机进行驱动运行后能将相应的坐标返回给上位机实现点样定位控制并将相应的坐标在二维坐标显示区显示出来。2.2.1 创建标准项目文件本设计需要创建一个基于standard.exe的项目。先打开visual basic 6.0,然后打开“文件”中的“新建工程”,然后选择新建“标准exe”即可,如图2所示。这样就创建了一个标准exe的项目文件1。图2 创建标准exe项目文件2.2.2 加入串口通信控件mscomm控件是micros

14、oft公司为了简化windows下串行通信编程而提供的一种activex控件,它为应用程序提供了通过串行接口收发数据的简便方法。mscomm控件给出事件驱动和查询两种方式。事件驱动有程序响应及时的优点,开发者只需在每个事件中添加自己的程序。查询方式在某些情况下更便捷,但其实质也是事件驱动。程序的每个关键功能之后,可以通过查询commevent属性值来查询事件和错误。默认的控件工具栏没有mscomm控件,因此需要打开菜单栏“工程”下面的“部件”(跳出如图3所示的对话框,找到“microsoft comm control 6.0”,点击确定完成添加)将mscomm控件加到工具栏中。图3 添加msc

15、omm控件mscomm控件的许多属性都是需要开发者根据自己的需要进行设置。将mscomm控件添加到工程的form框中,点击mscomm控件即可在右边的属性栏对其进行设置。mscomm控件有许多重要的属性,如commport设置端口号;settings设置波特率、奇偶检验、数据位和停止位;portopen设置并返回通信端口的状态,也可以打开或关闭端口;input从接收缓冲区返回或删除字符;output向传输缓冲区写一个字符串。根据本设计需要,设置端口号commport固定为4,settings设置为“9600,n,8,1” 12。2.2.3 设计程序主界面visual basic最大的好处就是他

16、的可视化。对于主界面的设计,只需要选择需要的工具在fram上添加、移动,操作简单方便。选择frame在窗体上分出四个部分,分别是串口通信、手动点样、自动点样和点样坐标显示。“打开端口”、“回原点”以及上下左右移动坐标等按钮采用commandbutton工具。坐标输入和坐标显示采用textbox工具。为了直观显示端口连接状态,本设计使用shape工具画了一个圆点,当未连接的时候显示黑色,处于连接状态的时候显示绿色。为了实时且直观展示坐标所在位置,本设计用picturebox工具,在其上面画出坐标和显示当前坐标的圆点。主界面设计如图4所示。图4 主界面设计坐标的实现是使用visual basic的

17、画线功能。scale 用来定义刻度,例如picture1.scale (-10,,110)-(110, -10),定义左上角座标为(-20,120),右下角座标为(110,-20)。line用来画线,例如picture1.line (0, 0)-(110, 0), vbblack,这句话是在(0,0)坐标和(110,0)坐标之间画一条白色的线。drawwidth 用来定义线宽。picture1的坐标程序如下所示:picture1.clspicture1.scalemode = 5 picture1.scale (-10, 110)-(110, -10)绘横坐标picture1.drawwidt

18、h = 2picture1.line (0, 0)-(110, 0), vbblackpicture1.drawwidth = 1picture1.line (0, 10)-(100, 10), vbwhitepicture1.line (0, 20)-(100, 20), vbwhite 绘坐标纵线picture1.drawwidth = 2picture1.line (0, 0)-(0, 110), vbblackpicture1.drawwidth = 1picture1.line (10, 0)-(10, 100), vbwhitepicture1.line (20, 0)-(20,

19、100), vbwhite指定位置显示原点opicture1.currentx = -5picture1.currenty = 0picture1.print o2.2.4 参数输入和控制实现本点样控制平台的使用必须先打开端口,只有串口设备号和本平台的设备号一致时才能进行通信。当用户点击“打开端口”时,先检查端口号是否存在或者已经被打开。当端口号正确之后将端口打开,即mscomm1.portopen = ture,改变圆点的颜色为绿色,指示端口已经被打开,并且按键名称更改为“关闭端口”。如果端口不正确,那么根据错误代码,跳出消息框提示用户错误原因。端口控制的代码如下所示:private sub

20、 command5_click()if command5.caption = 关闭端口 then mscomm1.portopen = false command5.caption = 打开端口 shape1.fillcolor = rgb(0, 0, 0)else if test_com(4) = true then mscomm1.portopen = true command5.caption = 关闭端口 shape1.fillcolor = rgb(0, 255, 0) end ifend ifend sub检测端口号函数private function test_com(com_n

21、um as integer) as boolean if command5.caption = 打开端口 then on error goto comm_error mscomm1.commport = com_num 这里接收传入的串口号 mscomm1.portopen = true mscomm1.portopen = false test_com = true 如果返回1,表示串口可用 exit functioncomm_error: if err.number = 8002 then msgbox 串口不存在,请配置串口号为com4! elseif err.number = 8005

22、 then msgbox 串口已打开! else msgbox 其它错误 end if test_com = false 如果出错,则返回0 exit function resume next end ifend function上下左右移动按钮和回原点按钮控制原理一样,即当有click点击事件时,改变坐标的值,如“y+”按钮被按下时,那么将当前坐标的y轴坐标加一,然后将改变后的坐标值发送出去。为了在上位机上直观看到坐标的移动轨迹,那么需同时移动坐标圆点的位置以及更改textbox中的坐标值。圆点的移动用move函数,如point1.move 20, 30是将point1点的left移动到20

23、刻度处,top移动到30刻度处。数据的发送使用mscomm控件output属性。每次点击操作需要发送xy两个数值,所以首先定义两个字节:dim sendbyte(1) as byte。本系统设计x轴和y轴坐标都在0-100以内,为了方便下位机区分接收到的数据,发送之前将x轴坐标值和十六进制h80相“与”,这样x轴数据最高位为1,y轴数据最高位为0,下位机就可以通过数据的最高位来判断收到的数据是x轴坐标还是y轴坐标。这种做法对下位机来说省去了繁琐的数据解析工作,简单方便。具体的代码如下所示:private function sendxy(xv as integer, yv as integer)

24、 as boolean 发送xy坐标 sendxy = false if mscomm1.portopen then sendbyte(0) = xv or &h80 sendbyte(1) = yv mscomm1.output = sendbyte sendxy = true end ifend function自动采样需要用户输入三组坐标值,然后点击开始,数据每隔一秒发送一组,同时移动二维坐标显示区的圆点,并显示坐标移动轨迹。因为需要定时每秒发送一次,所以这里用了一个定时工具timer。timer的interval用来设置定时时间,单位为毫秒,本设计设置为1000,也就是一秒中断一次。当

25、用户输入三组数据并点击“开始”按钮之后,会打开定时器,延时时间到的时候进入timer函数,在该函数中每秒发送一组坐标,三组发送完成之后关闭定时器。此外,对三组数据的输入进行限制,当输入为空或者大于100则跳出消息框提示用户输入正确的数值,错误提示如图5所示。图5 输入超出范围报错2.3 错误处理和调试界面和代码编写完成并不代表工作的结束,最艰苦的就是对完成的程序的处理和调试。错误通常有语法错误、运行错误和逻辑错误。语法错误很容易修改,对于运行错误和逻辑错误,可以根据visual basic的错误提示进行修改。举个例子来说,如果mscomm控件的settings设置为“9600,n,9,1”,运

26、行时会报错,跳出对话框“invalid property value”。 有时候捕获了错误代码,但是不应该只向用户显示错误信息代码,而且大多数额用户是不知道这些错误代码的含义。为了将错误代码翻译成对改错误的描述,可以将捕获的错误代码传给visual basic提供的error函数,在给函数完成对错误代码的解释。在本设计中,当打开不存在的端口时会捕获到错误代码8002,这个错误号的含义是无效的端口号(comportinvalid)。在本程序中是这么处理的:on error goto comm_errorcomm_error: if err.number = 8002 then msgbox 串口

27、不存在,请配置串口号为com4!2.4 程序发布调试好程序之后,虽然没有错误出现,但该应用程序还只是源文件,只能在visual basic的编译环境中运行,因此需要制作成可执行文件。visual basic很容易生成“.exe”文件。方法是选择“文件”菜单下的“生成make project1.exe”选项,在跳出来的对话框中修改文件名,然后确认即可,这样就完成了二维点样平台上位机的开发工作了1。3 二维点样平台下位机设计3.1 单片机硬件电路设计点样平台下位机以at89c51单片机为控制核心,串口通信模块用来接收上位机发送的坐标数据,外加两个步进电机用来模拟点样平台的二维电机控制。下位机驱动步

28、进电机运动流程图如图6所示图6下位机控制步进电机流程图3.1.1 51单片机最小系统at89c51是应用广泛的8位单片机,它拥有4k的flash,128字节的ram,两个16位的定时器,可编程串行中断,以及低功耗闲置和掉电模式。at89c51单片机最小系统包括单片机主控、时钟电路和复位电路。如图7所示。时钟电路选用外部12m晶振,并联两个30pf的电容帮助起振。复位电路是由电阻、电容和按键组成的上电复位和按键复位。图7 单片机最小系统为了直观显示系统运行状态和步进电机运行状态,本设计中添加了三个led指示灯,用来指示运行状态,如图8所示。图8led状态指示灯3.1.2 串口通信电路rs232接

29、口上通信时要12v的电压才能识别,也就是高低电平为12v和0v,但是51单片机的高低电平为5v和0v,所以单片机和电脑的串口通信需要高平转换。实际的电路中需要加入电平转换芯片,如max232或pl2303。本设计使用proteus仿真,protues带有串口仿真元件compim,它集成了ttl-rs232电路的。设好波特率即可实现串口通信。为了查看单片机串口通信数据,仿真中加入virtual terminal虚拟终端。该部分电路如图9所示。图9 串口通信电路3.1.3 二维步进电机电路为了模拟二维坐标电机的转动,本系统设计了两组步进电机,x轴步进电机和y轴步进电机。由于单片机驱动能力有限,最大

30、只有25ma,需要外加驱动电路。uln2003 是高耐压、大电流复合晶体管阵列,由七个硅npn 复合晶体管组成。当输入5v电压时,输出电流高达500ma。所以本设计选uln2003 驱动四线制步进电机。设计电路如图10所示。图10 步进电机驱动电路3.2 单片机软件程序设计单片机软件部分主要是串口通信程序、步进电机控制程序和接收到数据后的逻辑处理和控制程序。3.2.1 51单片机串口程序51单片机内部有一个可编程的双向全双工串行通信接口。该接口有4种工作方式,以适用于不同场合。波特率由单片机内部的定时器/计数器产生,可以用软件进行设置。 51单片机内部的串口拥有两个物理上相互独立的接收、发送缓

31、冲器sbuf,可以同时接收和发送数据,两个缓冲器占用同一个地址(99h)。本设计选用波特率9600bit/s,根据12m时钟晶振算出装载值,并且开启接收中断。接受到数据时进去进去中断函数进行相应的处理。串口初始化代码如下收中断。当接收到数据时进去中断函数进行相应的处理。串口初始化代码如下:void init() tmod=0x20; /定时器1工作方式2 th1=0xfd; /装载初值,波特率设置为9600tl1=0xfd; tr1=1; /启动定时器1sm0=0; /设置串口工作方式1 sm1=1;ren=1; /允许串口接收ea=1; /开总中断es=1; /开串口中断串口产生接收中断,r

32、i硬件置位,在串口接收中断函数里必须软件清除接收中断标志。接收中断入口函数如下所示:void ser()interrupt 4ri=0; /接受中断标志位 3.2.2 步进电机程序步进电机工作原理简单,本设计中选用四线制步进电机,每一条线导通,步进电机会旋转一个角度,如果顺序导通,那么电机就会正转。如果逆序导通,那么电机反转,通过改变线线之间导通时间可以改变转速。本设计的步进电机可以通过坐标判断而相应的正转或翻转。电机驱动函数如下:void stepx(char xy, char m, char n);该函数有三个参数,第一个参数xy用来选择电机,xy为1的时候控制x轴电机,xy为2的时候控制

33、y轴电机;第二个参数m是调整的角度;第三个参数n是选择正转反转,n为1时正转,n为0时反转。3.2.3 控制逻辑程序该部分是通过对串口接收到的数据进行解析,然后驱动步进电机的转动。串口接收到数据时会触发接收中断,在中断函数里不做处理,只把它存到一个队列里,主函数判断到队列中有数值的时候会依次读取,并判断数值是x轴坐标数据还是y轴坐标数据。x轴y轴的判断是通过数据的最高位来判断的,因为在设计上位机的时候,考虑到数据在0-100之间,可以通过最高位来标识,如果是x轴坐标数据那么把最高位置1,否则置0。这样单片机处理起来就简单方便多了,单片机接到数据之后将最高位去除,然后送给相应的步进电机就可以了。

34、步进电机的控制是由步进电机的当前坐标值和接收到的新的坐标值决定的,如果新的坐标值大于当前坐标值,那么正转,否则反转。转动的角度即是当前值和接收的坐标值之间的差值。因为步进电机旋转需要时间,而上位机可能会连续发送多个数据,所以需要定义一个队列,用来存储上位机发送过来的数据,在主函数中进行读取和控制。队列的定义:#define len 20 /队列长度uchar valuelen; /存数数组uchar head = 0; /队列头uchar tail = 0; /队列尾uchar cnt = 0; /队列中的数据个数在接收中断程序中将数据存入队列,程序如下:void ser()interrupt

35、 4ri=0; /清除接受中断标志位if(cnt len)valuetail=sbuf;if(+tail = len)tail = 0;cnt+;程序中还设计了三个led状态指示灯,系统运行时打开led1,x轴步进电机运行时打开led2,y轴步进电机运行时打开led3,停止运行时关闭相应的led。 4 系统测试4.1 上位机串口通信测试使用virtual serial port driver 6.9虚拟出一对串口,将com3和com4连接起来,这样就可以在电脑上进行串口通信测试了4。如图11所示。图11虚拟串口软件使用串口调试助手和本课题设计的串口控制平台进行通信,查看通信是否正常,测试图如图

36、12所示。图12 上位机平台和串口调试助手通信测试 经测试,二维点样平台和串口调试助手通信正常。手动采样、自动采样和回原点操作都能发送出正确的二维坐标数值。4.2 下位机电路和通信测试验证二维点样平台功能正常之后,使用它和单片机进行通信。单片机启动仿真按钮,上位机测试手动发送、自动发送和回原点操作,测试发送数据是否正确,数据接收是否正确,电机转动是否正常,以及指示灯状态是否正常12。判断单片机接收到的数据是否和上位机发送的一致,可以打开virtual terminal观察,串口接收到的数据可以实时的显示出来。测试如图13所示。图13 上位机和单片机通信测试当有数据接收到时,可以看到步进电机转动

37、和led状态灯点亮,转动方向和角度和上位机发送的一致。整体测试如图14所示。图14 单片机系统仿真经测试,串口通信部分能接收到正确的数据,单片机能驱动x轴和y轴步进电机正转或反转一定角度,旋转方向和角度都和上位机发送的一致,led灯能正确指示系统和步进电机运行状态。系统各个模块运行稳定。5 总结本课题设计了基于visual basic的二维点样控制平台和基于51单片机的串口通信控制系统。上位机实现串口通信,当手动点样、自动点样或回原点操作时,会将相应的x轴和y轴的坐标值传给下位机。下位机是由51单片机控制一个系统,当接收到串口数据时,对数据进行分析,提取出上位机发送的坐标值,驱动x轴和y轴步进

38、电机,实现二维点样。经测试各部分工作正常,达到了本课题的设计目标。由于本人时间和精力有限,有很多需要改进和完善的地方。上位机控制平台可以添加更多功能,界面可以做的更美观。单片机控制系统可以选用更强大的单片机,比如低功耗的16单片机msp430或者运行更快的基于cotex-m3内核的32位stm32单片机6 9。参考文献: 1李雁翎等.visual basic程序设计基础教程(第二版)m人民邮电出版社2012.12杨加国等.单片机原理与应用及c51程序设计(第二版)m清华大学出版社2011.103周荣富.电子线路cad m北京大学出版社2011.124陈忠平.基于proteus的51系列单片机设

39、计与仿真(第二版) m电子工业出版社2012.55陈曾平.电路设计基础 m北京高等教育出版社.2003:100-110.6肖洪兵.跟我学用单片机 m北京航空航天大学出版社.2002.8.7何立民.单片机应用技术大全 m北京航空航天大学出版社,1994.8邱光源等.电路基础m高等教育出版社 1998.9沈红卫.基于单片机的智能系统设计与实现 m北京:电子工业出版社,2005.110康华光电子技术基础数字部分 m北京高等教育出版社,2000. 11郁有文,常健 传感器原理及工程应用 m电子科技大学出版社,2008.712visual.basic数据采集与串口通信测控应用实战.李江全等.扫描版13梅

40、丽凤,王艳秋,汪毓铎,张军. 单片机原理及接口技术 m清华大学出版社 200614蔡朝洋. 单片机控制实习与专题制作 m北京航空航天大学出版社2006.1115杨忠宝,康顺哲.vb语言程序设计 m人民邮电出版社2010.1216夏继强.单片机实验与实践教程 m北京航空航天大学出版社,2001.17王运坚.visual basic 6.0 应用指南 m人民邮电出版社199819附录附录1 上位机设计界面附录2 上位机程序dim xx, yy as longdim timercount as integerdim sendbyte(1) as byteprivate sub command5_cl

41、ick()if command5.caption = 关闭端口 then mscomm1.portopen = false command5.caption = 打开端口 shape1.fillcolor = rgb(0, 0, 0)else if test_com(4) = true then mscomm1.portopen = true command5.caption = 关闭端口 shape1.fillcolor = rgb(0, 255, 0) end ifend ifend sub检测端口信号函数private function test_com(com_num as integ

42、er) as boolean if command5.caption = 打开串口 then on error goto comm_error mscomm1.commport = com_num 这里接受传入的串口号 mscomm1.portopen = true mscomm1.portopen = false test_com = true 如果操作成功,则说明当前串口可用,返回1,表示串口可用 exit functioncomm_error: if err.number = 8002 then msgbox 串口不存在,请配置串口号为com4! elseif err.number =

43、8005 then msgbox 串口已打开 else msgbox 其它错误 end if test_com = false 如果出错,则返回0 exit function resume next end ifend functionprivate function sendxy(xv as integer, yv as integer) as boolean 发送xy坐标 sendxy = false if mscomm1.portopen then sendbyte(0) = xv or &h80 sendbyte(1) = yv mscomm1.output = sendbyte se

44、ndxy = true end ifend functionprivate sub command8_click() if (textx1(intger).text = x1 or textx1(intger).text = or texty1.text = y1 or texty1.text = _ or textx2.text = x2 or textx2.text = or texty2.text = y2 or texty2.text = _ or textx3.text = x3 or textx3.text = or texty3.text = y3 or texty3.text

45、= ) then msgbox 请输入三组点样坐标(0-100之间的数值)!else if cint(textx1(intger).text) = 100 and cint(texty1.text) = 100 and cint(textx2.text) = 100 _ and cint(texty2.text) = 100 and cint(textx3.text) = 100 and cint(texty3.text) = 100 then timer1.enabled = true command8.enabled = false timercount = 0 point1.move c

46、int(textx1.text) - point1.width / 2, cint(texty1.text) + point1.height / 2 textx.text = cint(point1.left + point1.width / 2) texty.text = cint(point1.top - point1.height / 2) else msgbox 输入数值必须在0-100之间 end ifend ifend subprivate sub timer1_timer()timercount = timercount + 1if timercount = 1 then poi

47、nt1.move cint(textx1(intger).text) - point1.width / 2, cint(texty1.text) + point1.height / 2 textx.text = cint(textx1(intger).text) texty.text = cint(texty1.text) sendxy cint(textx1(intger).text), cint(texty1.text)end ifif timercount = 2 then point1.move cint(textx2.text) - point1.width / 2, cint(te

48、xty2.text) + point1.height / 2 textx.text = cint(textx2.text) texty.text = cint(texty2.text) sendxy cint(textx2.text), cint(texty2.text)end ifif timercount = 3 then point1.move cint(textx3.text) - point1.width / 2, cint(texty3.text) + point1.height / 2 textx.text = cint(textx3.text) texty.text = cin

49、t(texty3.text) sendxy cint(textx3.text), cint(texty3.text) timercount = 0 timer1.enabled = false command8.enabled = trueend ifend subprivate sub commandyp_click()y+操作if (point1.top - point1.height / 2) 0 thenpoint1.move point1.left - 1, point1.toptextx.text = cint(point1.left + point1.width / 2)text

50、y.text = cint(point1.top - point1.height / 2)sendxy cint(point1.left + point1.width / 2), cint(point1.top - point1.height / 2)end ifend subprivate sub commandxp_click()x+操作if (point1.left + point1.width / 2) 0 thenpoint1.move point1.left, point1.top - 1textx.text = cint(point1.left + point1.width /

51、2)texty.text = cint(point1.top - point1.height / 2)sendxy cint(point1.left + point1.width / 2), cint(point1.top - point1.height / 2)end ifend sub回原点操作private sub command7_click()point1.move 0 - point1.width / 2, 0 + point1.height / 2textx.text = cint(point1.left + point1.width / 2)texty.text = cint(point1.top - point1.height / 2)sendxy 0, 0end subprivate sub form_load()picture1

温馨提示

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

评论

0/150

提交评论