找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1322|回复: 13
收起左侧

51单片机多机通信,主机如何统计出从机的数量?

[复制链接]
ID:207051 发表于 2021-10-1 21:29 | 显示全部楼层 |阅读模式
我想做一个多机通信,一主机,1-225个从机,主机向从机发送地址码,从机收到,并回传给主机,主机收到如何统计出来有多少个从机在线?
回复

使用道具 举报

ID:88256 发表于 2021-10-1 22:37 | 显示全部楼层
从机一开机就一直向主机发送请求,主机响应后按顺序分配从机地址(可参考I2C总线的仲裁机制);从机离线之前必须向主机发送离线信号,以便回收地址继续利用;如果担心从机突然断电浪费地址,主机可在比较空闲时或者定时发送特殊的响应信号,对于3次没有从机响应的地址加入待分配地址参与分配。
回复

使用道具 举报

ID:624769 发表于 2021-10-1 23:08 | 显示全部楼层
做一个变量,有回复就是在线 +1 没回复就是不在线 不加,最后看变量变成几。
回复

使用道具 举报

ID:420836 发表于 2021-10-3 08:57 | 显示全部楼层
根据从设备的通信确认,主设备可以将连接的设备总数加1。
回复

使用道具 举报

ID:637144 发表于 2021-10-4 15:53 来自手机 | 显示全部楼层
一般上线都会给主机发个信号
回复

使用道具 举报

ID:883242 发表于 2021-10-4 16:02 | 显示全部楼层
发心跳,没回复就算掉线。问题是你不知道n号站对应哪个从机真的能用吗?
回复

使用道具 举报

ID:819053 发表于 2022-4-1 15:33 | 显示全部楼层
188610329 发表于 2021-10-1 23:08
做一个变量,有回复就是在线 +1 没回复就是不在线 不加,最后看变量变成几。

就是这样做的,说时统计不准,时多时少
回复

使用道具 举报

ID:819053 发表于 2022-4-1 15:37 | 显示全部楼层
Hephaestus 发表于 2021-10-4 16:02
发心跳,没回复就算掉线。问题是你不知道n号站对应哪个从机真的能用吗?

我从机有编号,从机收到就返回一个数,主机变量+1,一个周期变量清0
回复

使用道具 举报

ID:883242 发表于 2022-4-1 17:56 | 显示全部楼层
lisanfang 发表于 2022-4-1 15:37
我从机有编号,从机收到就返回一个数,主机变量+1,一个周期变量清0

那么是问题已经解决了,还是你还有什么别的问题?
回复

使用道具 举报

ID:264021 发表于 2022-4-1 18:49 | 显示全部楼层
把每个从机设置一个名字,每次和主机交换数据时先发送名字,后发送数据,从机收到自己的名字时就收主机的数据进行交换
回复

使用道具 举报

ID:207051 发表于 2022-4-22 22:22 | 显示全部楼层
188610329 发表于 2021-10-1 23:08
做一个变量,有回复就是在线 +1 没回复就是不在线 不加,最后看变量变成几。

我就是这种方法,统计不准,明明有时12个在线,显示11个   
回复

使用道具 举报

ID:207051 发表于 2022-4-22 22:26 | 显示全部楼层
Hephaestus 发表于 2022-4-1 17:56
那么是问题已经解决了,还是你还有什么别的问题?

至今还在摸索,有时计不准不知道是什么原因,串口有时也死机了   
回复

使用道具 举报

ID:207051 发表于 2022-4-22 22:46 | 显示全部楼层

void ZOHJI_NUM()   //============================发从机代码=0-255==========
{       
        static uchar  TX_ZHONGJI_COUT=0;//发送从机的编码
               uchar  SLAVE_COUT=0;//从机从计数//

                 //===接收到的数据等于发射的数据
             if(ZHONGJI_Dat==TX_ZHONGJI_COUT)
                   {
           ERR_SALVE_TIM=0;                //没收到开始计时          
           TX_ZHONGJI_COUT++;        //发送从机号,0-255XTD!
           SLAVE_COUT++;                //从机返回来编号0-255XDNX!收到也开始计数
                   Slave_PCS++;    //开始统计从机数量
                   }
                  
                 if(ZHONGJI_Dat!=TX_ZHONGJI_COUT)
                  
                    {
                  
                      TX_ZHONGJI_COUT;         //发从机号出去,从机没有收到,重发不变的代码TX_ZHONGJI_COUT
                      SLAVE_COUT;            //从机没有收到,重发不计数
                               
                      ERR_SALVE_TIM++;  //从机未收到超时计时
                  
                    }

                         if(ERR_SALVE_TIM==4)
                             {                                         
                              TX_ZHONGJI_COUT++;         //发从机号出去,3次从机没有到,发下一个从机代码
                                  SLAVE_COUT++;         //统计从机数量加一次。保持跟发送的代码同步
                             }
                                                  
                                 if(ERR_SALVE_TIM==7)   //如果3次从机也没有收到就结束
                             {
                              ERR_SALVE_TIM=0;                                         
                              TX_ZHONGJI_COUT=1;         //如果还没有从机返回来重新开始,表一轮结束//从1开始发
                                 
                                   SLAVE_COUT=0; //从机计数清0
                  ZHONGJI_PCS_A=Slave_PCS;//把计数发送到遥控器上显示
                  Slave_PCS=0;        //从机总计数清0                       
                         
                             }
                  
          TX_ZHONGJI_NUM[0]=TX_ZHONGJI_COUT/100+0x30;
      TX_ZHONGJI_NUM[1]=TX_ZHONGJI_COUT%100/10+0x30;
          TX_ZHONGJI_NUM[2]=TX_ZHONGJI_COUT%100%10+0x30;
          TX_ZHONGJI_NUM[3]='X';
      TX_ZHONGJI_NUM[4]='T';
          TX_ZHONGJI_NUM[5]='D';
          TX_ZHONGJI_NUM[6]='!';                 
                                 
        SendString(TX_ZHONGJI_NUM);//发代码1-255个数          
                                 
  memset(S_tab,0,sizeof(S_tab));        
                  
}       
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表