微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 基于RS-485总线的多主机通信方法

基于RS-485总线的多主机通信方法

时间:12-28 来源:电子产品世界 点击:

_REC==0) || (F_REC==0x10))

{

//缓存区为空,或只有缓存区2被占用

buf_rev1=(u8 *)malloc(dataNums);

memcpy(buf_rev1,&DataIn,dataNums);

if(buf_index==0) buf_index=1;

F_REC|=0x01; //缓存区1已占用

}

else if(F_REC==0x01)

{

//只有缓存区1被占用

……

}

else if(F_REC==0x11)

{

//缓存区已满

……

4.3 报文发送程序

报文发送程序主要是将任意长度的报文发送到总线上。由于485总线通信始终在接收/发送之间切换,为保证总线可靠工作,状态切换时应做适当延时,等总线状态稳定后,再进行数据的收发。具体方法是在数据发送状态下,先将485_DIR置“1”,延时2ms,再发送数据,数据发送完成后,延时2ms,直接将485_DIR置“0”。这种处理可有效提高总线的稳定性,增强数据传输的可靠性。延时时间的取值与波特率有关,波特率越小,延时应越大。

……

RS_485_TX_EN;//485发送使能

RS485_Delay(2);//延时2ms

for (i=0; i

{

USART_SendData(USART3, data[i]);

while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);

}

/*RS485_Delay(2);*/

RS_485_RX_EN;//485接收使能

4.4 报文处理程序

为了保证中断接收程序始终能快速响应对方发来的数据,我们把报文处理程序放在中断之外,以免程序处理当前报文用时过长,影响下一组报文的接收。在主程序中通过对接收标志位的判断来调用报文处理程序,根据接收报文内容的不同给出相应的响应。

int main(void)

{

……

while(1)

{

……

if(F_REC>0)

{

if(buf_index==1) DealData(buf_rev1,buf_len1);

if(buf_index==2) DealData(buf_rev2,buf_len2);

}

5 结语

本文中介绍了一种多主机通信的485总线通信实现方法,该方法适用于工作环境相对恶劣、多主机随机通信需求较高的场合,目前已应用到某模拟训练系统,经两年多的使用,系统运行稳定可靠。在具体实践中,对于工作条件较好时,为提高效率可对通信协议进行精简设计,如缩短帧结构、简化通信过程等,藉此可减少总线占用时间,缩短节点响应时间,达到更为理想的通信效果。

参考文献:

[1]陈铁军,谢春萍. PC机与RS 485总线多机串行通信的软硬件设计[J].现代电子技术,2007(5):103-105

[2]吴桂林 郑建勇. RS485上下位机多机通信网络系统设计[J].微计算机信息,2008,24(12-3):112-113

[3]潘群,向军,王琳.RS-485串行通信接口电路的设计与应用[J].常州工学院学报,2009,22(3):38-42

[4]魏金文,马维华,吴侨. RS-485的多机通信方案探究[J]. 单片机与嵌入式系统应用,2012,10:76-78

[5]郝涛,陆宣博.基于RS485主从串口通讯协议的设计[J].装备制造技术,2013,3:38-40

[6]胡文涛.一种基于协议的提高RS-485实时性的方法[J]. 现代电子技术, 2013,36(18):10-12

[7]周建章,赵颖.基于RS- 485主从通信协议的改进[J].电子质量,2011,1:23-25

本文来源于中国科技核心期刊《电子产品世界》2016年第1期第45页,欢迎您写论文时引用,并注明出处。

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

网站地图

Top