×
嵌入式开发 > 详情

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

发布时间:2020-07-07 发布时间:
|

0 前言

单片机因其优越的性价比和灵活的功能配置而被广泛的应用于测控领域。而PC则因为丰富的软、硬件资源,被广泛应用于网络监控系统中。这就是一台PC与多台单片机所组成的主从式网络测控系统。串行通信是计算机和外部设备进行数据交换的重要渠道,由于其成本低,性能稳定并遵循统一的标准,因而在工程中被广泛应用。本文以华东石油局的一台油田钻井的滚动轴承信号采集系统为例,讨论一种基于串行通信标准的测控系统的通信协议及其具体的软、硬件实现。在本系统中,上位机以PC和Windows操作系统为软、硬件资源;下位机采用ATMEL公司89C51,总线标准采用的是测控系统常用的RS-485。

1 通信系统的硬件设计

尽管RS-232有些缺点,但在两台短距离设备间的短距离信息传输时,最通用的还是RS-232。但对于多台设备的长距离传输,它就很难实现。而 RS-485是一个多引出线接口,这个接口可以有多个驱动器和接收器,可以实现一台PC和多台单片机之间的串行通信;而且RS-485的最长的传输距离为 1200m,适合中距离的传输。本文针对油田钻井的滚动轴承信号采集及传输,根据工地实际工作环境,采用RS-485通信接口。

1.1 PC和RS-485总线的接口[3]

该接口的主要功能是完成RS-232到RS-485的转变,完成这个功能的芯片很多,比如MAX-485,我们的系统采用的是ADAM公司的ADAM4250,RS-232/RS-485转换器,结构如图(1)所示:

图1 ADAM4250


1.2 89c51和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机的数据格式为:

开始码

数据体

校验和

结束码

00H

DATA[0]DATA[1]…DATA[N-1]

DATASUM

FFH

3 通信系统的软件设计

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)Xor send_arr2(0)…Xor send_arr6(6)

Output_Enable=False ; 关闭轮询

Open_Port ; 开串口

MSComm1.RTSEnable=False ; 置发送状态

MSComm1.Output=send_arr0 ; 发送

Choose_Delay ; 发送延时

MSComm1.Output=send_arr1

Choose_Delay

……

MSComm1.Output=sen_arr7

Choose_Delay

MSComm1.RTSEnable=True ; 置接收状态

Choose_Frame_delay ; 接收延时

Accept_arr=MSComm1.Input ; 数据接收数组

For j=Lbound(Accept_arr)To Ubound(Accept_arr)

If Ubound(Accept_arr)=7 Then

Buf(j)=buf(j)+Str(Accept_arr(j))

由于程序较长,对程序其它部分不详细叙述,这里只列几个注意点:

(1)由于采用半双工传输方式,开始发送前要禁止接受。发送结束后要先关闭发送再开启接收,以保证数据传输的正确性。

(2)发送以字节为单位,每个字节间要考虑延时,以免因溢出而丢失数据。延时时间主要取决于传输时所确定的波特率。

(3)接收数据也要考虑延时,以等待下位机将一个单位的数据全部发给上位机。

3.2 下位机通信软件的设计[2]

本系统中的单片机采用的是ATMEL公司89C51,这是在国内应用相当广泛的一款单片机,程序用C51来编写,从实时性角度来考虑,下位机的通信方式采用中断方式。这样下位机程序就包括了下位机主程序和下位机中断服务程序。主程序用于定时器T1初始化、串行口初始化和中断初始化。中断服务程序用于对上位机的通信。主程序和中断服务程序的框图如图3、图4所示。由于篇幅所限,程序这里就不做介绍。


图(3) 下位机主程序框图

图(4)下位机中断服务程序框图

4 结束语

本文设计并实现了一种应用于油田钻井滚动轴承的振动信号测控系统。该系统采用PC与多单片机之间的串行通信实现测控,采用RS-485总线标准,半双工传输方式。上位机采用Windows环境下VB6.0开发,编程简单,界面良好,维护方便;下位机利用单片机内自带的USART通信接口,很好的实现异步串行通信。实验表明,该方法对于工作环境比较恶劣的钻井油田滚动轴承的振动信号的采集与传输,达到了实际要求,为滚动轴承故障检测提供了方便而有效的振动信号。

参考文献

基金号:江苏省高校自然科学基金资助项目(03KJB510025)

1 范逸之,陈立元 Visual Basic与RS-232串行通信控制 北京:中国青年出版社 2002

2 石东海 单片机数据通信技术从入门到精通 西安:西安电子出版社 2002

3 ADAM 4000 Data Acquisition Modules User’s Manual Advantech Co.Ltd 1999

4 王金成 王旭 一种基于RS-485总线的远程通信系统软件实现 《微计算机信息》 2001年17卷第9期



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Recogni:将高端AI芯片推向自动驾驶边缘