基于c  的rs232通信协议模拟终端毕业论文_第1页
基于c  的rs232通信协议模拟终端毕业论文_第2页
基于c  的rs232通信协议模拟终端毕业论文_第3页
基于c  的rs232通信协议模拟终端毕业论文_第4页
基于c  的rs232通信协议模拟终端毕业论文_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

基于C的RS232通信协议模拟终端ANALOGTERMINALFORRS232COMMUNICATIONPROTOCOLBASEDONC学院专业班级学号学生姓名指导教师2013年06月密级公开摘要随着科技的迅猛发展,通信技术已经成为社会经济、环境、生活、工作、学习不可缺少的一部分。通信的方式多种多样,以何种方式实现通信主要取决于通信设备。在工业控制系统和实验室中,由于串行通信具有实现简单、使用灵活方便等优点,串行通信是计算机与外部设备进行数据通信时经常使用的方式之一。围绕串行通信技术,本文主要介绍了串行通信接口RS232标准串口,阐述了RS232串行通信基本原理和CRC校验,通过VC界面编程实现串行通信。传输过程中通过CRC对数据进行校验。在研究RS232串行通信原理中,主要介绍了RS232标准协议、串口以及串口通信原理。详细的分析了几种主要的通信参数。按照其工作原理及RS232串口的标准协议最终采用串行全双工的方式实现其通信,本文中的接口使用的是计算机上的USB口。在软件实现方面,本设计在比较了多种方法之后,最终选择了基于C的MFC应用程序。利用MSCOMMACTIVEX串行通信控件来实现串行通信。文中详细地介绍了VC下的WINDOWS平台先进的ACTIVEX控件技术,即MSCOMM控件等。最终实现了两台PC间的串行通信。串行通信以其成本低、结构简单等优点被人们广泛应用。用RS232协议实现两台PC机间的串行通信为以后实现更加复杂的设备间通信奠定了基础。关键词RS232标准;串行通信;C;CRC校验ABSTRACTWITHTHERAPIDDEVELOPMENTOFSCIENCEANDTECHNOLOGY,COMMUNICATIONTECHNOLOGYHASBECOMEANINDISPENSABLEPARTOFSOCIALECONOMY,ENVIRONMENT,LIVINGANDLEARNINGTHEREAREMANYKINDSOFCOMMUNICATIONMODESTHESELECTIONOFCOMMUNICATIONMODEMAINLYDEPENDSONTHECOMMUNICATIONEQUIPMENTININDUSTRIALCONTROLSYSTEMSANDLABORATORY,SERIALCOMMUNICATIONISWIDELYUSEDINCOMPUTERANDEXTERNALEQUIPMENTDUETOTHESIMPLEANDFLEXIBLEADVANTAGEAROUNDSERIALCOMMUNICATIONTECHNOLOGY,THISPAPERMAINLYINTRODUCESTHESERIALCOMMUNICATIONINTERFACERS232SERIALPORT,ANDEXPOUNDSTHEBASICPRINCIPLEOFRS232SERIALCOMMUNICATIONANDCRCCHECKITISCOMPLETEDTOREALIZESERIALCOMMUNICATIONBYVCPROGRAMMINGITCANCHECKTHEDATADURINGTHEPROCESSOFTRANSMISSIONTHROUGHTHECRCINTHESTUDYOFRS232SERIALCOMMUNICATIONPRINCIPLE,THISDESIGNMAINLYINTRODUCESTHEPRINCIPLEOFSERIALCOMMUNICATION,SERIALPORTANDRS232PROTOCOL,ANDANALYZESCOMMUNICATIONPARAMETERSINDETAILCONSIDERINGRS232SERIALPORTANDWORKINGPRINCIPLE,THISDESIGNADOPTSSERIALFULLDUPLEXMODETOREALIZECOMMUNICATIONINTHEARTICLE,THEINTERFACEISTHEUSBPORTONTHEPCINTHEASPECTOFSOFTWAREREALIZATION,AFTERSEVERALMETHODSARECOMPARED,THISDESIGNSELECTSTHEMFCAPPLICATIONPROGRAMWHICHISBASEDONCTHEDESIGNREALIZETHESERIALCOMMUNICATIONBYUSINGMSCOMMACTIVEXSERIALCOMMUNICATIONCONTROLTHISARTICLEINTRODUCESTHEACTIVEXCONTROLTECHNOLOGYMSCOMMCONTROLFINALLY,THEDESIGNREALIZESSERIALCOMMUNICATIONBETWEENTWOCOMPUTERSBECAUSEOFTHEADVANTAGESOFLOWCOSTANDSIMPLESTRUCTURE,SERIALCOMMUNICATIONISWIDELYUSEDBYPEOPLEREALIZATIONOFSERIALCOMMUNICATIONBETWEENTWOPCMACHINESISTHEFOUNDATIONOFREALIZINGMORECOMPLEXCOMMUNICATIONKEYWORDSRS232PROTOCOLSERIALCOMMUNICATIONSCCRCCYCLICREDUNDANCYCHECK目录摘要IABSTRACTII第1章绪论111课题的研究意义112研究现状及发展趋势2121RS232串行通信的研究现状2122RS232串行通信的发展趋势213本文主要的研究内容2第2章串行通信基本原理421RS232通信协议4211RS232标准4212RS232接口422串行通信5221串行通信基本原理5222串行通信参数6223串行通信的分类723串口的调制8231串口连接8232串口调试924本章小结10第3章CRC校验1131CRC校验原理11311CRC校验码的基本原理11312CRC校验码权的形式1232CRC校验的实现1333本章小结13第4章软件的实现及其测试1441开发工具概述14411WINDOWS编程与MFC14412串行通信控件MSCOMM1442程序的主要功能1543程序运行平台1744详细设计17441建立工程17442界面功能实现18443模块分析21444程序测试3445本章小结39第5章结论40参考文献41致谢43第1章绪论11课题的研究意义在发展如此迅速的信息化时代,随着计算机的普及和信息技术的发展,形成了对信息的获取传送处理利用的完整技术体系,并在此基础上形成了通信技术,它应用在生产、医疗、教育、生活等多种领域,成为现今社会生存和发展不可或缺的技术。随着通信技术的不断创新和发展以及计算机网络和多微机系统的广泛应用,USB通信技术的发展如此迅速,尽管如此,然而串口通信技术以其实现简单、使用灵活方便、数据传输可靠等优点并未面临被淘汰,反而在通信领域中一直都被人们广泛的应用。它主要被广泛应用在工业控制生产和实验室等重要领域。VC是新一代面向对象的可视化开发工具,作为一个主流的开发平台一直深受编程爱好者的喜爱,提供了良好的界面设计资源,是当下图形开发的一个比较重要的技能和手段,WINDOW图形界面编程就是VC编程开发的经典展现之一。WINDOWS图形界面编程下的MFC,全称是MICROSOFTFOUNDATIONCLASSES,它是WIN32中的应用程序,目前WIN32中基于VC60的串口通信程序一般可以用两种方法实现一是利用MSCOMMACTIVEX串行通信控件;二是使用WINDOWSAPI通信函数。其中WINDOWS平台先进的ACTIVEX技术对串口编程不再需要处理繁琐的细节。利用自带的ACTIVEX控件技术,只要编写少量的代码,就能很快的完成通信任务。伴随着科学技术的不断创新与现代化生产过程中智能化、自动化程度的不断提高,越来越多的综生产过程和工业控制系统需要应用自身的控制平台与数据采集处理,利用WINDOWS编程技术开发这样的应用程序时,其中要面临的最关键的问题是与外围监控设备连接与通信。与外围监控设备通信实际上是计算机与计算机或计算机与终端机之间的数据传递,它可以采用串行通信和并行通信两种通信方式。由于串行通信方式具有使用线路少、成本低、特别是在远程传输时,避免了很多条线路的特性不一致而被人们广泛应用。所以现在大量的智能仪器、工控设备、实验研究设备或数据采集模块都带有RS232串行通讯接口,通过相应的通讯协议和串口通讯程序,可以将测试、采集的数据传输到上位工控机,以满足各种形式后续数据处理的要求,同时整个监控系统会根据系统运行情况通过串口向监控设备发送指令,调节设备的运行参数等使得生产过程平稳进行1。所以学习RS232串行通信意义非常重大。12研究现状及发展趋势121RS232串行通信的研究现状目前,串行通信在各类领域中都得到了广泛的应用,同时它还具有较高的性价比和传输可靠性等优点。RS232被定义为一种在低速率串行通信中增加通信距离的单端标准。串行通信中的串口应用始于1960年,然而RS232的初始版本于1969年才得到认证,认证的版本号为RS232C,在这之前有RS232A、RS232B这两个版本。RS232标准主要适用于通信设备,它主要采取不平衡传输方法,即所谓的单端通信。近年来,串行技术与连接设备都得到了很大的发展,串口设备在设备电缆、工业控制和软件应用程序中得到了大量的应用,毫无疑问,串行连接技术仍然是工商业、医疗、教育和实验室等领域中所应用的广泛标志。122RS232串行通信的发展趋势RS232协议自1960年形成,1969年得到认证,一直到如今的广泛使用,始终随着各种领域应用需求的不断变化而稳步发展。未来RS232串口通信仍将在低成本、设计简单的产品中继续发挥着重要作用。低供电电压和高数据率等都将成为未来发展中新设计的普遍要求。我们坚信RS232一定会继续随着各种外围设备的不断发展而提高,同时也将继续保持通信领域中应用最为广泛这一地位的。13本文主要的研究内容本文主要通过RS232标准串口协议,使用VC编程语言实现串行通信,最终完成模拟终端的调试与仿真。在设计过程中,我通过查阅大量相关书籍和资料,研究学习了RS232标准协议和VC编程语言下的MFC界面编程,学习串行通信相关知识,通过编程软件的仿真完成了基于C的RS232通信协议的模拟终端。具体工作内容如下了解RS232协议,串口和串行通信原理。分析RS232串行通信的基本原理,并通过串口调试助手调通串口以方便接下来的操作。了解CRC校验,掌握CRC校验基本原理及应用。在VC高级语言中,利用WINDOWS下的MSCOMMACTIVEX控件,实现两台计算机间的通信测试与仿真。第2章串行通信基本原理21RS232通信协议211RS232标准RS232标准(协议)(ANSI/EIA232标准)的全称是EIARS232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232的修改次数。RS232C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。RS232协议一共有两个通道一个主通道和一个辅助通道,很多情况下主要使用的是主通道。有25条信号线,尽管有如此多的信号线,但是对于一般双工通信,仅仅需要其中几条信号线就可实现数据的传送,即一条发送线、一条接收线和一条地线。它适合于数据传输速率在020000B/S范围内的通信,即为每秒50、70、100、150、300、600、1200、2400、4800、9600、19200波特,这个标准对串行通信接口的有关问题都作了明确规定2。由于通信设备厂商都生产与RS232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用,例如在IBMPC机上的COM1、COM2接口,就是RS232C接口。它规定连接电缆、机械、电气特性、信号功能及传送过程等。同时,由于RS232标准具有连线简单、通讯距离长等优点,目前也广泛应用于微型计算机系统、工控机和大型设备系统中。212RS232接口RS232标准是按负逻辑定义的,它的“1”电平在515V之间,“0”电平在515V之间。RS232接口是标准串行接口,其通讯距离小于15M,它的传输速率小于20KBS。RS232串行接口属于个人计算机(PC)及电信应用领域中最为成功的串行数据标准。是目前PC机与通信工业中应用最广泛的一种串行接口。现在的计算机一般至少有两个串行口COM1和COM2,新一代的计算机主要以9引脚的D型口接出所有的RS232通信信号及控制线(有的计算机的串口为25引脚)3。在RS232的通讯标准中是以一个25针的接口来定义的,25针的接口在早期的计算机如PC或XT机型上广泛使用,但在AT机以后的机型上,实际均采用了9针的简化版接口应用,现在所说的RS232通讯均默认为9针的接口4。现在大多数个人计算机几乎都没有串口,大多采用USB接口,所以要实现个人计算机与外围设备进行通信大多采用RS232转USB接口。RS2329针通讯的接口图如图21所示。图219针通讯接口22串行通信221串行通信基本原理两个设备之间交换数据的过程我们称之为通信。从同时传输的数据位数来分通信方式可以分为串行通信(SERIAL)和并行通信(PARREL)。并行通信中所传送数据的各位同时发送或接收。串行通信中所传送数据的各位按顺序一位一位地发送或接收。两种基本通信方式如图22所示吗A并行通信B串行通信图22两种基本的通信方式计算机1计算机或外设2GNDGND计算机1计算机或外设2GNDGND从上面的图中可以看到,并行通信成本高,并须使用多条通信线,而串行通信只需使用两条通信线就可以完成两个设备间的数据交换,大大降低了通信成本,串行通信又以其串行线间的干扰小得到了广泛的应用。串行通信大多数用于WINDOWS开发的应用程序与外围数据源设备之间的数据交换。串行通信是通过串行端口实现的。串行端口的本质功能是作为CPU和串行设备间的编码转换器5。当数据从CPU经过串行端口发送出去时,数据格式由字节数据转换为串行的位(BIT)。在接收数据时,数据格式由串行的位(BIT)被转换为字节数据。222串行通信参数串行通信在数据交换过程中,要对几个重要的通信参数进行设置,其中包括波特率、数据位、停止位、奇偶校验位等。1波特率所谓波特率就是每秒中传送的二进制位数,其单位是BPS(BITSPERSECOND),用来描述数据的传送速率,是衡量串行通信数据传输速度快慢的重要指标。国际上对波特率规定了一个标准系列110BPS、300BPS、600BPS、1200BPS、1800BPS、2400BPS、4800BPS、9600BPS、144KBPS、288KBPS、336KBPS、56KBPS。例如9600BPS,是指每秒传送数据9600位,其中包含字符的数位和其它必须的数位。串行接口电路的接收波特率和发送的波特率可以设置,要求接收方的接收波特率必须与发送方的发送波特率是一致的。在串行通信中,通信线上所传输的字符数据(代码)是逐位传送的,一个字符由若干位组成,所以每秒钟所传输的波特率和字符数(字符速率)是完全不同的。有时也用“位周期”来表示传输速率,位周期是波特率的倒数。2数据位数据位是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。怎样决定数据位的取值取决于传送的信息。数据一般为58位,它在起始位的后面,是衡量传送字符的有效数据位的个数。传送时先传送字符的低位,后传送字符的高位。数据位可以由硬件或软件设备进行设置,用来满足设备间数据交换的需要。3停止位停止位一般为1、15和2位,用来表示单个包的最后一位。停止位不仅仅是表示传输的结束,还为计算机提供校正时钟同步的机会,由于数据是在传输线上定时的,并且每个设备都有其自己的时钟,很可能在通信中要进行数据交换的两台设备间出现小小的不同步,停止位的设置就是为了避免其中小小的不同步6。停止位的位数的设置可以由设备的软件设置,停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率相应地也会越慢。4奇偶校验位在串行通信中奇偶校验是一种简单的检错方式,奇偶校验位仅占一位,用于进行奇校验和偶校验,同时也可以无校验位。对于奇校验和偶校验,串口会设置校验位,是数据位后面的一位,用一个值保证传输的数据有偶个或者奇个逻辑高位。例如,如果数据是001,那么对于奇校验,校验位是0;如果是偶校验,校验位是1。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者传输和接收数据是否发生了不同步。223串行通信的分类串行通信又可以分为同步串行通信和异步串行通信两类。同步通信是一种在发送端发送一个抑制载波的双边带信号,而在接收端恢复载波,再进行检波的通信方式。是按照软件识别同步字符来实现数据的发送和接收。它是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。信息中含有若干个数据字符。它们均由数据字符、CRC即同步字符和校验字符组成。因为恢复的载波与被接收的信号载波同频同相,故取名为同步通信,也称抑制载波双边带通信。异步通信数据通常以字符或者字节为单位组成字符帧传送,字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收7。异步通信通常有两个非常重要的指标即字符帧格式和波特率。发送端和接收端可以由各自的时钟源来控制数据的发送和接收,这两个时钟源彼此独立,互不同步,接收端检测到传输线上发送过来的低电平逻辑“0“(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕3。异步通信有自己的的缺点,其缺点是它在通信时的传输效率较低。当然它也具有自己独特的优点,其优点就是它的通信设备简单、便宜。23串口的调制231串口连接现在大多数计算机外用接口都是USB口,外用接口很少有串口的,并且现在的个人计算机的串口大多都是简型的9针串口。所以要想通过串行通信实现与外围设备数据交换,必须用USB转RS2329针串口转换线。9芯管脚图如图23所示。图239芯管脚图表219针管脚各引脚名称功能图九针串口针号缩写功能说明信号来源1DCD功能说明调制解调器2RXD接收数据调制解调器3TXD发送数据PC4DTR数据终端准备PC5GND信号地6DSR数据设备准备好调制解调器7RTS请求发送PC8CTS请求发送调制解调器9DELL振铃指示调制解调器目前,市场上使用的串口有9针管脚的还有25针管脚的。在RS232的通讯标准中是以一个25针的接口来定义的,并且在早期的计算机中,如PC机或XT机型上得到了广泛地使用,但是在AT机以后的机型上,实际上均采用了9针管脚的简化版本应用,现在所说的RS232通讯均默认为9针的接口。图23显示了9针通讯的接口管脚,9针管脚的串口各引脚名称、功能和信号来源各不相同。表21说明九针管脚的串口各引脚的名称,功能说明和信号源等。由表21可知要想实现两台个人计算机间的数据交换,可以将两个USB转RS232线的接口头的2、3引脚交叉对接,两个5脚相接即可,具体接法如图24所示,然后再讲两个USB接头与两台电脑相连。图24USB转RS232线的连接图232串口调试实现个人计算机与外围设备间的串行通信必须将个人计算机上的串口调通,验证一下个人计算机上的串口是否好用。这就需要用到串口调试小助手。首先将一根USB转RS232转换线的2、3引脚短接,然后将带有“驱动程序”的光盘放入个人计算机中,安装并运行与自己计算机相匹配的驱动程序,接着将转换线的USB端插入个人计算机的USB口,即完成了初步的安装。打开设备管理器,看一下所插入的转换线占的是哪个串口,因为在接下来调试串口要用到。串口调试助手是一个专门用来调试串口程序的功能软件,要想测试串口是否可用,应先打开软件,选择串口号,打开串口,在发送区输入内容,点击发送按钮,若在接收区中有所发送的内容,则证明此串口可用。24本章小结本章从原理上介绍了串行通信的基本原理,详细的阐述了RS232标准协议接口和与串行通信相关的一些知识。介绍了通信参数与串行通信的分类。为下文编写WINDOWS应用程序实现两台PC机进行数据交换提供了基础。第3章CRC校验31CRC校验原理311CRC校验码的基本原理早期的通信由于受到外界各种因素的干扰,会造成传输、接收信号的不准确。这主要是由通信技术不可靠性决定的。这样不可靠的通信就会带来“确认信息”的麻烦,造成一些事情的延误等。为了避免这一弊端,在进行数据交换,通信的过程中,对通信的可靠性检查就需要校验,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。如早期一样目前在通信系统的数据传输过程中,由于信道中各种复杂因素的影响,使传输的信号受到干扰,造成传输过程中误码的出现8。接收方为了检查所接收的数据是否有误码,可采用多种检测方法。差错控制编码是目前数据传输过程中普遍采用的一种提高数据通信可靠性的方法,而CRC是一种在实际通信中应用很广泛的差错控制编码,具有很强的检错能力。CRC(CYCLICREDUNDANCYCHECK循环冗余校验码是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定,CRC循环冗余校验码的基本原理是任意一个由二进制位串组成的代码都可以和一个系数仅为0和1取值的多项式一一对应9。例如代码101011对应的多项式为,而多项式为对应的代码1100101。CRC135X1256X校验码是在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。CRC校验码的生成借助于多项式除法,其余数为校验字段。其中发送方发出传输字段,传输字段由两部分组成的,分别为信息字段和校验字段10,11。接收方使用相同的生成码进行校验,若接收到的字段或生成码(二进制除法)如果能够除尽,则说明在通信过程中,数据交换期间未受到其他因素的干扰,消息收发成功。312CRC校验码权的形式CRC校验码有很多种权的行式,使用哪一种形式是根据通信双方共同制定的“规则”而定的,其中各种常用权的形式如下所示(31845XCR1)(35126IT2)(311651XCR3)(322314)1012623263XXXCR(34578X5)以其中CRCCCITT形式为例。图31说明了CRC校验中CRC值是如何计算出来的,体现的多项式正是式(35)。从把数据移位开始计算,将数据位(从最低的数据位开始)逐位移入反向耦合移位寄存器。当所有数据位都这样操作后,计算结束。此时,16位移位寄存器中的内容就是CRC码。图31中X5代表BIT5,X12代表BIT12,1是代表BIT0,16X比较特别,是指移位寄存器移入的数据。图31生成CRCCCITT的移位寄存器的作用原理32CRC校验的实现实现CRC校验有很多种算法和方式,最基本的算法应该是按位计算了,这个方法可以适用于所有长度的数据校验,是最为灵活的,但由于是按位计算,其效率并不是最迅速、最优的,只适用于对速度不敏感的场合。还有一种是按照字节计算CRC校验码,按字节校验是每次计算8位数据,多是基于查表的算法,首先要准备一个表,一共256项。在使用的时候,把计算出来的校验值放在最后两个字节里,将其发送出去,接收端对所有的数据进行相同的校验,如校验值为0我们则认为其数据没有出错。这个是按高位到低位的发送顺序时使用的校验方法。33本章小结本章介绍了通信中最常使用的校验方法,即CRC校验。分析了CRC校验原理、算法形式和算法的实现。并通过CRC校验实现通信中的检错。第4章软件的实现及其测试41开发工具概述411WINDOWS编程与MFCWINDOWS编程大致有两种方法,一种是WINDOWSC方向,即SDK方向,调用WIN32API函数,主要是利用C语言来实现软件的功能与编程;另外一种方法是C对SDK函数进行包装,如VC的MFC(微软基础类库),BOB的OWL等12,13。其中使用MFC直接编写提供大量预先编好的类和支持代码或使用MFC和向导(WIZARDS)编写,用APPWIZARD来生成WINDOWS应用程序框架。本次软件程序设计功能的实现主要利用WINDOWS编程中MFC(利用C语言)。MFC提供了构造WINDOWS应用程序的框架,它不仅为应用程序建立标准的结构,还为其提供了标准的图形用户界面如菜单栏、工具栏、状态栏等,开发人员只需要在此基础上添加针对特定应用的代码即可。使用此应用程序框架有很多优点,如其应用程序代码小,运行速度快,并且此应用程序提供的工具也降低了编码的难度等。WINDOWS应用程序的框架主要有两种类型,一种是基于对话框的应用程序框架,另外一种是基于文档、视图结构的应用程序框架。平大家所见到的大多数WINDOWS应用程序均属于这两种框架。MFC的全称是MICROSOFTFOUNDATIONCLASSES。是微软把WINDOWSAPI进行封装的类库,该类库以层次结构组织起来,其中封装了大部分WINDOWSAPI函数和WINDOWS控件14。1989年微软公司成立APPLICATIONFRAMEWORK技术团队,名为AFX小组,用以开发C面向对象工具给WINDOWS应用程序开发人员使用。启用MFC编码可以使WINDOWS程序员能够利用C面向对象的思想进行编程,用好的类作为标准,减少代码的编写量15。412串行通信控件MSCOMM目前,以WINDOWS下的MFC应用程序为主要的框架,常用的基于VC的串行通信编程一般可以用两种方法实现一种是使用WINDOWSAPI通信函数。虽然在WINDOWS下WIN32API提供了使用文件操作方式的函数进行串口操作的方法,但是在编程实现上还是比较复杂。其余一种是利用MSCOMMACTIVEX串行通信控件。WINDOWS提供的ACTIVEX控件利用它本身带的MSCOMMACTIVEX控件,只需要程序员编写少量的代码,就能轻松完成任务,这样就使得对串口编程不再需要处理烦琐的细节。程序员就不需要花费大量时间去了解API函数,只需要利用MSCOMM控件就可实现串口通信编程16。所以,本次实现两台PC间的通信使用的就是MSCOMM控件。42程序的主要功能实现两台PC机之间的通信的应用程序,主要实现了密码登陆、参设设置、参数显示、打开串口、关闭串口、数据发送、数据接收、CRC校验等功能。主要功能框图如图41所示。图41主要功能框图应用程序主要实现的功能如图41所示的主要功能框图,此应用程序的总体程序流程图如图42所示。主函数密码登录参数设置打开串口关闭串口接收数据发送数据开始十六进制显示CRC校验图42程序流程框图使用此应用程序时,需要有正确的用户名和密码才能登录到此软件的主界面,登录到主界面后,要想实现两台PC间的通信则需要选择可用的串口号并调用初始化程序登录验证是否正确主界面是否选择16进制选择串口并打开是否选择CRC校验输入数据并发送登录界面NY选择CRCNY数据发送完成关闭串口结束设置参数NYNY选择16进制且传输参数要一致,其中包括波特率、数据位、停止位、奇偶校验位等,只有设置对的参数才能实现数据交换的功能。在发送接收数据过程中需要打开串口。通信结束后,关闭打开的串口。能够发送单个或多个数据。能够接收和显示多个数据,并且能够通过CRC校验检查接收的数据是否正确。程序流程图如图32所示。43程序运行平台在程序设计时,原计划使用VS2008软件,但是由于电脑、操作系统等各种原因,就改用VC60这个软件。44详细设计441建立工程要实现通信,首先应先建立工程,即新建基于WIN32的MFC应用程序。首先打开VC60软件,建立基于对话框的MFC应用程序。并将这个应用程序命名为通信17,18。然后在将基于对话框选中(如图43),直接下一步即可,最后直到完成。图43建立基于对话框应用程序过程图按照如上所示的方法步骤,建立WIN32下的MFC应用程序工程,应用程序工程名为“通信”,最后点击完成按钮,就会出现MFC应用程序初始界面如图44所示19。图44应用程序最初界面442界面功能实现1登录界面登录界面的设计除了应用MFC中的控件和工具外,要想实现其用户名和密码的验证功能还利用了数据库的知识。本次登陆界面使用的数据库是微软的ACCESS数据库。ACCESS数据库是一个小型的数据库,使用起来非常的灵活、方便。对ACCESS数据库的连接与操作有很多种方法,例如在ASP中建立对ACCESS数据库的连接、使用RECORDSET对象操作ACCESS数据库、使用SQL指令操作数据库、使用DSN连接ACCESS数据库等。其中使用DNS连接ACCESS数据库方法中,在定义DSN的时候,就已经指定好了数据源需要的ODBC驱动程序,也指定好了数据库文件的实际路径和名字,我们在程序中,只需要引用预先定义的数据源名DSN即可20,21。首先,启动MICROSOFTOFFICEACCESS,建立ACCESS数据库,命名为DEMO01,然后在数据库中创建一个表,命名为PUSER,在表PUSER中输入序号(USERID)、用户名(USERNAME)和密码(USERPWD),将这个数据库保存。最后为ACCESS数据库DEMO01建立数据源,利用ODBC驱动。数据库和数据源建立完成后,开始用MFC建立登陆界面。数据库中用户名和密码如图45所示。图45数据库中用户名和弱密码运行应用程序时,若输入了错误的用户名或密码,则系统会提示输入错误。若输入用户名和密码正确,即与ACCESS数据库表LOGIN内容相一致,点击登录按钮,出现提示正确,点击确定按钮应用程序的界面会由登陆界面跳转到主界面,开始进行数据交换。登陆界面如图46所示。图46登录界面2主界面主界面是整个应用程序的主体,大致可划分为三部分,有接收区、发送区和设置区。接收区由静态文本框和编辑框组成;发送区同样也是由静态文本框和边界框组成;设置区由组合框、复选框、按钮和静态文本框组成。完整的主界面如图47所示。图47主界面3参数设置界面完成两台PC机间的串行通信(数据交换),必须保证两个串口的通信参数一致,这样就需要将两个应用程序的通信参数重新设置,通信参数包括波特率、数据位、停止位、奇偶校验位等。相应的通信参数设置完成后,点击【确定】按钮,应用程序则会再次跳转到主界面(数据收发界面),若想取消设置则点击取消按钮,参数设置界面关闭,回到主界面。界面的具体情况如图48所示。图48设置界面443模块分析1用户名密码登录模块在登录界面下,在编辑框中输入用户名和密码,单击界面中的【登录】按钮,可以验证用户名密码输入是否正确,若正确登录,程序提示“登陆成功,欢迎使用”,然后登陆界面关闭显示主界面,若输入错误则程序提示“密码用户名错误,请重新输入”。需要重新输入和验证,验证通过后才可以登录。实现该功能的程序流程图如图49所示,实现该功能的程序代码如下开始是否登录YN图49用户名密码登录模块流程图VOIDCMYLOGINONBNCLICKEDOK/TODOADDYOURCONTROLNOTIFICATIONHANDLERCODEHEREONOKVOIDCMYLOGINONOKTODOADDEXTRAVALIDATIONHEREUPDATEDATATRUE/读取编辑框内容CUSERRECORDSETM_USER/新建的类,是基于CRECORDSETTRYIFM_USERISOPEN/判断记录集是否打开M_USERCLOSE/若打开则将其关闭M_USERM_STRFILTERFORMAT“USERNAMESANDUSERPWDS“,M_USERNAME,M_USERPWD/用来作为检索条件,字符串格式化输出输入获取信息密码用户名是否一致登录成功,转到主界面结束点击退出按钮YNM_USEROPENCRECORDSETSNAPSHOT,NULL,CRECORDSETNONEIFM_USERISEOF/密码用户名不一致()M_USERCLOSEAFXMESSAGEBOX“用户名、密码错误,请重试“RETURNELSEM_USERCLOSEAFXMESSAGEBOX“登录成功,欢迎使用“CDIALOGONOKCATCHCDBEXCEPTIONE/TRYCATCH是捕捉异常,即先执行TRY若成功则结束/若失败则执行CATCH捕捉异常并输出EREPORTERRORRETURN2应用程序初始化实现先显示登陆界面后主界面,利用MFC中的模式对话框在初始化函数中来实现,若串口是打开的则关闭串口,同时串口参数的设置也是在初始化函数中设置实现的。初始化的程序流程图如图410所示。具体程序代码如下面所示开始显示登陆界面串口是否打开N图410初始化流程图BOOLCMYDLGONINITDIALOGCDIALOGONINITDIALOG/TODOADDEXTRAINITIALIZATIONHERECMYLOGINMYMYDOMODAL/显示登录界面IFM_CCOMMGETPORTOPEN/如果发现串口本来是打开的,则关闭串口M_CCOMMSETPORTOPENFALSEM_CCOMMSETCOMMPORT4/选择COM4端口M_CCOMMSETINPUTMODE1/输入方式为二进制方式M_CCOMMSETINBUFFERSIZE1024/设置输入缓冲区M_CCOMMSETOUTBUFFERSIZE512/设置输出缓冲区M_CCOMMSETSETTINGS“9600,N,8,1“/波特率,无校验,数据位,停止位RETURNTRUE3设置、打开和关闭串口功能设置参数结束关闭串口Y图411设置、打开和关闭串口流程图串行通信是通过串口实现数据交换的,但是PC机上有不止一个串口,需要我们设置进行串行通信端口号,并将串口打开,通信结束后将串口关闭。程序流程图如图411所示,实现其功能代码如下VOIDCMYDLGONOPENIFM_CCOMMGETPORTOPENM_CCOMMSETPORTOPENFALSECMYDLGMD1UPDATEDATATRUEMD1M_COMNM_COMNM_CCOMMSETCOMMPORTM_COMN1/设置串口号开始设置串口号打开串口关闭串口结束M_CCOMMSETINBUFFERSIZE1024/接收缓冲区M_CCOMMSETOUTBUFFERSIZE1024/发送缓冲区M_CCOMMSETINPUTLEN0/设置当前接收区数据长度为,表示全部读取M_CCOMMSETINPUTMODE1/以二进制方式读写数据M_CCOMMSETRTHRESHOLD1IFM_CCOMMGETPORTOPENM_CCOMMSETPORTOPENTRUE/打开串口M_CCOMMSETRTHRESHOLD1/每当接收缓冲区有个字符则接收串口数据M_CCOMMSETINPUTLEN0/设置当前缓冲区长度M_CCOMMGETINPUT/预读缓冲区以清除残留数据ELSEAFXMESSAGEBOX“打开端口失败“,MB_ICONSTOP,0VOIDCMYDLGONCLOSE/关闭串口M_CCOMMSETPORTOPENFALSE4实现数据交换模块使用MSCOMM通信控件是MFC中进行串口通讯最简单的。MSCOMM通信控件提供了一系列标准通信命令的接口,它可以建立串口连接,可以连接到其他通信设备(如MODEM)还可以发送命令、进行数据交换以及以及监视通信中的干扰,从而可以用它创建全双工、事件驱动的、高效实用的通信程序22,23。加入MSCOMM通信控件,实现从缓冲区中读取数据,同时将数据给接收变量,更新接收区编辑框的内容。实现此模块的程序流程图如图412所示,其功能代码如下开始接收缓冲区内是否有字符N图412数据交换模块流程图代码如下VOIDCMYDLGONONCOMM/TODOADDYOURCONTROLNOTIFICATIONHANDLERCODEHEREVARIANTVARIANT_INPCOLESAFEARRAYSAFEARRAY_INPLONGLEN,KBYTERXDATA512/设置BYTE数组CSTRINGSTRTEMPIFM_CCOMMGETCOMMEVENT2/值为表示接收缓冲区内有字符VARIANT_INPM_CCOMMGETINPUT/读缓冲区消息SAFEARRAY_INPVARIANT_INP/变量转换将缓冲区内字符给接收变量结束Y是否以16进制显示将缓冲区内字符以16进制给变量NY计算接收数据的CRC值更新编辑框内容LENSAFEARRAY_INPGETONEDIMSIZE/得到有效的数据长度FORK0KLENBREAKLSTRSTRIHEXDATACONVERTHEXCHARHSTRLOWHEXDATACONVERTHEXCHARLSTRIFHEXDATA16|LOWHEXDATA16BREAKELSEHEXDATAHEXDATA16LOWHEXDATAISENDDATAHEXDATALENCHARHEXDATAHEXDATALENSENDDATASETSIZEHEXDATALENRETURNHEXDATALENCHARCMYDLGCONVERTHEXCHARCHARCHIFCH0ELSERETURN1444程序测试首先,直接双击通信文件夹下的DEBUG子文件夹下的通信EXE运行文件;其次,按以下步骤进行测试1登录输入错误密码,程序提示“密码、用户名错误,请重试”如图416所示。图416用户名密码不一致输入正确用户名和密码,程序提示“登录成功欢迎使用”如图417所示。图417用户名密码正确2串口和参数的设置登陆成功后跳转到主界面,通信之前要设置可用的串口号,设置串口号时若没有选对串口号,应用程序会提示不可用的串口,直到设置了可用的串口号24。然后需要打开串口,点击【打开串口】按钮,程序会提示串口打开成功,最后设置通信参数,点击【设置】按钮,跳转到设这界面,根据需要选择通信参数,如果保存设置就点击【确定按钮】否则点击【退出】按钮,之后又回到了主界面,现在即可进行数据的发送了。如图418所示。图418设置串口和参数3发送数据选择串口号,并将此串口打开,设置通信参数完成后,在发送区内的编辑框输入要发送的内容,然后点击【发送】按钮,发送去编辑框里要发送的内容会通过此串口发送到另一个端口的接收区的编辑框内,并在接收区的编辑框内显示了发送的内容,同理也可在另一个串口的发送区编辑框内输入数据,此数据也可发送到本串口的编辑框内,也会在接收区的编辑框内得到显示,如图419所示。即串口3的内容“”发送到了串口4中,串口4的内容“”可以发送到串口3的接收区,并在编辑框中得到显示。图419发送接收数据4十六进制显示和计算CRC值设置完成各参数后,选择十六进制发送、接收复选框和计算CRC数值复选框,点击【发送按钮】,可以看到在接收区字符是以十六进制形式显示的,接收和发送的CRC值在编辑框中显示,这样就可以判断发送的内容是否受到干扰。如图420所示。图420十六进制显示和计算发送接收数据CRC值5关闭串口退出整个应用程序发送数据结束后,关闭串口,点击【退出】按钮,程序提示“谢谢使用再见”。如图421所示图421系统提示框45本章小结本章介绍了WINDOWS编程下的MFC和串行通信控件MSCOMM,详细的描述了利用MFC和串行通信控件MSCOMM实现两台PC机间的数据交换的设计概述、模块功能、代码实现等。并对此应用程序进行了运行测试。第5章结论通过RS232标准协议接口,用WINDOWS编程下的MFC应用程序,基于C语言的串行通信,基本实现了两台PC机间的数据交换。主要功能有用户名密码验证登录、设置串口号、打开串口、关闭串口、设置通信参数等。了解了串行通信接口,即RS232标准以及接口,学习了串行通信的基本原理,串行通信的通信参数,例如波特率、数据位、停止位和奇偶校验位等。掌握了串行通信的基本概念。学习了一些数据库的相关知识,利用了数据库中最简单、最方便的MICROSOFTOFFICEACCESS数据库,通过ODBC建立数据源来实现用户名密码登录验证功能。实现通信功能时,综合考虑了多种能实现通信的方式后,最终选择了WINDOWS编程下的MFC应用程序,使用C语言实现串行通信,其中使用的是MSCOMM控件。应用程序实现了选择串口、打开串口、关闭串口、发送接收数据等功能,同时又可通过应用程序设置通信参数(包括波特率、数据位、停止位和奇偶校验位等)。由于通信过程中,被传递的数据有可能受到各种因素的影响,造成数据丢失,更改等,影响发送接收数据的准确性。所以通信过程中要对接收到的数据进行校验。最简单的校验是奇偶校验,通过统计接收数据中二进制数0和1的个数,来确认收到的数据是否正确。但此方法只能简单验证不准确。所以对通信过程中数据交换准确度的验证采用了比较准确的方法即CRC校验,CRC校验全称CRC

温馨提示

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

评论

0/150

提交评论