




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在实时检测系统中用Delphi开发多线程串行通信程序骥;|目前,在各种实时检测系统中,单片机与上位机的通信的实现,有很多方案.但串行通信作为一种灵活方便可靠的通信方式,仍不失为有效的通信手段.被广泛应用于计量,工控自动化工业控制中.Bodand公司推出的Delphi是一种功能强大的高级编程语言,其具有的可视化面向对象的特性,特别适于在Windows环境下图形界面和用户程序编制.Delphi是新一代可视化开发工具,它具有功能强大,简便易用和代码执行速度快等特点.本文就介绍基于Windows95/NT操作系统如何用Delphi及使用MSCOMM32.OCX控件来实现PC机与下层PLC控制器之间的串口通信方法.一,串行通信控件简介:MSVOMM32.OCX控件是微软公司在VB,VC开发软件中随带的串行通信控件,该控件屏蔽了通信过程中的底层操作,程序员应用时只需设置和监视该控件的属性和事件,即可完成对串行口的初始化和数据的输入和输出工作,当在DELPHI5.0中安装该控件后,DEL-PHI5.0自动将它重定义为TMSCOMM类它的一些重要属性和常用的串行操作函数如下:CreatFile:打开串行口CloseHandle:关闭串行口Commport:设置并返回通讯端口号SetupComm:设置通信缓冲区的大小ReadFile:读串口操作WriteFile:写串口操作SetCommState:设置通信参数Portopen:设置并返回通讯端IZl的状态.除上述几个函数外,还要经常用到一个重要的记录DCB(设备控制块).DCB中记录有可定义的串行口参数,设置串行口参数时必须先用GetCommState函数将系统默认值填入DCB控制块,然后才可把用户想改变的自定义值设定.二,主要通讯编程思想多线程是指CPU可以分时处理多个任务,而每个任务都像独占处理器一样,当然,只有一个CPU的计算机不可能真正的同时执行多个线程,而是操作系统把时间分成若干个时间片,然后把一个个时间片分配给每一个线程,一个执行了的程序就是一个进程.一个进程则至少有一个线程.对于程序下载,可以在一个线程中进行程序下载.这样能最大程度地保证实时性,但由于程序下载的数据量很大,如果不采用多线程,程序下在时间会很长,一次引入多线程,在54质量天地一个线程中进行程序代码的下载,而在另一个线程中产生一个能动态显示下载进程的窗口.用DELPHI编写多线程程序有多种方法,如直接调用WINDOWS.API的CRETHRFAD函数或直接采用DELPHIRTL库的SYSTEM单元中已封装好了的标准例程BEGINTHRFAD来创建一个线程,但最方便的方法时采用delphi的vd库中hread对象,delphi中的可视化组件库vcl对象不是线程安全的,即delphi不支持多个线程同时访问它的vd库,但是在delphi中专门创建了一个tthread对象,封装了windowsapi和system单元中有关线程运用的多个函数和例程,利用操作系统分时段控制各个线程休眠与唤醒以达到线程工作的同步,当被唤醒后就调用hread对象的syschronize过程通知主线程,让主线程去真正地访问vcl,使得在一个应用程序中同时访问多个vcl库成为了可能,具体的创建方法详见下面的例子.三,程序实现本例是一个程序下载的子程序,待下载的程序代码放在wjSZX字节数组中,主机在发送下载命令并收到从机的通讯正确的应答信号后,将在子线程中将放置程序代码的wjSZX数组发送下去.在主线程中定义的发送子例程send如下:proceduretrtranstorm.send(varsend?value:byte);varflexiblearray:arrayofbyte;/定义动态数组OUtdata:variant;H定义变体beginsetlength(flexiblearray,1):flexiblearray(0):=sendvalue;outdata:=flexiblearray;msmmI.outputp:=outdata;end;当主机接受到一个数据后,将发生串口事件,在串口事件中接受二进制数据例程如下:msmmI,inpuUen:=l;/每次从接受缓冲区中读1个字节数据msmmI.inputmode:=l;/以二进制方式接收数据inbuf:=mscomm1.input;/读缓冲区,将数据接受至inbuf变量在delphi中,当点击filenew选择threadobject时,系统将一个子线程的框架已打好,用户须在它的execute方法中加入自己的代码,就可以实现预定的功能,程序下载子线程程序如下:typedown1oad=class(tthread)privateprocedureupdatecaption;protectedprocedureexecute;override,publicconstructorcreate(suspended:Boolean);end;implementationusesftransm;constructerdownload.create(SUS.pended:booean):begininIeritedcreate(suspended);freeonterminate:=true;end:proceduredownload.updatecaption;beginfstatfrm.1bfsize.caption:=inttostr(filesize);fstatfrm.Ibport.captioni=inttostr(gcom-mdata.port);fstatfrm.IbprotocoI.caption:=gcom-mdata.baudmte+,+gcommdata.pari?ty+,+,gcommdata.bytesize+,+gcommdate.stopbits;/串1:3参数fstatfrm.Ibfname.caption:=gxfname;fstaffrm.Ibxlen.caption:=inttostr(count);end;proceduredownload.execute,VarI:longint;Senddata:byte,BeginForI:=OtofilesizedoBeginSenddata:=waitforsendI;Ftransf0rm.send(senddata,Count:=I:Synchronize(updatecaption);/在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创立“绿色木品”品牌创新创业项目商业计划书
- 机器学习异常值检测算法创新创业项目商业计划书
- 职业安全防护知识培训
- 电信级AI语音翻译创新创业项目商业计划书
- 电竞战队品牌故事讲述平台创新创业项目商业计划书
- 智能矿山人才培养基地创新创业项目商业计划书
- 饮料制作工成本控制考核试卷及答案
- 有色液固分离工工艺考核试卷及答案
- 推拿治疗学练习题及答案详解【必刷】
- 膨胀烟丝设备操作工转正考核试卷及答案
- GB/T 10079-2018活塞式单级制冷剂压缩机(组)
- (完整版)人教版八年级下册《道德与法治》期末测试卷及答案【新版】
- 维护新疆稳定 实现长治久安课件
- 北京大学人民医院-医疗知情同意书汇编
- 体育社会学(绪论)卢元镇第四版课件
- 档案管理员述职报告9篇
- 舞台灯光基础知识教学课件
- 牙体牙髓病最全课件
- 脑卒中的功能锻炼课件
- 护理质控简报
- JJG 700 -2016气相色谱仪检定规程-(高清现行)
评论
0/150
提交评论