



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用Delphi开发PC机串行通信程序软件天地,牛用D计算机与通信1998年第2期elphi开发PC机串行通信程序摘要本文给出了在DeIphi环境下建立PC率行通信应用的过.铺方法构件句柄方法呵rrJ【于1995年推出的,基于ObjeetPASCAL编程语言的可视化Windows应用开发环境.利用Delphi中提供的可视化编程方法,丰富的构件以及开放的数据库访问接口,开发人员可以设计出功能强大,运行效率很高的W/ndos应用程序.在phi环境中,应用程序可以直接调用所有WindowsAPI函数,使Del能适应于复杂的应用设计.本文针对应用中经常遇到的串行通信程序设计,描述Delphi开发环境中串行通信实现方式以及Ddphj调用Win-dowsA函数中应考虑的一些问题加以讨论.1.Wimlows环境下串行通信编程技术介绍在DOS环境下,用户可以直接对通信设备编程,可以通过查询或中断方式使用通信设备.而Windows系统各种资源是共享的,不允许用户程序以独占的方式使用共享资源,因而实现串行通信的方式与DOS环境下有很大差异.Wi.dows环境提供了通信支持中断功能,当通信设备接收到一个输入字节时就产生一个硬件中断,该中断暂停应用程序运行,并把接收到的字节存人到一个叫接收数据队列的内存缓冲区.而待发数据也先存人一个发送数据队列内存缓冲区,再由Wiadows系统负责在后台进行发送.因而,在Windows下接收和发送数据的关键在于如何从接收数据队列取数据以及如何向发送数据队列发数据.Windows系统提供了相应的API函数实现这些功能.2.串行通信应用的创建1)创建界面这个应用中主要的构件及属性设置如下:壶【c01Name为comButtor.1rBntonlCaption寄请Butt.n2Name曲,c嗯utt.n2rButton2Caption为发迭字符jEditlName曲comEditlEdit1Maxlength为256Timer1.Interval为200(时间问孵为200ms)2)编写事件处理程序代码2,/-世绪王东王峥嵘t_送与接收及其实现方式.本侧采用定时查询方式接收数据,通过Timerl每2Ores触发一次读取接收数据过程实现接收外来数据pIli环境中程序设计是基于事件的,所以上述工作可肚在相关的事件中编写程序代码.例子中,在应用程序窗口激活事件中写入串行口初始化代码,相关代码如下所示:GetMmlSenuf.256)(分配发送教据缓冲区)GetMemRecebuf.500)舟宦接收教据搜冲匹)Cid:=Opencor,(COM2256,256)时T开OOM2ifNOq(Cid0)thenbeginFlushCommCid.0】:FlushCorm.Cid,1);清除发连.接杖队)BuildCcmnDCBcCOM2:1200,N,81,DCSl;(COM2:波特率1200无桩驻教据位8停止位1)SetCormmState(DCB);设置串行口0etc0r岫rror(Cid,Stat);清除串行口错Escapec锄Functl【】n(cid.RESETDEV;(串行口复啦Monfirmation,mbOK,C);在comBuon2的ONCIICK事件下加入向发送数据队列写数据的代码:error:=writeC(Cid.SeDdbuf,Countout);(发迭字符)?33?/计算机与通信1998年第2期iferror<0thenMessageDLG(发送错【,mtConfirmation,mbOK,0ezseEditiText:=发送完毕j;在lmerl事件下加入过程接收数据和显示的代码:Gecchin.256)chin接收数据引)count:=0ifCid)=0thenbeqincount:ReadCommCid,Chin,256;读取接收队列数据)ifG眦嘎衄Err.rcc1d,Stat)>OthenMessageDLG(串行口接啦错.清除I,mtConflrn-tion,mbOK,O);ilcount>Oth凹beginifcCountin+count),=5OCthenCountin:=0;(接收数据超过500字节.儿缓冲匹首开姑存储,数日清霉)for1=:0to(count一1】doRecebuf【i+Count.in:chin1】;Recebufcoun+Count.in:=Char【O】:f加串结束标志)Countin:=Countin+countend;endifcOldCOUntl<>Countoutlor(OldCount2<>Countin)thenbeginwinClean;调用清屏程序)winDisplay;调角显示过程OldCount1:CountoutOldCount2:Count.in;end;FreeMenchin256)?在c0rnF_蚰n1的ONCLOSEQUERY事件下加入过程EF0rml代码.ifMessgeDLG(退&?mtCofirmation.(mbOK,mbCacel1.O】=mrCancelthenCanciose:=FaiseelsebeqinCloseCcmrL(Cid)FreeMem【Semuf.256)Fred鲫Receko/f.500jf释放存储空问)释赦存储空间jend;加人自定义的显示接收数据和发送数据过程丌l】isp1和实现清屏的过程wJnClea.代码(略).3.关键技术剖析1)数据蛄构用来存放接收数据Reoeehef和待发数据SendSuf的数据?34?软件天地-一l_l一l_lll_ll_lll_ll_-_ll缓冲区均为PCIr类型,countin和countout为整型变量,分别用来记录接收和待发数据在缓冲区中的位置.接收时.接收过程从Windows串行数据接收队列中读取数据,并存放到Recebuf缓冲区中,同时修改courltin:发送肘,发送过程从Sendbuf取数据并将数据发送到Windows申行数据发送队列;显示过程分别从Beceb,ff和ndbI1f取数据进行显示.oldcount1和oldcount2分别保存上次Countout和Col1.|一in值变量Cid,DCB和Stat用于API函数间传递相关参数.(2)ObjectP.gCAL语言的强4类型转换Delpld中O耐PASCAL语言对类型检查十分严格,大多数情况下用户可通过Del口Ili中提供的函数实现不同类型变量之间的赋值,运算等操作.如本程序中使用的Sendb:CHB.(0)中的cHR(O)是将一个字节类型转换成字符类型,达到与左值类型相匹配.类似的函数还有StrPCopyO,OP,DO,IntToStrO,鼬Tnna忙0等.(3)在DelpIl下调用windOWSAPI函数在Delphi的应用程序中,系统为用户自动引入了许多常用的库单元.其中,名为WinProcs单元中包含了数百个AP函数.Dei按照windowsAPI函数的标准,以ObjectPascal语言规范重新定义了WindowsAPI函数,程序设计人员在应用程序中不用说明函数原型即可直接调用这些函数.在申行通信程序中,笔者作了大量调用WindowsAPI函数的尝试,如打开串行通信口函数Ope.Comm(),创建串行通信DCB的函数BalldCommDCB(),设置串行口函数SetCormnState(),检测并清除串行口错函数GetCommEr()等等.由于WindowsAP通常采用C语言风格描述函数原型.所以在Del#中对所有重新定义的WindowsAPI函数进行了重定义,重定义的函数名字和人口参数名字与C风格描述的函数保持一致,函数的入口参数描述采用的是O耐PAS-cAL中提供的类型说明.Delphi下的WindowsAPI函数,除了某些类型的数据用法演化得更适合ObjectP.,ZSCAL语言风格外.基本上保留了原WindowsAPI函数的名称和形式.程序设计人员可以通过查阅Delphi中提供的电子文档快速得到所有信息.程序设计人员在使用这些函数进行低层应用开发过程中,同上例一样,参照电子文档提供的人口参数类型说明直接调用windowsAPI函数.熟悉Windows编程的人员只需对Delphi中具体的WmdowsAPI函数用法加以了解便不难适应这些变化.以上绐出了一个用Del曲i编写的在Windows环境下运行的串行通信应用程序,在约定数据通信格式为8位数据位,1位终止位,无校验,波特率为12波
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030儿童餐饮娱乐化体验与家长消费决策分析报告
- 2025-2030儿童财商教育市场现状与未来增长预测分析报告
- 2025-2030儿童美术培训市场教学方法与赛事运营及线上转型趋势报告
- 2025-2030儿童礼仪培训行业市场需求与教学场景设计及品牌塑造研究报告
- 2025-2030儿童潜能开发行业市场调研与投资机会评估报告
- 2025-2030儿童时间管理课程市场需求与教学效果评估报告
- 2025-2030儿童户外拓展行业市场发展现状与趋势研究报告
- 2025-2030儿童情绪管理绘本出版趋势与家长选购偏好调研报告
- 2025-2030儿童国学教育行业市场潜力与商业模式创新报告
- 创新型人才培养方案与团队建设
- 谈话方案模板
- 表B.0.4-分包单位资格报审表(通用模板)
- 幼儿园假期安全教育内容知识
- 小学教育课件教案雪雕和冰雕的历史与传统
- 新版出口报关单模板
- 员工工资条模板
- 新教科版科学六年级上册知识点
- 初中历史小论文现状分析与写作探讨
- 新疆地方史课件
- 一粒种子旅行
- GB/T 9124-2010钢制管法兰技术条件
评论
0/150
提交评论