微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用RS-485构成总线型多点数据采集系统

用RS-485构成总线型多点数据采集系统

时间:06-04 来源:互联网 点击:

三、服务软件

按照网络?议的帧格式编写的通信软件通过物理层最终完成主机与从机之间的数据交换。在总线型拓扑结构构成的分布式数据采集系统中,主机和各从机间传送的命令和数据是二进制的直接传送,并且从机还要完成采集数据和控制的任务,主机要完成集中处理的任务,所以服务软件要使主机和各从机协调一致地工作,尽量减小通信对其他工作的影响。

下面以单片机构成的总线型多点数据采集系统为例,给出用C51编写的RS-485通信部分服务软件。

1、主机程序

#define uchar unsigned char

...

sbit tr=p1.4:

void main()

{

//初始化

PCON=0; //SMODE=0

TMOD=0x20; //定时器1设为模式2,作为串行口的波特率发生器

EA=0; //禁止定时器中断

TH1=0xf3;

TL1=0xf3; //定时起始值,6MHz晶振时波特率为1200bps

SCON=0xd8; //串行口模式3,TB8=1发送地址呼叫

TR1=1; //启动定时器1

while(TI=0); //等待发送结束

TI=0;

...

}

//发送子程序

uchar SendMsg(uchar msg,uchar len,uchar IDnum)

//msg:发送缓冲区指针;len:要发送的数据长度;IDnum:从机号

{

...

TB8=1;

tr=1;

SBUF=0xff; //复位从机

while(TI=0);

TI=0;

SBUF=IDnum; //呼叫从机

while(TI=0);

TI=0;

tr=0;

while(RI=0); //等待从机回应 RI=0; //清除串行口中断标志

//下面是数据帧

TB8=0;

tr=1;

SBUF=len+2;

while(TI=0)

TI=0

for(i=0;i

{

SBUF=*(msg+i);

while(TI=0);

TI=0;

}

//下面计算 @#@冗余校验码并发送

...

//等待从机回应,看是否接收正确

...

return 0; //正确返回

}

2、从机程序

#define ADDRESS 0x01

...

sbit tr=P1.4;

//中断接收程序

void sevice-serial(void)interrupt 4 using 1

{

uchar rs;

RI=0;

ES=0; //关串行口中断

tr=0;

rs=SBUF;

if(rs=0xff) //是复位命令

{

SM2=1;

ES=1;

return;

}

if(rs!=ADDRESS) //不是呼叫本机

{

ES=1;

return;

}

SM2=0;

tr=1;

SBUF=ADDRESS; //用本机地址作为应答

while(TI=0);

TI=0;

tr=0;

//下面开始接收

...

}

四、结束语

本文着重讨论了用RS-485构成网络系统的基本组网方法,当然在具体的应用中还会有一些变化。由于RS-485具有性能优异、组网简单的优点,它在集中控制系统、分布式控制系统中的应用相当广泛,特别是在要求远距离传输的应用中。由于其硬件电路已比较成熟,设计中的问题主要集中在网络协议和服务软件的设计上。 网络协议是保证通信畅通的关键,在一定程度上也影响着网络通信的可靠性,即它必须能够抵抗实际运作环境的干扰。另外通信只是整个系统中的一个部分,系统还必须完成诸如数据采集和控制的功能。这就要求通信占用尽量少的时间,以求达到整个系统的高效率。在通信数据量一定的情况下,采用较高的波特率当然比较好,但高的波特率必定要降低传输距离,在实际应用中必须仔细衡量。更好的办法就是采用数据压缩算法,在传输前对数据进行压缩,可使通信数据量大大减少,网络效率成倍提高。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top