采用vc的伺服电机控制毕业论文_第1页
采用vc的伺服电机控制毕业论文_第2页
采用vc的伺服电机控制毕业论文_第3页
采用vc的伺服电机控制毕业论文_第4页
采用vc的伺服电机控制毕业论文_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

基于VC的伺服电机速度控制系统设计摘要本设计完成是基于VISUALC60软件下实现伺服电机控制界面的编程,并完成PID控制算法。该控制界面不仅简洁实用,而且具有良好的人机交流部分。上位机控制界面所实现的功能有电机的启动、停止、正传、反转、速度给定、实时曲线显示等,在完成PID算法后同时下发PID调节后的PWM占空比,实现转速控制。在完成串口通讯编程本文采用MSCOMM控件实现PC机与单片机通讯,数据的发送与接收采用统一通讯协议,这种方法不仅简单,而且实用。本文采用单片机作为下位机来验证上位机控制功能的实现,单片机作为下位机主要负责直流电机的各种参数数据的采集和模数转换,然后通过串行端口把数据发送给上位机,PC机作为上位机主要负责数据的分析处理和显示。关键词伺服电机;VC;串口通讯;PWM调速;PID;THESERVOMOTORSPEEDCONTROLSYSTEMDESIGNBASEDONVCABSTRACTTHISDESIGNSCOREISUNDERTHESOFTWAREOFVISUALC60,REALIZESTHESERVOMOTORCONTROLCONTACTSURFACEPROGRAMMING,ANDCOMPLETESTHEPIDCONTROLALGORITHMTHISCONTROLINTERFACEHASNOTONLYSUCCINCTPRACTICAL,BUTALSOHASTHEGOODMANMACHINEEXCHANGEPARTTHESUPERIORMACHINECONTROLINTERFACEREALIZESTHEFUNCTIONHASTHEELECTRICALMACHINERYSSTART,ELECTRICALMACHINERYSSTOP,ELECTRICALMACHINERYSMAINSTORY,ELECTRICALMACHINERYSREVERSE,THESPEEDVALUEASSIGNS,CURVEDEMONSTRATIONANDSOONAFTERCOMPLETINGTHEPIDALGORITHMSIMULTANEOUSLYAFTERCROPSPIDTHEADJUSTMENTTHEPWMCURRENTOUTPUTINCOMPLETINGSERIALPORTCOMMUNICATIONPROGRAMMINGTHISARTICLETOUSEMSCOMMTOCONTROLTOREALIZEPCMACHINEANDTHEMONOLITHICINTEGRATEDCIRCUITCOMMUNICATION,THEDATATRANSMISSIONANDTHERECEIVEUSESTHEUNIFIEDCOMMUNICATIONPROTOCOL,INTHISMETHODISNOTONLYSIMPLEBUTALSOPRACTICALINTHISARTICLEUSESTHEMONOLITHICINTEGRATEDCIRCUITTOCONFIRMTHESUPERIORMACHINECONTROLFUNCTIONASTHELOWERPOSITIONMACHINEREALIZATION,MONOLITHICINTEGRATEDCIRCUITASLOWERPOSITIONMACHINEPRIMARYCOGNIZANCEDIRECTCURRENTMACHINESEACHKINDOFPARAMETERDATAGATHERINGANDWITHA/DCONVERSIONTHENTHROUGHTHESERIALPORTTHEDATATRANSMISSIONFORTHESUPERIORMACHINE,PCMACHINETAKESTHESUPERIORMACHINEPRIMARYCOGNIZANCEDATATHEANALYSISPROCESSINGANDTHEDEMONSTRATIONKEYWORDSERVOELECTRICALMACHINERYVCSERIALPORTCOMMUNICATIONPWMCONTROLSPEEDPID目录摘要IABSTRACTII第一章引言111设计的目的112设计的意义2第二章电机调速321直流伺服电机简介322直流伺服电机调速5221VM调速系统5222PWM调速系统7第三章GUI设计1031主界面1032实时曲线1233按钮图标的实现13第四章串口通讯1741PC机与单片机通信方式1742VC实现串口通讯的四种方式19421基于WINDOWSAPI通信函数19422利用端口函数直接操作21423基于MSCOMM控件22424基于CSERIAL类23425四种实现方式的分析2443串口编程25431插入MSCOMM控件25432设置属性25433设置串口26434数据类型的处理2944帧格式定义2945发送数据帧3046接收数据帧30461检测接收缓冲区数据30462从接收缓冲区取出数据32第五章PID算法3351PID算法简介3352参数调整一般规则3453PID算法在VC中的实现34结论37参考文献38附录程序40致谢63第一章引言在生产实践的各个领域,有大量的生产机械要求在不同的场合,用不同的速度来进行工作,以提高生产率和保证产品的质量,如机床、轧钢机、造纸机、纺织机械等。在工程实践中,有很多生产机械要求在一定的范围内进行速度的平滑调节,并且要求有良好的静、动态性能。所以如何能充分发挥生产机械效能,提高生产率,是电机转速控制系统首先要解决的问题。11设计的目的随着微电子技术的发展,应用上位机实现现场的采集与控制越来越被大家所重视,上位机提供良好的人机界面,使现场监控更直接、简洁可靠和稳定。应用上位机实现现场监控,主要是通过上位机本身配置的串行口,通过串行通讯技术,控制和管理若干以单片机。由于上位机界面的应用给现场监控提供的极大的方便,所以上位机控制界面的设计也成为工业控制的重点内容。在VISUALC60界面下完成上位机的编程具有自己独特的优势,当VB成功推出后,MICROSOFT又将C包装成为了面向WINDOWS的VISUALC(以下简称VC)。从VC10到VC60,每一个版本的推出都激动人心。VC借助传统的C/C的美名加上MICROSOFT这个金字招牌,使广大的程序员和专业编程人员纷纷投靠在VC的大旗下16。伺服系统在机械制造行业中用得最多最广泛,各种高性能机床运动部件的速度控制运动轨迹控制、位置控制,都是依靠各种伺服系统控制的。它们不仅能完成转动控制、直线运动控制,而且能依靠多套伺服系统的配合,完成复杂的空间曲线运动的控制,如仿型机床的控制、机器人手臂关节的运动控制等等。它们可以完成的运动控制精度高、速度快、远非一般人工操作所能达到。电动机是伺服系统的重要执行元件,又称为执行电动机。在自动控制系统中,其任务是将输入的电信号转换为转角或转速,以带动控制对象。因此,对伺服系统的控制关键所在就是对伺服电机的控制。伺服电动机一般分为直流伺服电机和交流伺服电机,对于直流伺服电机具有响应快、低速平稳性好、调速范围宽等优点,常用于实现精密调速和位置控制的随动系统中,在工业、国防和民用等领域内得到广泛应用13。而对于交流伺服电机,虽然控制精度较高,但控制较复杂,驱动器参数需要现场调整PID参数整定,需要更多的连线18。所以本文主要介绍直流伺服电机转速的控制。12设计的意义工业控制领域,往往需要组成上位机下位机系统,上位机一般为PC机,下位机一般为单片机系统1。上位机主要完成数据的采集、显示、以及数据的给定等随着,单片机做为下位机本主要负责直流电机的各种参数数据的采集和和模数转换。利用VC编程上位机控制界面可以解决很多工业控制中出现的难题,传统的上位机控制界面参数给定更改比较麻烦,需要浪费大量时间从新更改程序。而VC的上位机控制界面就很容易实现,只需对程序中设置的参数加以更换就可以,特别是上位机一般都是计算机,随着计算机技术的发展,计算机的功能也越来越强大,很多复杂算法很容易实现,也为工业的中出现的复杂算法提供方便。在更变复杂算法时,由VC编程上位机控制界面也十分方便。本文在完成控制伺服电机速度过程中介绍了PID算法的编程过程。第二章电机调速21直流伺服电机简介直流伺服电机是将输入的直流电信号转换成机械角位移或角速度信号的装置。直流伺服电机具有良好的启动、制动和调速性能,可以再较宽的范围内实现平滑无极的调速,因而适应于调速性能较高的场合4。1直流电动机的结构;定子。定子磁极磁场由定子的磁极产生。根据产生磁场的方式,直流伺服电动机可分为永磁式和他激式。永磁式磁极由永磁材料制成,他激式磁极由冲压硅钢片叠压而成,外绕线圈通以直流电流便产生恒定磁场。转子。又称为电枢,由硅钢片叠压而成,表面嵌有线圈,通以直流电时,在定子磁场作用下产生带动负载旋转的电磁转矩。电刷与换向片。为使所产生的电磁转矩保持恒定方向,转子能沿固定方向均匀的连续旋转,电刷与外加直流电源相接,换向片与电枢导体相接。2直流电机的分类;一般直流电机按结构、用途、容量的大小等分类。但从运行的观点来看,按励磁方式分类更用意义,因为除了少量微型电机的磁极是永磁铁外,绝大多数电机的磁场都是在磁极绕组中通以直流电流而建立的。因此都是通常都是按励磁绕组的连接方式即按励磁方式对直流电机进行分类。直流电机按其励磁绕组与电枢绕组连接方式的不同,可他励;并励;串励;复励等四种,如图21MU1I1U1I2MU1II1I2MUIMUII1I2ABCD图21直流电机励磁方式图图21A为他励直流电机,其特点是励磁绕组接在独立大励磁电源上,而与电枢的绕组无关,图21B为并励直流电机,其特点是励磁绕组与电枢绕组并联,这种励磁绕组的匝数较多,导线较细,图21C为串励直流电机,其特点是励磁绕组与电枢绕组串联,电枢电流就是励磁电流,励磁绕组匝数少、导线较粗。图21D为复励直流电机,其特点是在主磁极上装有两套励磁绕组,一套是与电枢绕组并联时并励绕组,另一套与电枢绕组串联是串励绕组20。3直流伺服电机工作原理;直流伺服电动机的工作原理与一般直流电动机的工作原理是完全相同,如图22所示。他激直流电机转子上的载流导体(即电枢绕组),在定子磁场中受到电磁转矩M的作用,使电机转子旋转。由直流电机的基本原理分析得到转速值如21式所示21AEUIRNKN电枢的转速,R/MIN;U电枢电压;IA电机电枢电流;RA电枢电阻;KE电势系数(KECE)。图22直流电机原理图UIARAIFUFRF22直流伺服电机调速直流伺服电机的调速有三种方法1改变电枢电压U由额定电压向下调低,转速也由额定转速向下调低,调速范围大。2改变磁通量(即改变KE)改变激磁回路的电阻可改变。由于激磁回路电感大,电气时间常数大,调速快速性差,转速只能由额定转速向上调高。3在电枢回路中串联调节电阻。转速只能调低,铜耗大,不经济。直流伺服电机通常采用调压调速,通常改变电枢电压调速是直流调速系统采用的主要方法。改变电枢电压调速是直流调速系统采用的主要方法,调节电枢供电电压或者改变励磁磁通,都需要有专门的可控直流电源,常用的可控直流电源有以下三种1旋转变流机组。用交流电动机和直流发电机组成机组,以获得可调的直流电压。2静止可控整流器。用静止的可控整流器,如汞弧整流器和晶闸管整流装置,产生可调的直流电压。3直流斩波器或脉宽调制变换器。用恒定直流电源或不可控整流电源供电,利用直流斩波或脉宽调制的方法产生可调的直流平均电压。下面分别对各种可控直流电源以及由它供电的直流调速系统作概括性介绍。221VM调速系统1957年,晶闸管问世,它是一种大功率半导体可控整流元件,俗称可控硅整流元件,简称“可控硅”,20世纪60年代起就已生产出成套的晶闸管整流装置。晶闸管问世以后,变流技术出现了根本性的变革。目前,采用晶闸管整流供电的直流电动机调速系统(即晶闸管电动机调速系统,简称VM系统,又称静止WARDLEONARD系统)已经成为直流调速系统的主要形式。图23所示是VM系统的原理框图,图中V是晶闸管可控整流器,它可以是任意一种整流电路,通过调节触发装置GT的控制电压来移动触发脉冲的相位,从而改变整流输出电压平均值,实现电动机的平滑调速。和DU旋转变流机组及离子拖动变流相比,晶闸管整流不仅在经济性和可靠性上都有很大提高,而且在技术性能上显示出很大的优越性。晶闸管可控整流器的功率放大倍数大约在,控制功率小,有利于微电子技术引入到强电领域;在控制作用的快速性上也大大提高,有利于改善系统的动态性能5。但是,晶闸管整流器也有它的缺点,主要表现在以下方面1晶闸管一般是单向导电元件,晶闸管整流器的电流是不允许反向的,这给电动机实现可逆运行造成困难。必须实现四象限可逆运行时,只好采用开关切换或正、反两组全控型整流电路,构成VM可逆调速系统,后者所用变流设备要增多一倍。2晶闸管元件对于过电压、过电流以及过高的DU/DT和DI/DT十分敏感,其中任一指标超过允许值都可能在很短时间内元件损坏,因此必须有可靠的保护装置和符合要求的散热条件,而且在选择元件时还应保留足够的余量,以保证晶闸管装置的可靠运行。3晶闸管的控制原理决定了只能滞后触发,因此,晶闸管可控制整流器对交流电源来说相当于一个感性负载,吸取滞后的无功电流,因此功率因素低,特别是在深调速状态,即系统在较低速运行时,晶闸管的导通角很小,使得系统的功率因素很低,并产生较大的高次谐波电流,引起电网电压波形畸变,殃及附近的用电设备。如果采用晶闸管整流装置的调速系统在电网中所占容量比重较大,将造成所谓的“电力公害。为此,应采取相应的无功补偿、滤波和高次谐波的抑制措施。4晶闸管整流装置的输出电压是脉动的,而且脉波数总是有限的。如果主电路电感不是非常大,则输出电流总存在连续和断续两种情况,因而机械特性也有连续和断续两段,连续段特性比较硬,基本上还是直线;断续段特性则很软,而且呈现出显著的非线性。MGTVUDL图23晶闸管电机调速系统原理图(VM)222PWM调速系统直流斩波器又称直流调压器,是利用开关器件来实现通断控制,将直流电源电压断续加到负载上,通过通、断时间的变化来改变负载上的直流电压平均值,将固定电压的直流电源变成平均值可调的直流电源,亦称直流直流变换器。它具有效率高、体积小、重量轻、成本低等优点,现广泛应用于地铁、电力机车、城市无轨电车以及电瓶搬运车等电力牵引设备的变速拖动中。图24为直流斩波器的原理电路和输出电压波型,A图中VT代表开关器件。当开关VT接通时,电源电压。加到电动机上;当VT断开时,直流电源与电动机断开,SU电动机电枢端电压为零。如此反复,得电枢端电压波形如图24(B)所示。VTVDUSLTUSTTUDUABM图24直流斩波器的原理图这样,电动机电枢端电压的平均值如式22所示2201TDSSTUUK式中,T开关器件的通断周期;输出电压平均值可以通过改变占空比K,即通过改变开关器件导通或关断时间D来调节,常用的改变输出平均电压的调制方法有以下三种1脉冲宽度调制(PULSEWIDTHMODULATION,简称PWM)。开关器件的通断周期T保持不变,只改变器件每次导通的时间T,也就是脉冲周期不变,只改变脉冲的宽度,即定频调宽。2脉冲频率调制(PULSEFREQUENCYMODULATION,简称PFW)。开关器件每次导通的时间T不变,只改变通断周期T或开关频率F,也就是只改变开关的关断时间,即定宽调频,称为调频。3两点式控制。开关器件的通断周期T和导通时间T均可变,即调宽调频,亦可称为混合调制。当负载电流或电压低于某一最小值时,使开关器件导通;当电流或电压高于某一最大值时,使开关器件关断。导通和关断的时间以及通断周期都是不确定的。构成直流斩波器的开关器件过去用得较多的是普通晶闸管和逆导晶闸管,它们本身没有自关断的能力,必须有附加的关断电路,增加了装置的体积和复杂性,增加了损耗,而且由它们组成的斩波器开关频率低,输出电流脉动较大,调速范围有限。自20世纪70年代以来,电力电子器件迅速发展,研制并生产了多种既能控制其导通又能控制其关断的全控型器件,如门极可关断晶闸管(GTO)、电力电子晶体管(GTR)、电力场效应管(PMOSFET)、绝缘栅双极型晶体管(IGBT)等,这些全控型器件性能优良,由它们构成的脉宽调制直流调速系统(简称PWM调速系统)近年来在中小功率直流传动中得到了迅猛的发展,与VM调速相比,PWM调速系统有以下优点采用全控型器件的PWM调速系统,其脉宽调制电路的开关频率高,一般在几KHZ,因此系统的频带宽,响应速度快,动态抗扰能力强。由于开关频率高,仅靠电动机电枢电感的滤波作用就可以获得脉动很小的直流电流,电枢电流容易连续,系统的低速性能好,稳速精度高,调速范围宽,同时电动机的损耗和发热都较小。PWM系统中,主回路的电力电子器件工作在开关状态,损耗小,装置效率高,而且对交流电网的影响小,没有晶闸管整流器对电网的“污染”,功率因数高,效率高。主电路所需的功率元件少,线路简单,控制方便。所以本文采用脉冲宽度调制的方法来调试电机的速度。脉宽调速系统的主要电路采用脉宽调制式变换器,简称PWM变换器。PWM变换器有不可逆和可逆两类,可逆变换器又有双极式、单极式和受限单极式等多种电路,本文采用不可逆PWM变换器,其原理简单容易实现19。第三章GUI设计31主界面上位机界面主要完成PID试调、速度给定、速度显示、曲线显示等功能。可实现的软件有VC、DELPHI、VB、CAI、LABVIEW。本文是用VISUALC60来完成上位机界面的设计;如图31所示图31电机转速控制界面图VISUALC60作为可视化编程软件具有独特优势。是目前综合性最高、最强大,也是最为复杂的WINDOWS应用程序开发软件。VISUALC是一个功能强大的可视化软件开发工具。自1993年MICROSOFT公司推出VISUALC10后,随着其新版本的不断问世,VISUALC已成为专业程序员进行软件开发的首选工具。首先,要了解VC60则必须先了解C/C语言。在计算机领域,C/C语言相信一定无人不知、无人不晓。C语言最初主要用于UNIX系统,大多数UNIX系统的程序都是用C编写的。借助早期UNIX系统的流行和C本身的优秀品质,C语言从此名扬天下、威震四方。而后,伴随着面向对象概念的提出和应用,形成了C语言,ATT公司于1985年正式推出了C10版,它是C语言面向对象的扩充。C10增加了类和实例、单继承、重载、虚函数、友员、内联等面向对象的程序设计机制。1989年推出的C20版和1993年推出的C30版分别增加了支持多继承、保护接口、模板和异常等。C被公认为“最好的面向对象的编程语言,是学习面向对象编程技术人员较好的启蒙语言。VISUALC60不仅是一个C编译器,而且是一个基于WINDOWS操作系统的可视化集成开发环境。VISUALC60由许多组件组成,包括编辑器、调试器以及程序向导APPWIZARD、类向导CLASSWIZARD等开发工具。这些组件通过一个名为DEVELOPERSTUDIO的组件集成为和谐的开发环境17。VC是微软公司开发的C语言开发环境,VC的特点是微软公司做了一个自己独有的类库MFC,里面封装了绝大多数的API函数,使得WINDOWS程序的开发变的高效和易于理解,如果用API直接开发WINDOWS程序的话,将会是一件非常烦琐的工作,WINDOWS对资源的管理是非常严格的这与DOS可直接用中断处理程序和I/O指令操作硬件端口是截然相反的;所以这个MFC就是VC和其他公司出产的编译器的最大区别了,当然了别的公司也有自己封装API的类库比如DELPHI等,不过由于微软公司掌握着WINDOWS内核的全部秘密,所以他们的编译器与其他公司的相比有其独到的优势。主界面控件参数设置首先打开VC60集成开发环境,选择菜单项FILE/NEW,在出现的对话框中选中PROJECTS标签中的MFCAPPWIZARDEXE,然后在PROJECTNAME框中填入MYCOMM可根据需要命名,之后点OK按钮。在接着出现的对话框中选中DIALOGBASED项,然后点NEXT按钮。以下的各对话框都按照缺省设置,这样即可生成一个基于对话框的应用程序。在资源编程器中会出现其对话框模板。在对话框中添加相应应用的控件,再对参数进行属性设置,如设置ID,设置后的界面如图32所示图32伺服电机控制界面图32实时曲线在伺服电机转速控制过程中,需要采集电机的实际转速,并实时显示到控制界面上,这样可以轻松的观察的速度曲线的实时变化。实现的方法为在工程中添加曲线资源,然后自DLG中添加代码GETDLGITEMIDC_OSCOPEGETWINDOWRECTRECTSCREENTOCLIENTRECT/适应PICTURE控件的大小创建画图工具M_QUXIANCREATEWS_VISIBLE|WS_CHILD,RECT,THIS初始化画图工具M_QUXIANSETRANGE0,200,0/设置纵坐标以及小数位数M_QUXIANSETYUNITS“电机转速转/秒“/设置Y轴标题M_QUXIANSETXUNITS“时间轴“/设置X轴标题M_QUXIANSETBACKGROUNDCOLORRGB0,0,64/背景色M_QUXIANSETGRIDCOLORRGB192,192,255/坐标颜色M_QUXIANSETPLOTCOLORRGB255,255,255/曲线颜色当串口调通后可以收发数据时,便可以接收下位机的速度给定时,可以实时显示速度曲线,如图33所示。图33速度曲线显示图33按钮图标的实现按钮图标是通过CBUTTONST这个类实现的,CBUTTONST是目前最强大功能最全的CBUTTON派生类,CBUTTONST类主要包括BTNSTH、BTNSTCPP、BCMENUH和BCMENUCPP四个文件,在VC的WORKSPACEFILEVIEW中导入以上的四个文件之后,然后在SDTAFXH文件中添加合适的INCLUDE语句,如INCLUDE“BTNSTH“。下面介绍应用CBUTTONST可实现下面6种效果;1在按钮上加入ICON,使ICON和文字同时显示;假设按钮ID为IDC_BUTTON1添加成员变量CBUTTONSTM_BTN添加ICON资源,设其ID设为IDI_ICON1在ONINITDIALOG函数中初始化按钮;M_BTNSUBCLASSDLGITEMIDC_BUTTON1,THISM_BTNSETICONIDI_ICON1M_BTNSETFLATFALSE根据ICON的大小调整按钮的大小。2显示平面按钮只需要在效果一的基础上把M_BTNSETFLATFALSE语句去掉。3使按钮上的图标可变;假设按钮ID为IDC_BUTTON1添加成员变量CBUTTONSTM_BTN添加两个ICON资源,ID设为IDI_ICON1和IDI_ICON2IDI_ICON1是普通状态的图标,IDI_ICON2是按下时的图标;在ONINITDIALOG函数中初始化按钮;M_BTNSUBCLASSDLGITEMIDC_BUTTON1,THISM_BTNSETICONIDI_ICON2,IDI_ICON1;4设置按钮在不同状态下的底色和文字颜色;假设按钮ID为IDC_BUTTON1添加成员变量CBUTTONSTM_BTN添加ICON资源,设其ID设为IDI_ICON1在ONINITDIALOG函数中初始化按钮M_BTNSUBCLASSDLGITEMIDC_BUTTON1,THISM_BTNSETICONIDI_ICON1M_BTNSETCOLORCBUTTONSTBTNST_COLOR_BK_OUT,RGB208,208,208M_BTNSETCOLORCBUTTONSTBTNST_COLOR_BK_FOCUS,RGB208,208,208M_BTNOFFSETCOLORCBUTTONSTBTNST_COLOR_BK_IN,30SETCOLOR函数和OFFSETCOLOR函数的第一个参数表示按钮的各个状态,前景色就是文字的颜色,它们的取值表示BTNST_COLOR_BK_IN/鼠标放在按钮内时的背景色BTNST_COLOR_FG_IN/鼠标放在按钮内时的前景色BTNST_COLOR_BK_OUT/普通状态时的背景色BTNST_COLOR_FG_OUT/普通状态时的前景色BTNST_COLOR_BK_FOCUS/按钮被按下后的背景色BTNST_COLOR_FG_FOCUS/按钮被按下后的前景色实例演示程序中的4848ICON按钮、ZIP按钮等。5设置图标和文字的位置假设按钮ID为IDC_BUTTON1添加成员变量CBUTTONSTM_BTN添加ICON资源,ID设为IDI_ICON1在ONINITDIALOG函数中初始化按钮M_BTNSUBCLASSDLGITEMIDC_BUTTON1,THISM_BTNSETICONIDI_ICON1M_BTNSETALIGNCBUTTONSTST_ALIGN_VERTSETALIGN函数的第一个参数表示位置信息,缺省情况下,文字在图标右边ST_ALIGN_HORIZ/文字在右ST_ALIGN_VERT/文字在下ST_ALIGN_HORIZ_RIGHT/文字在左6根据ICON的形状设置按钮的形状假设按钮ID为IDC_BUTTON1添加成员变量CBUTTONSTM_BTN添加ICON资源,设其ID设为IDI_ICON1在ONINITDIALOG函数中初始化按钮M_BTNSUBCLASSDLGITEMIDC_BUTTON1,THISM_BTNSETICONIDI_ICON1M_BTNDRAWBORDERFALSEM_BTNSETCOLORCBUTTONSTBTNST_COLOR_BK_OUT,RGB208,208,208M_BTNSETCOLORCBUTTONSTBTNST_COLOR_BK_IN,RGB208,208,208M_BTNSETCOLORCBUTTONSTBTNST_COLOR_BK_FOCUS,RGB208,208,208为达到最好效果,请根据ICON的大小调整按钮的大小。并根据实际情况设置背景颜色,请事先将按钮的文字去掉。第四章串口通讯41PC机与单片机通信方式PC机与单片机通讯通常采用两种方式并行通信和串行通信。并行通信是指代发送的数据各位同时传送,串行通信则是数据一位一位的按顺序传送。并行通信虽然传输效率高,由于所需硬件设计复杂,不适于长距离通信,所以一般只适用于要求实时性强。传送速率较高的测控系统中,实用面较窄;相比之下,串行通信简单易实现,传输距离较长,所以已被广泛应用于各种工控系统中2。串行通行分为同步通行和异步通信2种方式。同步通信是指通过在每个数据块开始时的同步字符来实现收/发双方同步的一种数据传送方法,常用于信息量大,速度要求高的场合;异步通信则规定了标准的字符数据传输格式,即每一帧信息由起始位、数据位、奇偶校验位和停止位组成3。由于有冗余位,所以传送效率不高,常用于信息量不大,速度较低的场合。在计算机测控系统中,由于串行接口的标准化,一般采用异步串行通信方式,以提高其通用性。PC机与下位机通讯采用标准通讯端口RS232。目前RS232是PC机与通信工业中应用最广泛的一种串行接口,而对于单片机与PC机的串行通信,可以进一步简化接法,只需要三根线RXD接收、TXD发送、GND信号地,收发双方信号共地,即信号地线接在一起,这种接法俗称零MODEM接法”。RS232传送的是单端信号,即取RXD及TXD对GND的电压值为信号电平,电压5V15V表示逻辑0,电压15V5V表示逻辑1,称之为EIA电平。而单片机一般采用TTL和COMS兼容电平,所以进行机与单片机的串行通信时,要进行EIA电平与TTL电平之间的转换。实施起来很简单,只要在机串口和单片机串口之间再接上一个电平转换芯片就可以了12。可使用相应的专用芯片进行电平转化,如MAX23211。如图4189C51UART1TXDRXDGNDMAX2321091578PC机串行端口TXDRXDGND图41PC机与单片机连接图RS232C是美国电子工业协会(EIA)于1962年制定并于1968年最后一次修改而成的一种串行通信标准,它既是一个物理接口标准,也是一个电气标准。RS232C接口采用25根线,实际使用时,除去接到设备外壳的一根安全地线以外,真正用于异步串行通信的只有9根线其余空着没定义,也正是因为如此,PC机一般都具有一个或几个针RS232C串行接口,分别称为COM1和COM2。1由于RS232接口标准出现较早,难免有不足之处,主要有以下四点接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。传输速率较低,在异步传输时,波特率为20KBPS;因此在“南方的老树51CPLD开发板”中,综合程序波特率只能采用19200,也是这个原因。接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右10。2针对RS232接口的不足,于是就不断出现了一些新的接口标准,RS485就是其中之一,它具有以下特点RS485的电气特性逻辑“1”以两线间的电压差为(26)V表示;逻辑“0”以两线间的电压差为(26)V表示。接口信号电平比RS232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。RS485的数据最高传输速率为10MBPS。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。RS485接口的最大传输距离标准值为4000英尺,实际上可达3000米,另外RS232接口在总线上只允许连接1个收发器,即单站能力。而RS485接口在总线上是允许连接多达128个收发器。即具有多站能力,这样用户可以利用单一的RS485接口建立设备网络6。42VC实现串口通讯的四种方式421基于WINDOWSAPI通信函数与通信有关的WINDOWSAPI函数共有26个,但主要有关的有CREATEFILE用“COMN”(N为串口号)作为文件名就可以打开串口;READFILE读串口;WRITEFILE写串口;CLOSEHANDLE关闭串口句柄。初始化时应注意CREATEFILE函数中串口共享方式应设为0,串口为不可共享设备,其它与一般文件读写类似,以下给出API实现的源代码。1发送例程声明全局变HANDLEM_HIDCOMDEV;OVERLAPPEDM_OVERLAPPEDREADVOIDCSERIALAPIVIEWONSEND/发送数据CHARSZMESSAGE20“DATA”DWORDDWBYTESWRITTENFORINTI0ISIZEOFSZMESSAGEIWRITEFILEM_HIDCOMDEV,LPSTRIFWAITFORSINGLEOBJECTM_OVERLAPPERWRITE,HEVENT,1000DWBYTESWRITTEN0ELSEGENTOVERLAPPEDRESULTM_HIDCOMDEV,M_OVERLAPPEDWRITEOFFSETDWBYTESWRITTENDWBYTESWRITTEN2接收例程DCBCOMDCB/设备控制块HANDLEHCOMHCOMCREATEFILE“COM1“,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULLIFHCOMINVALID_HANDLE_VALUEAFXMESSAGEBOX“无法打开串行口“ELSECOMMTIMEOUTSCOMMTIMEOUTSSETCOMMMASKHCOM,EV_RXCHARSETUPCOMMHCOM,4096,4096/设置收发缓冲区尺寸为4KPURGECOMMHCOM,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR清收发缓冲区;3以下初始化COMMTIMEOUTS和设置超时参数;COMMTIMEOUTSREADINTERVALTIMEOUT0FFFFFFFFCOMMTIMEOUTSREADTOTALTIMEOUTMULTIPLIER0COMMTIMEOUTSREADTOTALTIMEOUTCONSTANT4000COMMTIMEOUTSWRITETOTALTIMEOUTMULTIPLIER0COMMTIMEOUTSWRITETOTALTIMEOUTCONSTANT4000SETCOMMTIMEOUTSHCOM,/设置超时参数COMDCBDCBLENGTHSIZEOFDCBGETCOMMSTATEHCOM,/获取当前参数COMDCBBAUDRATE9600/波特率COMDCBBYTESIZE8/数据位COMDCBPARITY0/校验04NO,ODD,EVEN,MARK,SPACESETCOMMSTATEHCOM,4设置新的通信参数;DWORDDREAD,DREADNUMUNSIGNEDCHARBUFF200DREADREADFILEHCOM,BUFF,100,/接收100个字符,DREADNU为实际接收字节数;422利用端口函数直接操作这种方式主要是采用两个端口函数_INP,_OUTP实现对串口的读写,其中读端口函数的原型为INT_INPUNSIGNEDSHOTPORT;该函数从端口读取一个字节,端口号为065535;写端口的函数原型为INT_OUTPUNSIGNEDSHOTPORT,INTDATABYTE该函数向指定端口写入一个字节。不同的计算机串口地址可能不一样,通过向串口的控制及收发寄存器进行读写,可以实现灵活的串口通信功能,一般涉及具体的硬件电路讨论比较复杂。423基于MSCOMM控件MSCOMM控件,即MICROSOFTCOMMUNICATIONCONTROL,是MICROSOFT为简化WINDOWS下串行通信编程而提供的ACTIVEX控件。它提供了一系列标准通信命令的使用接口,利用它可以建立与串口的连接,并可以通过串口连接到其他通信设备(如调制解调器),发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。MSCOMM控件可用于创建电话拨号程序、串口通信程序和功能完备的终端程序,MSCOMM控件提供了两种处理通信的方式7。1事件驱动方式。当通信事件发生时,MSCOMM控件会触发ONCOMM事件,调用者可以捕获该事件,通过检查其COMMEVENT属性便可确认发生的是哪种事件或错误,从而进行相应的处理。这种方法的优点是响应及时、可靠性高。2查询方式。在程序的每个关键功能之后,可以通过检查COMMEVENT属性的值来查询事件和错误。如果应用程序较小,这种方法可能更可取。例如,如果写一个简单的电话拨号程序,则没有必要每接收1个字符都产生事件,因为惟一等待接收的字符是调制解调器的“确定“响应14。3MSCOMM控件有很多重要的属性,其中常用的是如下几个COMMPORT设置并返回通信口号,缺省值为COM1,可设置116个。SETSTRINGS设置并返回波特率、奇偶校验、数据位、停止位的字符串。其中波特率的范围为30019200B/S。PORTOPEN设置并返回通信口的状态,同时用来打开和关闭通信口。INPUTLEN决定每次INPUT读入的字符个数,缺省为0,表示读取接收缓冲区的全部内容。INPUT读入并清除接收缓冲区的字符。INBUFFERCOUNT返回接收缓冲区已接收的字符数,通过置0可清除接收缓冲区。OUTPUT将发送的字符串或数组写到发送缓冲区。INPUTMODE定义INPUT属性获得数据的方式0为文本1为二进制9424基于CSERIAL类CSERIAL是由MUMEGATECHNOLOGIES公司提供的一个免费的VC类,可方便地实现串行通信。以下为该类定义的说明部分CLASSCSERIALPUBLICCSERIALCSERIALBOOLOPENINTNPORT2,INTNBAUD9600BOOLCLOSEVOIDINTREADDATAVOID,INTINTSENDDATACONSTCHAR,INTINTREADDATAWAITINGVOIDBOOLISOPENEDVOIDRETURNM_BOPENEDPROTECTEDBOOLWRITECOMMBYTEUNSIGNEDCHARHANDLEM_HIDCOMDEVOVERLAPPEDM_OVERLAPPEDREAD,M_OVERLAPPEDWRITEBOOLM_BOPENED1串行通信类CSERIAL成员函数简介;CSERIALCSERIAL是类构造函数,不带参数,负责初始化所有类成员变量。CSERIALOPEN这个成员函数打开通信端口。带两个参数,第一个是埠号,有效值是1到4,第二个参数是波特率,返回一个布尔量。CSERIALCLOSE函数关闭通信端口。类析构函数调用这个函数,所以可不用调用这个函数。CSERIALSENDDATA函数把数据从一个缓冲区写到串行端口。它所带的第一个参数是缓冲区指针,其中包含要被发送的资料;这个函数返回已写到端口的实际字节数。CSERIALREADDATAWAITING函数返回等待在通信端口缓冲区中的数据,不带参数。CSERIALREADDATA函数从端口接收缓冲区读入数据。第一个参数是VOID缓冲区指针,资料将被放入该缓冲区;第二个参数是个整数值,给出缓冲区的大小。425四种实现方式的分析第一种WINDOWSAPI的通信函数使用面较广,但由于比较复杂,专业化程度较高,使用较困难;第二种通信函数_JNP、_OUTP需要了解硬件电路结构原理;第三种方法使用的MSCOMM通信控件提供了标准的事件处理方式,并通过属性的方法提供了COM口参数的设置,较为容易地解决了串口;第四种方法需使用第三方提供的CSERIAL类,使用受限制,应用范围不广;本文采用第三种方式。43串口编程在VC60中,用APPWIZARD可以生成三种应用程序单文档(SDI)、多文档(MDI)和基于对话框的应用程序。为了说明问题和省去不必要的细节,下面以基于对话框的应用程序为例。431插入MSCOMM控件选择菜单项PROJECT/ADDTOPROJECT/COMPONENTSANDCONTROLS,在弹出的对话框中选择REGISTEREDACTIVEXCONTROLS文件夹下的MICROSOFTCOMMUNICATIONSCONTROL,VERSION60,然后按下INSERT按钮,接着会弹出一个对话框,提示生成的类名及文件名,按OK按钮即可实现控件的插入8。这时在对话框的控件工具栏上会多出一个电话机模样的控件图标,WORKSPACE的CLASSVIEW中也多了一个类CMSCOMM。此时即可将MSCOMM控件加入到对话框模板,加入方法与其他控件一样。然后还要在对话框类中相应加入一个成员变量,此处我们将其命名为M_COMM。加入方法为首先,在对话框模板中,用鼠标右键点击该控件,选择CLASSWIZARD,在出现的对话框的MEMBERVARIABLES标签的CONTROLIDS项下,选中IDC_MSCOMM1。然后,按ADDVARIABLE按钮,在出现的对话框的MEMBERVARIABLENAME项中输入M_COMM。最后,按OK按钮即可16。432设置属性可以在两个地方对控件的属性进行设置1对话框资源编辑器中。在对话框模板上,用右键单击MSCOMM控件,然后选择PROPERTIES菜单项,最后便可设置各项属性。此处只对以下几处进行改动,其他接受缺省设置RTHERSHOLD1,INPUTLEN1,DTRENABLE不选,INPUTMODE1BINARY。2对话框类的ONINITDIALOG函数中;下面是以上设置的函数实现BOOLCMYCOMMDLGONLNITDIALOGCDIALOGONLNITDIALOG;M_COMMSETCOMMPORT1/使用串口1M_COMMSETSETTINGS“9600,N,8,1“;/波特率为9600,无奇偶校验,8位数据位,1位停止位M_COMMSETRTHRESHOLD10/每接收10个字符就触发1次接收事件M_COMMSETSTHRESHOLD0/不触发发送事件M_COMMSETINPUTLEN10/每次读操作从缓冲区中取10个字符M_COMMSETINPUTMODE1/二进制数据传输形式M_COMMSETPORTOPEN(TRUE)/打开串口RETURNTRUE;433设置串口通过设置命令可以实现对串口参数的设置操作,包括串口的通讯端口的选择、波特率、波特率、校验位、停止位的选择等,通过对这些参数的设置可以改变通讯的方式。在执行参数设置响应函数前首先进行初始化程序,初始化程序如下IFM_COMGETPORTOPENM_COMSETPORTOPENFALSEM_COMSETSETTINGS“9600,N,8,1“/波特率9600,无校验,8个数据位,1个停止位M_COMSETINPUTMODE1/1表示以二进制方式检取数据M_COMSETRTHRESHOLD1/参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的ONCOMM事件M_COMSETINPUTLEN0/设置当前接收区数据长度为0M_COMGETINPUT/先预读缓冲区以清除残留数据在初始化完毕后,在串口通讯界面上会看到初始后的结果,串口通讯的波特率是9600、校验位NONE、数据位8、停止位1。如果需要更改设置参数可以执行SETTINGCHANGED函数,该程序流程图对应的程序如下VOIDSETTINGCHANGED/设置波特率IFM_CTRLCOMNAMESETCURSELM_CTRLCOMNAMEGETCURSELCB_ERR|M_CTRLBUADSETCURSELM_CTRLBUADGETCURSELCB_ERR|M_CTRLDATABITSSETCURSELM_CTRLDATABITSGETCURSELCB_ERR|M_CTRLPARITYSETCURSELM_CTRLPARITYGETCURSELCB_ERR|M_CTRLSTOPBITSSETCURSELM_CTRLSTOPBITSGETCURSELCB_ERRAFXMESSAGEBOX“ERROROCCURINSETTINGCHANGED“RETURNIFM_COMGETPORTOPENTHISUPDATEDATATRUE/读取内容IFM_SZCOMNAMEISEMPTY|M_ZSPARITYISEMPTY|M_SZDATABITSISEMPTY|M_SZSTOPBITSISEMPTY|M_SZBAUDISEMPTYAFXMESSAGEBOX“请设置好通信参数“RETURN/设置校验位CSTRINGSZSETTINGSZSETTINGM_SZBAUD“,“CSTRINGPARITYIFM_ZSPARITY“NONE“PARITY“N“ELS

温馨提示

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

评论

0/150

提交评论