《现代电子技术》2006年第19期摘录:基于Delphi的串口通信实践
-
如发现有乱码,请点击下面链接浏览原文
正文摘录:
2006年第19期总第234基于Delphi的串口通信实践王静,靳引利,汪贵平(长安大学信息工程学院陕西西安710064)摘要:对Delphi中使用MSComm控件进行串口通信时,ASCII码大于127时的发送问题进行了讨论,给出了具体的解决方案,着重分析了接收程序中两种接收方法:定时器轮循法和OnComm事件法在接收数据时存在的问题,也给出了详细的解决方案。并将这些解决方案用于费额显示器测试软件的编制调试中,实践表明这些解决方案是有效可行的。关键词:串口通信;MSComm控件;数据接收;流程图中图分类号:TP311文献标识码:B文章编号:1004—373X(2006)19—127—03SerialCommunicationPracticeBasedonDelphiWANGJing。JINYinli,WANGGuiping(CollegeofInformationEngineering,Chang’anUniversity,xi’an,710064,China)Abstract:FortheuseofserialcommunicationofMSCommcontrolsinDelphi,thispaperprovidesspecificsolutionsfortheproblemthatASCIIcodeislargerthan127duringsendingdata,andanalysesspeciallytheproblemsoftwomethodsinreceiv—ingprocedure:timersamsaramethod,OnCommeventmethod,italsogivesdetailedsolutions.Thesesolutionsareusedtopro—grammeanddebugthe:testingsoftwareoffeemonitors,andtheyareeffectiveandfeasible.Keywords:serialcommunication;MSCommcontrols;datareceive;flowchart1引言在工业控制领域,我们经常需要进行计算机与其他设备之间的通信,而串行通信作为一种灵活、方便、可靠的通信方式被广泛采用。在用Delphi开发串行通信软件的过程中,一般有2种方法:一是利用Windows的通信API函数,另一种是采用Microsoft的MicrosoftCommunicationsControl(MSComm控件),他是微软的VisualBasic中提供的一个串口控件。利用API编写串口通信程序较为复杂,需要掌握大量通信知识,而利用MSComm控件则相对较简单,该控件具有丰富的与串口通信密切相关的属性及事件,通过串行端口传输和接收数据,使用方便、性能良好。但是在用MSComm控件编写串口程序特别是接收程序时,会碰到接收的数据不完全或错误的现象,本文就这方面的问题提出可行的解决方法,并通过实践验证了其可靠性。2MSComm通信控件介绍MSComm控件是微软公司在VisualBasic开发工具中提供的一个通用控件,可以作为第三方控件安装到Del—phi中。该控件把对WindowsAPI函数的调用进行封装,当用户对其属性进行赋值时,实际上是在控件的内部调用收稿日期:2006一04一06了API函数,完成对串口的操作。和所有其他的ActiveX控件一样,MSComm.OCX定义了一系列的属性,通过对缓冲区的访问和通信事件的响应完成通信。3通信方式MSComm控件有查询和事件驱动两种通信方式。前者定期查询串口缓冲区中是否有待读取的数据,每次读出缓冲区中的所有数据,同时清空缓冲区。这种方式编程实现简单,但不适宜在实时性要求较高或系统资源比较紧张的情况下使用。后者是通过Win32下的消息机制来实现的,当所希望的读写操作发生时,系统发出“事件已发生”的通知。因为不是在当前线程执行读写串口操作,故CPU利用率高,是处理串行端口交互作用的一种非常有效的方法。4串口通信中的问题及解决办法在Delphi中进行串口通信程序设计时,由于MSComm控件的input和output属性都是variant变量,Delphi能够直接将他们和字符串类型进行相互转换,所以可以直接读取MSComm控件的input属性,以及直接用字符串为output属性赋值。因此运用这两个属性就可以进行简单的数据传输。但在实践中常常会碰到一些运用常规的方法难以解决的问题,下面就介绍一下数据发送和接收时经常会遇到的问题以及他们的解决办法。127
阅读此文(图):
点击此处在线翻阅