基于RS-485总线的PC与多单片机间的串行通信

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

0前言单片机因其优越的性价比和灵活的功能配置而被广泛的应用于测控领域。而PC则因为丰富的软、硬件资源,被广泛应用于网络监控系统中。这就是一台PC与多台单片机所组成的主从式网络测控系统。串行通信是计算机和外部设备进行数据交换的重要渠道,由于其成本低,性能稳定并遵循统一的标准,因而在工程中被广泛应用。本文以华东石油局的一台油田钻井的滚动轴承信号采集系统为例,讨论一种基于串行通信标准的测控系统的通信协议及其具体的软、硬件实现。在本系统中,上位机以PC和Windows操作系统为软、硬件资源;下位机采用ATMEL公司89C51,总线标准采用的是测控系统常用的RS-485。1通信系统的硬件设计尽管RS-232有些缺点,但在两台短距离设备间的短距离信息传输时,最通用的还是RS-232。但对于多台设备的长距离传输,它就很难实现。而RS-485是一个多引出线接口,这个接口可以有多个驱动器和接收器,可以实现一台PC和多台单片机之间的串行通信;而且RS-485的最长的传输距离为1200m,适合中距离的传输。本文针对油田钻井的滚动轴承信号采集及传输,根据工地实际工作环境,采用RS-485通信接口。1.1PC和RS-485总线的接口[3]该接口的主要功能是完成RS-232到RS-485的转变,完成这个功能的芯片很多,比如MAX-485,我们的系统采用的是ADAM公司的ADAM4250,RS-232/RS-485转换器,结构如图(1)所示:图1ADAM42501.289c51和RS-485总线的接口[1],[4]由于MAX48x/49x系列收发器组成的差分平衡系统抗干扰能力强,接收器可检测到200mV的信号,传输的数据可以在千米以外得到恢复,特别适合远距离通信,可以组成标准的通信网络。本系统采用MAX487接口芯片作为收发器,由于它的输入阻抗是标准接收器的4倍,因此最多可以挂128个接收器。1.3系统的总体连接本系统采用一主多从的总线型连接方式,如图2所示。为了消除反射,吸收噪音,采用2个120的匹配电阻R1和R2连在总线的两端。其中n不大于128。图2系统总体连接图2通信协议的设计由于RS-485通信是一种半双工通信,发送和接受共用同一物理通道,在任意时刻只允许一台单片机处于发送状态,因此要求应答的单片机必须在侦听到总线上呼叫信号已经发送完毕,并且在没有其他单片机应答信号的情况下才能应答。如果在时序上配合不好,就会发生总线冲突,使整个系统的通信瘫痪,无法正常工作。上位机与下位机之间如何进行数据传输,怎么提高通信的效率和可靠性,以及对通信过程中的故障处理,帧格式的约定,都需要一套详尽的通信协议。RS-485总线只制定了物理层电气标准,对上层通信协议没有规定。这给设计者提供了很大的灵活性。一套完整的通信协议既要求结构简单,功能完备,又要求具有可扩充性与兼容性,并且尽量标准化。本系统的协议就是从这几个方面考虑的,它主要包括以下几个部分:2.1上下位机间的通信过程(1)通信均有上位机发起,下位机不主动申请通信;(2)当处于轮询状态时,上位机依据下位机地址,定时向下位机发送呼叫指令。此时,每台下位机都中断接受并判断,地址不相符的下位机中断返回,执行其他下位机任务;反之则把本机地址及其状态作为应答信号发送给上位机。上位机接收到应答信号后,可以作进一步的处理。2.2通信协议本系统采用比较简单的通信协议:PC机需要与单片机通信时,首先发送一个字节的信号,以16进制表示为AAH,单片机接收到AAH后,就将需要发送的数据连续地向PC机发送;PC机与单片机通信结束时,向单片机发送一个字节的信号,以16进制表示为55H,结束数据发送。单片机发送给PC机的数据格式为:开始码数据体校验和结束码00HDATA[0]DATA[1]…DATA[N-1]DATASUMFFH3通信系统的软件设计3.1上位机通信软件设计本系统的上位机软件用VB6.0实现,利用VB6.0提供的MSComm通信控件,可以方便的访问串口,实现数据的接收和发送。由于本系统用一台上位机监控多台下位机,所以上位机监控界面主要包括3个:(1)轮询界面,即主监控界面。可以监测到下位机的状态(运行,停机,故障)。考虑到通用型,下位机的台数可以根据实际需要添加或删除,最多可带128台下位机。本系统默认为50台。(2)下位机运行监视和控制界面。主要是对某一台定位控制器进行状态监视和位置给定。(3)下位机内部参数设定界面。可以根据实际需要对某一台定位控制器的运行参数进行修改。开发通信程序的关键是发送和接受数据。下面给出上位机中数据发送和接收的部分程序:MSComml.Settings=Settings;串口的波特率设置send_arr0(0)=&H02;数据发送数组send_arr1(0)=BPQ_Address……send_arr7(0)=send_arr1(0)Xorsend_arr2(0)…Xorsend_arr6(6)Output_Enable=False;关闭轮询Open_Port;开串口MSComm1.RTSEnable=False;置发送状态MSComm1.Output=send_arr0;发送Choose_Delay;发送延时MSComm1.Output=send_arr1Choose_Delay……MSComm1.Output=sen_arr7Choose_DelayMSComm1.RTSEnable=True;置接收状态Choose_Frame_delay;接收延时Accept_arr=MSComm1.Input;数据接收数组Forj=Lbound(Accept_arr)ToUbound(Accept_arr)IfUbound(Accept_arr)=7ThenBuf(j)=buf(j)+Str(Accept_arr(j))由于程序较长,对程序其它部分不详细叙述,这里只列几个注意点:(1)由于采用半双工传输方式,开始发送前要禁止接受。发送结束后要先关闭发送再开启接收,以保证数据传输的正确性。(2)发送以字节为单位,每个字节间要考虑延时,以免因溢出而丢失数据。延时时间主要取决于传输时所确定的波特率。(3)接收数据也要考虑延时,以等待下位机将一个单位的数据全部发给上位机。3.2下位机通信软件的设计[2]本系统中的单片机采用的是ATMEL公司89C51,这是在国内应用相当广泛的一款单片机,程序用C51来编写,从实时性角度来考虑,下位机的通信方式采用中断方式。这样下位机程序就包括了下位机主程序和下位机中断服务程序。主程序用于定时器T1初始化、串行口初始化和中断初始化。中断服务程序用于对上位机的通信。主程序和中断服务程序的框图如图3、图4所示。由于篇幅所限,程序这里就不做介绍。图(3)下位机主程序框图图(4)下位机中断服务程序框图无线SOC开发平台499元S3C44B0ARM7开发板378元S3C2410ARM9开发板780元AT91SAM7S64ARM7单片机开发板之王——ELITE-I单片机学习开发系统1200元S3C2410ARM9开发板(II)950元EPM1270T144CCPLD开发板480元4结束语本文设计并实现了一种应用于油田钻井滚动轴承的振动信号测控系统。该系统采用PC与多单片机之间的串行通信实现测控,采用RS-485总线标准,半双工传输方式。上位机采用Windows环境下VB6.0开发,编程简单,界面良好,维护方便;下位机利用单片机内自带的USART通信接口,很好的实现异步串行通信。实验表明,该方法对于工作环境比较恶劣的钻井油田滚动轴承的振动信号的采集与传输,达到了实际要求,为滚动轴承故障检测提供了方便而有效的振动信号。参考文献基金号:江苏省高校自然科学基金资助项目(03KJB510025)1范逸之,陈立元VisualBasic与RS-232串行通信控制北京:中国青年出版社20022石东海单片机数据通信技术从入门到精通西安:西安电子出版社20023ADAM4000DataAcquisitionModulesUser’sManualAdvantechCo.Ltd19994王金成王旭一种基于RS-485总线的远程通信系统软件实现《微计算机信息》2001年17卷第9期系统晶振是11.0592MHz;51单片机发送单片机程序;此程序用Proteus仿真通过;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信ORG0000HAJMPSTARTORG0040HSTART:MOVSP,#60HMOVSCON,#50H;串口方式1MOVTMOD,#20H;T1方式2MOVTL1,#0FDH;波特率9600的常数MOVTH1,#0FDHSETBTR1movr5,#00hWAIT:movp1,#0ffhmova,p1movr5,alcalldelay;读键盘,这里去抖动,还要加几句话mova,p1nopCJNEA,5,WAIT;是否有键输入MOVSBUF,a;串口输出键盘输入的值NOPSS:JBCTI,WAIT;是否发送完毕SJMPSSDELAY:;延时子程序PUSH0;保存现场PUSH1MOV0,#06HDELAY1:MOV1,#0HDJNZ1,$DJNZ0,DELAY1POP1;恢复现场POP0RETEND;系统晶振是11.0592MHz;51单片机接收单片机程序;此程序用Proteus仿真通过;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信ORG0000HAJMPSTARTORG0040HSTART:MOVSCON,#50H;串口方式1MOVTMOD,#20H;T1方式2MOVTL1,#0FDH;波特率9600的常数MOVTH1,#0FDHSETBTR1WAIT:JBCRI,DIS_REC;是否接收到数据sjmpwaitDIS_REC:MOVA,SBUF;读串口接收到的数据movp1,aSJMPwaitend双机通信怎么连,多机通信并上去就可以了回答者:ahai0306-四级2009-4-215:165-接地;8-电源;一主机多从机时:单片机的RXD接MAX485的RO,单片机的TXD接MAX的DI;MAX485的DE和RE接单片机IO口上(只接在一个IO口即可,因为是半双工通信)。主机MAX485与从机MAX485:主机A接从机B,从机A接主机B。(MAX485的A和B之间接一匹配电阻大小100欧)回答者:lm198642-三级2009-4-310:01给设计图?RS-485单片机的话,单纯从硬件来说,其实和RS-232串口非常类似,只是将232芯片替换成485芯片就可以了,多机通信的问题,485本身就支持点对多点通信的,只不过是半双工的,在软件编写的时候要多注意一下仲裁机制而已。这个是根据协议来的,485总线设备是带有地址码的,打个比方吧,232串口通信就是两个人通过电话进行通信,肯定只能点对点,而485则是教室里面一个老师和很多个学生交谈,当老师(主控设备)点名(即轮询到某个485地址码)要求某个学生(从设备)回答问题,这个学生如果没有翘课(从设备故障或者通信故障)的话,就应答站起来回答问题。在老师点名,学生答问的过程中,都是只有一个人发言,因为485总线有这样的仲裁机制,所以才可以实现点到多点的通信,而232的则没有这个机制,所以不行。不知道这样是否清楚。下图是使用MAX485芯片设计了一个RS232到RS485的转换接口电路图。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableR

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功