




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi中利用SPComm 控件实现的PC 机与单片机串口通讯/365532319/blog/item/8a337a6da6a580f342169421.html2009-03-21 09:40摘 要 本文介绍一种基于Delphi语言利用SPComm控件实现PC机与单片机串口通讯的软硬件实现方法。给出硬件设计思路,介绍SPComm控件的使用发 法。详细介绍PC机与单片机多机通讯的通讯原理,通讯协议以及软件实现方法。着重介绍上位机通讯软件实现过程中几个重点环节的解决发法。 关键词 串口通讯;RS-232;RS-485;SPComm; Delphi; PC机1引言随 着计算机网络通讯与信息技术的高速发展,采用PC与多台单片机构成的分布式系统、工业控制系统、数据传输系统等越来越受到广泛应用。下位机采用运行性能较 为可靠的单片机,直接对所控制对象进行实时数据的采集、计算、判断和处理;而上位机则多采用PC机(如Pentium系列),主要负责对各单片机进行综合 管理,以实现测控系统的自动检测与控制。在这类应用系统中,稳定可靠、方便快捷的数据通信是实现应用系统功能的基础和保障。因此,如何根据系统的实际工作 环境条件,选择恰当的通信接口和协议,合理设计通信软件和硬件控制电路以获得高可靠性,强抗干扰和容错能力成为衡量此类系统好坏的最重要因素。本文以某一工程项目通讯系统为例,介绍一种基于Delphi语言利用SPComm控件实现了计算机与下位AT80C51单片机之间通信的软硬件设计与实现,并给出关键环节的具体的实现方法。2硬件系统* 本文出处:南山古桃(nsgtao)的百度空间:/nsgtao/ * 该系统以PC机作为上位主机,各下位机由AT80C51单片机组成,各下位机之间无数据传输,只与主机产生数据交换。根据该工程的特点,各单片机与PC机以RS-485总线连接。由 于微机串口通常采用RS-232电平,而单片机串口是TTL电平,二者不兼容。所以,接口必须做电平转换处理。单片机串行口的TXD、RXD经 MAX485电平转换为RS-485电平,在主机端经MAX485和MAX232转换为RS-232电平,再与微机的RxD、TxD和GND相连。为了提 高可靠性和抗干扰能力。在本项目工程中,可以对下位机主控板上的通信部分进行光电隔离。这样的话,使得即便是有超越MAX485的ESD保护范围的静电或 雷电感应在信号线上,也只会毁坏驱动器或光耦合,不至于破坏整个后级系统。同时,通信总线采用屏蔽线,各段线路屏蔽层相联接,集中到某一处,采用了必要的 接地措施。布置总线时尽量避免了与高压电或动力电线路平行,无法避免时,尽量让两者之间距离足够大。其接口系统结构图如图所示:3系统软件设计1) 通讯协议在 本系统中,PC机是主控单元,单片机是PC机信息的接受者。由于涉及到单片机多机通讯,因此串行口工作方式选为方式3,通讯格式为每11位构成一串行帧: 1位起始位(0),8位数据位(最低有效位在前),1位地址帧识别位(1),1位停止位(1),无奇偶校验位(其中第9位进到单片机RB8)。该设计中, 每次通讯过程总是由上位PC机首先发起,通讯时单片机先进入通讯状态,等待与计算机通讯。其过程分为以下几步:(1) 通讯前每台单片机设置一个地址。所有单片机SCON寄存器中的SM2位置1,准备接收地址帧。(2) PC机向所有单片机发地址帧,单片机接收到地址帧后与本机地址比较,若不同则不动作,继续等待下一个地址帧;若相同,返回本机地址确认。(3) 主机接收到地址确认后,按要求向目标发送命令字。传送数据命令:可根据要求单片机发送的数据的不同具体定义,为8位单字节数 ;接收数据命令:&EFh;(4) 目标单片机接收到命令字后:按要求动作。接收到“请求接收命令”:发&FEh(若做好接收准备),发&00h(若未准备好发送)。接收到“请求发送数据”:按指定要求发送数据。* 本文出处:南山古桃(nsgtao)的百度空间:/nsgtao/ *(5) 由于数据传输是在强干扰的环境中进行的,而且传输距离又较远,为了保证数据能高速、准确传输,软件编程考虑对大批量数据进行分组传送,同时对每组数据进行 和校验,检查其准确性。PC机每次接收到一组数据,均要进行再次和校验,然后将PC机的校验和结果和单片机传送过来的校验和相比较,若两者不等则说明传输 有错校验失败,PC机给单片机发重传命令,要求单片机重新发送该组数据。若校验正确,PC机发确认信号,并准备接收下一组采样数据。 在传输过程中上位机发送出去的数据有三类:从机地址;命令字;向下位机发送的数据包;收到的数据有两类:从下位单片机发来的确认信号;从下位机传来的数据;下位单片机接收和发送的数据与之对应不再赘述。2) 上位机软件设计在Delphi 中进行串行通讯的方法可以分成以下几种:本文采用了Spcomm 控件, 其功能强大, 使用方便, 具有丰富的与串口通讯密切相关的属性事件和方法, 提供了对串口的各种操作。其主要事件及方法如下:主要事件:Onrececvedata: 当有数据输入缓存时, 将触发该事件。OnreceiveError: 当接收数据出现错误时, 触发该事件。主要方法:Startcomm: 用于打开串口, 当打开失败时通常会报错。Stopcomm: 用于关闭串口, 没有返回值。Writecommdata: 用于将一个字符串发送到写进程。利用Spcomm控件编写上位机程序,简单快捷,灵活方便,实现过程中有以下关键点需要注意:* 本文出处:南山古桃(nsgtao)的百度空间:/nsgtao/ *(1) 地址帧的产生。由于PC机没有像单片机一样的串口工作方式,因此不能自动生成地址帧。设计软件时应人工生成地址帧。单片机串口工作在方式3时地址帧的格式如图2所示:A7 A6 A5 A4 A3 A2 A1 A0 1即八位数据后加一位“1”。因此可以利用Spcomm控件中的奇偶校验位来模拟,方法是:form1.Comm1.ParityCheck:=false;form1.Comm1.Parity:=mark;form1.Comm1.ParityCheck:=true;这样在发出的一个字节的数据末尾会加上一个“1”,也就形成了地址帧。当然在发送其他数据时,应该先把最后一位清零“0”:S3C2410 ARM9开发板800form1.Comm1.ParityCheck:=false;form1.Comm1.Parity:=space;form1.Comm1.ParityCheck:=true;(2) 在PC机端的MAX485芯片的收发状态可以利用DTR(九针串口第四针)引脚来控制。对于Spcomm控件来说,属性中有DtrControl属性,利 用该属性可以方便地对DTR引脚进行高低电平控制。该属性可以取三个值,分别为:DtrEnable,DtrDisable,DtrHandshake, 本设计中只用到前两个值。form1.Comm1.DtrControl:=DTREnable; /DTR引脚有效form1.Comm1.DtrControl:=DTRDisable; /DTR引脚无效(3) 校验和的产生。为了增强数据传输的准确性,采用校验和的检验方式。本设计里校验和的产生分两部分,一部分是发送数据之前,要对发送的数据进行累加产生校验 和发送出去,这个校验和称为源校验和(sorcechksum)。 另一部分是在接收数据是,要将接收到的数据累加产生一个目的校验(orgchksum)和用来与接收到的校验和相比较。此两部分的程序实现如下:function addchksum(sorstring:string): string;vari,j,chksum: integer;beginj:=length(sorstring);chksum:=0;for i:=1 to j do begin chksum:=(chksum+ord(sorstringi) and $FF; /产生源校验和 result:= sorstring+inttohex(chksum,2)+chr(13); /将源校验和加在发送字符串尾end;end;/*/function examchksum(var inbuf:array of char;strlen:WORD):boolean;var i:integer; sorchksum,orgchksum:integer;begin orgchksum:=0; for i:= 0 to strlen-4 do begin orgchksum:=(orgchksum+ord(inbufi)and $FF; /产生目的校验和 end; sorchksum:=strtoint($+copy(inbuf,strlen-3+1,2); /将源校验和分离出来 if orgchksum=sorchksum then result:=true /比较目的校验和与源校验和 else result:=false;end;(4) 数据的接收和发送是将一组数据看成一个String类型数据来操作的,而Delphi中使用的是Pascal字符串,因此在发送之前应该用Pchar()函数对要发送的数据进行转换:WriteCommData(Pchar(outstri),1); /参数分别为发送字符串首地址,要发送的字符串数。Spcomm控件中的数据接收发式是事件触发方式。OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object当 输入缓存有数据时将触发该事件,在这里可以对从串口收到的数据进行处理。Buffer中是收到的数据,bufferlength是收到的数据长度。 因此对于PC机来说可以通过bufflength的长度来区分数据和从单片机返回的确认信号。本设计规定命确认信号为一个字节,而数据的传输由于加上校验 和至少为两个字节。(5) 为了防止实际工作中当向某台从机发送地址帧或命令字后,如果失去接收主机发出的地址数据的机会,或因某台从机不工作而使系统陷入“死循环”程序而不能正常 工作。为了避免这种情况的发生,在设计时还要考虑一定的容错机制,本设计中采用的方法是在发送完地址帧和命令字后,程序开始计时。如果超过一定时间还没收 到返回确认信息,就重发刚刚发送的数据如果重发3确认还没收到确认信息,即报告出错,并记录该出错单片机地址。本设计利用WindowsAPI函数编写一 个延时小程序:procedure TimeDelay(DT:DWORD); /DT为延时时间(ms)var TT:DWORD;beginTT:=GetTickCount(); /调用API函数while GetTickCount()-TTDT do Application.ProcessMessages; /系统挂起end;3) 下位机软件设计根据该工程特点,通讯只在特定时间进行,因此下位机只须采用查询方式与主控机通信:当主控机需要发送或读取下位机数据时,事先控制下位机进入通讯状态,初始化串口,等待PC机请求接收和发送数据。本设计采用C51语言进行编写,下位机主程序流图如下图所示。4 结束语 经过试运行该系统工作稳定,收发数据可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年分级设备地矿勘测设备:钻探机合作协议书
- Heptadecanonyldethio-CoA-Heptadecanonyldethio-coenzyme-A-生命科学试剂-MCE
- Glycidyl-myristate-d5-Myristic-acid-glycidyl-ester-d-sub-5-sub-生命科学试剂-MCE
- 2025安徽滁州市明光市消防救援大队招聘政府专职消防员15人考前自测高频考点模拟试题参考答案详解
- 小学元旦安全教育培训课件
- 2025广东湛江市坡头区社会保险基金管理局招聘编外人员1人模拟试卷带答案详解
- 2025年琼海市校园招聘教育类专业技术人才(西安站)考前自测高频考点模拟试题及答案详解(名校卷)
- 生产安全管理制度执行记录表安全事故预防功能
- 2025年泉州德化县公办学校专项招聘编制内新任教师19人(二)模拟试卷及答案详解(考点梳理)
- 会议在线互动式管理与决策模板
- DB37∕T 4780-2024 超高层建筑物业服务规范
- 从戎装到职场:退役军人心理健康赋能讲座
- 天津农村宅基地管理办法
- 陪诊培训课件模板
- 信贷尽职调查培训课件
- 中国高血压防治指南(2024版)
- 2025至2030中国腹内压测量装置(IPMD)行业发展趋势分析与未来投资战略咨询研究报告
- 中国古画美术课件
- 2025年高考物理试卷(四川卷)(空白卷)
- 2025年儿童成长导师考试试题及答案
- 交投招聘笔试题及答案
评论
0/150
提交评论