基于RS-485总线的多主机通信方法
_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页,欢迎您写论文时引用,并注明出处。
RS-485 多主机 接口电路 通信协议 201601 相关文章:
- 工程师难题:如何为RS-485应用设计半双工中继器?(11-26)
- 正确认识RS-485布线过程中的错误观念(03-06)
- 如何选择RS-232/RS-485/RS-422转换器(12-19)
- CAN通信协议在矿井安全生产监控系统中的应用(09-27)
- 基于C8051的多路高精度数据采集系统设计(05-23)
- EMC COMPLIANT RS-485收发器保护电路解析(06-05)